Solidity তে Event Emitting এবং Listening

Events এবং Logs (ইভেন্ট এবং লগস) - সলিডিটি (Solidity) - Computer Programming

296

Solidity তে ইভেন্ট (Events) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা স্মার্ট কন্ট্রাক্টের বাহিরের সিস্টেম বা অ্যাপ্লিকেশনকে ব্লকচেইনে ঘটে যাওয়া কার্যক্রম সম্পর্কে জানাতে ব্যবহৃত হয়। যখন কোনো নির্দিষ্ট কাজ বা পরিবর্তন ঘটে, তখন ইভেন্ট ব্যবহার করে ব্লকচেইনে সেই পরিবর্তন বা কার্যক্রমের বিজ্ঞপ্তি দেয়া যায়। এটি সাধারণত ফ্রন্টএন্ড অ্যাপ্লিকেশন (যেমন: ওয়েব অ্যাপ) বা বাইরের সিস্টেমের জন্য ব্যবহৃত হয়, যা স্মার্ট কন্ট্রাক্টের কার্যক্রম ট্র্যাক করতে চায়।

Solidity তে ইভেন্ট emit করে এবং বাইরের সিস্টেমে সেই ইভেন্ট listen করা হয়। এখানে ইভেন্ট ইমিটিং এবং লিসেনিং সম্পর্কিত সবকিছু বিস্তারিত আলোচনা করা হলো।


1. Solidity তে ইভেন্ট ডিফাইন করা

Solidity তে ইভেন্ট ডিফাইন করা হয় event কিওয়ার্ড দিয়ে। ইভেন্টের মাধ্যমে কিছু তথ্য ব্লকচেইনে রেকর্ড করা হয় যা পরে বাইরের সিস্টেমের কাছে অ্যাক্সেসযোগ্য হয়। ইভেন্টে সাধারণত একটি বা একাধিক প্যারামিটার থাকতে পারে।

ইভেন্ট ডিক্লারেশন গঠন:

event EventName(type parameter1, type parameter2, ...);

উদাহরণ:

pragma solidity ^0.8.0;

contract MyContract {
    event BalanceUpdated(address indexed user, uint256 newBalance);

    function updateBalance(uint256 _newBalance) public {
        emit BalanceUpdated(msg.sender, _newBalance);
    }
}

এখানে, BalanceUpdated নামে একটি ইভেন্ট ডিফাইন করা হয়েছে, যা user (Ethereum ঠিকানা) এবং newBalance (ব্যালেন্স) প্যারামিটার নেয়। যখন updateBalance ফাংশনটি কল করা হয়, তখন এই ইভেন্টটি emit করা হবে।

  • indexed কিওয়ার্ড প্যারামিটারটি ইন্ডেক্সড করে, যাতে ব্যবহারকারীরা সেই প্যারামিটার দ্বারা ইভেন্টটি অনুসন্ধান করতে পারে।

2. ইভেন্ট Emitting (ইভেন্ট ট্রিগার করা)

একবার একটি ইভেন্ট ডিফাইন করার পর, এটি ট্রিগার বা emit করা হয়। ইভেন্টে ডেটা পাঠাতে emit কিওয়ার্ড ব্যবহার করা হয়। ইভেন্ট ট্রিগার হলে ব্লকচেইনে সেই ইভেন্টের তথ্য সংরক্ষিত হয় এবং পরে বাইরের সিস্টেমে অ্যাক্সেসযোগ্য হয়ে ওঠে।

ইভেন্ট Emit করার উদাহরণ:

pragma solidity ^0.8.0;

contract MyContract {
    event BalanceUpdated(address indexed user, uint256 newBalance);

    function updateBalance(uint256 _newBalance) public {
        emit BalanceUpdated(msg.sender, _newBalance);
    }
}

