---
title: "ইভেন্ট ব্যবহার করে স্মার্ট কন্ট্রাক্ট থেকে ডেটা লগ করা"
description: "স্মার্ট কন্ট্রাক্ট ইভেন্টের পরিচিতি এবং ডেটা লগ করার জন্য আপনি কীভাবে সেগুলো ব্যবহার করতে পারেন"
author: "jdourlens"
tags: ["স্মার্ট কন্ট্রাক্ট", "Remix", "Solidity", "ইভেন্ট"]
skill: intermediate
breadcrumb: "ইভেন্ট লগিং"
lang: bn
published: 2020-04-03
source: EthereumDev
sourceUrl: https://ethereumdev.io/logging-data-with-events/
address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"
---

Solidity-তে, [ইভেন্ট](/developers/docs/smart-contracts/anatomy/#events-and-logs) হলো প্রেরিত সিগন্যাল যা স্মার্ট কন্ট্রাক্ট ফায়ার করতে পারে। বিকেন্দ্রীকৃত অ্যাপ্লিকেশন (dapp), বা ইথেরিয়াম জেসন-আরপিসি API-এর সাথে সংযুক্ত যেকোনো কিছু, এই ইভেন্টগুলো শুনতে পারে এবং সেই অনুযায়ী কাজ করতে পারে। একটি ইভেন্টকে ইনডেক্সও করা যেতে পারে যাতে ইভেন্টের ইতিহাস পরে অনুসন্ধানযোগ্য হয়।

## ইভেন্ট {#events}

এই নিবন্ধটি লেখার সময় ইথেরিয়াম ব্লকচেইন-এ সবচেয়ে সাধারণ ইভেন্ট হলো Transfer ইভেন্ট, যা কেউ টোকেন হস্তান্তর করার সময় ERC20 টোকেন দ্বারা নির্গত হয়।

```solidity
event Transfer(address indexed from, address indexed to, uint256 value);
```

ইভেন্ট স্বাক্ষর কন্ট্রাক্ট কোডের ভিতরে ঘোষণা করা হয় এবং emit কীওয়ার্ডের মাধ্যমে নির্গত করা যেতে পারে। উদাহরণস্বরূপ, transfer ইভেন্ট লগ করে কে হস্তান্তর পাঠিয়েছে (_from_), কাকে পাঠিয়েছে (_to_) এবং কতগুলো টোকেন হস্তান্তর করা হয়েছে (_value_)।

যদি আমরা আমাদের Counter স্মার্ট কন্ট্রাক্ট-এ ফিরে যাই এবং প্রতিবার মান পরিবর্তন হওয়ার সময় লগ করার সিদ্ধান্ত নিই। যেহেতু এই কন্ট্রাক্টটি ডিপ্লয় করা হওয়ার জন্য নয় বরং এটিকে প্রসারিত করে অন্য একটি কন্ট্রাক্ট তৈরির ভিত্তি হিসেবে কাজ করার জন্য তৈরি করা হয়েছে: একে একটি অ্যাবস্ট্রাক্ট কন্ট্রাক্ট বলা হয়। আমাদের কাউন্টার উদাহরণের ক্ষেত্রে, এটি দেখতে এরকম হবে:

```solidity
pragma solidity 0.5.17;

contract Counter {

    event ValueChanged(uint oldValue, uint256 newValue);

    // কাউন্টের সংখ্যা রাখার জন্য unsigned int টাইপের প্রাইভেট ভেরিয়েবল
    uint256 private count = 0;

    // যে ফাংশনটি আমাদের কাউন্টার বৃদ্ধি করে
    function increment() public {
        count += 1;
        emit ValueChanged(count - 1, count);
    }

    // কাউন্টের মান পাওয়ার জন্য গেটার
    function getCount() public view returns (uint256) {
        return count;
    }

}
```

লক্ষ্য করুন যে:

- **লাইন 5**: আমরা আমাদের ইভেন্ট এবং এতে কী রয়েছে তা ঘোষণা করি, পুরানো মান এবং নতুন মান।

- **লাইন 13**: যখন আমরা আমাদের count ভেরিয়েবল বৃদ্ধি করি, তখন আমরা ইভেন্টটি নির্গত করি।

যদি আমরা এখন কন্ট্রাক্টটি ডিপ্লয় করি এবং increment ফাংশন কল করি, আমরা দেখতে পাব যে Remix স্বয়ংক্রিয়ভাবে এটি প্রদর্শন করবে যদি আপনি logs নামক একটি অ্যারের ভিতরে নতুন ট্রানজ্যাকশন-এ ক্লিক করেন।

![Remix screenshot](./remix-screenshot.png)

আপনার স্মার্ট কন্ট্রাক্ট ডিবাগ করার জন্য লগ সত্যিই দরকারী, তবে আপনি যদি বিভিন্ন লোকের দ্বারা ব্যবহৃত অ্যাপ্লিকেশন তৈরি করেন তবে এগুলো গুরুত্বপূর্ণ এবং আপনার স্মার্ট কন্ট্রাক্ট কীভাবে ব্যবহৃত হয় তা ট্র্যাক করতে এবং বুঝতে অ্যানালিটিক্স তৈরি করা সহজ করে তোলে। ট্রানজ্যাকশন দ্বারা জেনারেট করা লগগুলো জনপ্রিয় ব্লক এক্সপ্লোরারগুলোতে প্রদর্শিত হয় এবং আপনি উদাহরণস্বরূপ নির্দিষ্ট ইভেন্টগুলো শোনার জন্য এবং সেগুলো ঘটলে ব্যবস্থা নেওয়ার জন্য অফচেইন স্ক্রিপ্ট তৈরি করতেও এগুলো ব্যবহার করতে পারেন।