এখানে, updateBalance ফাংশনটি BalanceUpdated ইভেন্টটি emit করবে এবং msg.sender (ফাংশনটি কল করা ব্যবহারকারীর ঠিকানা) এবং _newBalance (নতুন ব্যালেন্স) প্যারামিটার হিসেবে পাঠানো হবে।


3. Event Listening (ইভেন্ট শুনে নেয়া)

একবার একটি ইভেন্ট emit করা হলে, এটি বাইরের সিস্টেম বা অ্যাপ্লিকেশন দ্বারা শোনা (listen) যেতে পারে। ওয়েব অ্যাপ্লিকেশন বা বাইরের সিস্টেম ইথেরিয়াম নোডের সাথে ইন্টারঅ্যাক্ট করতে পারে এবং সেই ইভেন্ট ট্র্যাক করতে পারে।

বাইরের সিস্টেম যেমন web3.js বা ethers.js ব্যবহার করে এই ইভেন্ট শোনা হয়।

web3.js এর মাধ্যমে ইভেন্ট লিসেনিং:

const Web3 = require('web3');
const web3 = new Web3("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID");

const contractAddress = "0xYourContractAddress";
const abi = [ /* ABI here */ ];

const contract = new web3.eth.Contract(abi, contractAddress);

contract.events.BalanceUpdated({
    fromBlock: 0
}, (error, event) => {
    if (error) {
        console.log(error);
    } else {
        console.log("Balance Updated:", event.returnValues);
    }
});

এখানে, BalanceUpdated ইভেন্টটি শোনা হচ্ছে এবং যখনই এটি ব্লকচেইনে emit হয়, তখন event.returnValues এর মাধ্যমে ইভেন্টের প্যারামিটারগুলি পাওয়া যাবে। fromBlock: 0 এর মানে হল যে, ইভেন্টের ইতিহাস শুরু থেকে শোনা হবে।


4. Event Filtering (ইভেন্ট ফিল্টার করা)

ইভেন্ট ফিল্টারিংয়ের মাধ্যমে আপনি নির্দিষ্ট প্যারামিটার বা শর্ত দিয়ে ইভেন্টগুলি ফিল্টার করতে পারেন। এটি একটি শক্তিশালী উপায় যাতে আপনি নির্দিষ্ট ধরনের ইভেন্ট বা মান অনুযায়ী ইভেন্ট শোনাতে পারেন।

web3.js তে ফিল্টারিং:

contract.events.BalanceUpdated({
    filter: { user: "0xUserAddress" },  // শুধু নির্দিষ্ট ব্যবহারকারীর জন্য
    fromBlock: 0
}, (error, event) => {
    if (error) {
        console.log(error);
    } else {
        console.log("Balance Updated for user:", event.returnValues);
    }
});

এখানে, filter: { user: "0xUserAddress" } ব্যবহৃত হয়েছে, যাতে কেবলমাত্র নির্দিষ্ট user এর জন্য ইভেন্ট শোনা হয়।


সারাংশ

Solidity তে ইভেন্ট একটি গুরুত্বপূর্ণ উপাদান, যা স্মার্ট কন্ট্রাক্টে ঘটিত পরিবর্তন বা কার্যক্রমের তথ্য বাইরের সিস্টেম বা অ্যাপ্লিকেশনকে জানানোর জন্য ব্যবহৃত হয়। Event Emitting এর মাধ্যমে স্মার্ট কন্ট্রাক্টে ইভেন্ট ট্রিগার করা হয় এবং Event Listening এর মাধ্যমে বাইরের সিস্টেম সেই ইভেন্ট শোনে এবং প্রয়োজনীয় তথ্য প্রাপ্তি করে। Solidity তে ইভেন্ট ব্যবহারের মাধ্যমে স্মার্ট কন্ট্রাক্টের কার্যক্রম আরও স্বচ্ছ ও ট্র্যাকযোগ্য হয়ে ওঠে।

Content added By
Promotion

Are you sure to start over?

Loading...