Solidity তে logs বা events হল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা স্মার্ট কন্ট্রাক্টের সাথে ইন্টারঅ্যাকশন ট্র্যাক করতে ব্যবহৃত হয়। Logs বা events ব্লকচেইনে সংরক্ষিত হয় না, কিন্তু তাদের ট্র্যাক করা যায় এবং ড্যাপ (dApp) বা ওয়েব3 ইন্টারফেসের মাধ্যমে সেগুলি পড়া যেতে পারে। Logs ব্লকচেইনে স্মার্ট কন্ট্রাক্টের কার্যকলাপ বা ট্রানজেকশনকে টার্গেট করে তৈরি হয় এবং এগুলোর মাধ্যমে স্টোরেজ বা ট্রানজেকশন খরচ কমানো যায়, কারণ logs এর জন্য ব্লকচেইনে ডেটা সংরক্ষণ করা হয় না।
Logs বা Events তৈরি করার জন্য Steps
- Event Declaration
- Emitting the Event
- Listening to the Event (Frontend)
১. Event Declaration
Event হল একটি বিশেষ ধরনের ডেটা যা আমরা Solidity স্মার্ট কন্ট্রাক্টে ঘোষণা করি এবং পরবর্তীতে এক্সিকিউশনের সময় এটি "emit" করা হয়। এটি ডেটাকে ব্লকচেইনে ট্র্যাক করতে সহায়তা করে, যাতে পরবর্তী সময়ে তা সহজে পড়া যায়।
Event Declaration এর উদাহরণ:
pragma solidity ^0.8.0;
contract EventExample {
// Event Declaration
event Deposit(address indexed user, uint amount, uint balance);
uint public balance;
// Deposit ফাংশন যা Event emit করবে
function deposit(uint _amount) public {
balance += _amount;
// Event Emit করা হচ্ছে
emit Deposit(msg.sender, _amount, balance);
}
}এখানে:
Depositএকটি event যাaddress(ব্যবহারকারীর ঠিকানা),amount(পেমেন্টের পরিমাণ), এবংbalance(ব্যালেন্স) সংরক্ষণ করবে।indexedশব্দটি ব্যবহৃত হয়েছে, যার মাধ্যমেaddressফিল্ডটি ইনডেক্সড করা হয়েছে, অর্থাৎ ব্লকচেইনে সহজে অনুসন্ধানযোগ্য হবে।
২. Emitting the Event
একটি event যখন এক্সিকিউট হয় তখন এটি emit keyword এর মাধ্যমে ট্রিগার করা হয়। স্মার্ট কন্ট্রাক্টের কোন ফাংশন যখন সফলভাবে সম্পন্ন হয়, তখন emit ব্যবহার করে সেই ইভেন্টটি তৈরি করা হয়।
Event Emit করার উদাহরণ:
pragma solidity ^0.8.0;
contract EventExample {
event Deposit(address indexed user, uint amount, uint balance);
uint public balance;
function deposit(uint _amount) public {
balance += _amount;
emit Deposit(msg.sender, _amount, balance); // Event Emit হচ্ছে
}
}এখানে:
emit Deposit(msg.sender, _amount, balance);এর মাধ্যমেDepositইভেন্টটি তৈরি হচ্ছে এবং ট্রানজেকশনের প্রাসঙ্গিক তথ্য (ব্যবহারকারীর ঠিকানা, পেমেন্টের পরিমাণ, এবং ব্যালেন্স) লগ হচ্ছে।
৩. Listening to the Event (Frontend)
Frontend এ আপনি Web3.js বা Ethers.js ব্যবহার করে এই events কে শুনতে পারেন। যখন একটি ইভেন্ট ট্রিগার হয়, তখন এটি একটি লগের মাধ্যমে চিহ্নিত করা হয় এবং ফ্রন্টএন্ড থেকে সেই ইভেন্টকে সঠিকভাবে হ্যান্ডল করা যায়।
Web3.js এর মাধ্যমে Event Listen করার উদাহরণ:
// Web3.js ব্যবহার করে Event Listen করা
const contract = new web3.eth.Contract(abi, contractAddress);
// Event Subscribe করা
contract.events.Deposit({
fromBlock: 0
}, function(error, event){
console.log(event);
});এখানে:
contract.events.Depositএর মাধ্যমেDepositইভেন্টের জন্য সাবস্ক্রাইব করা হয়েছে।fromBlock: 0এর মাধ্যমে ইভেন্টটি ব্লকচেইনের শুরু থেকে ট্র্যাক করা হবে।
Logs এবং Events এর ব্যবহারের সুবিধা
- ডেটা সংরক্ষণ: স্মার্ট কন্ট্রাক্টের মধ্যে
logsবাeventsব্যবহার করে, আপনি গুরুত্বপূর্ণ কার্যকলাপ সংরক্ষণ করতে পারেন, যেমন পেমেন্ট, ট্রানজেকশন, এবং স্টেট পরিবর্তন। - কম গ্যাস খরচ: Logs ব্লকচেইনে সংরক্ষিত হয় না, তাই এর জন্য কোনো স্টোরেজ খরচ লাগে না। শুধু ট্রানজেকশন ডেটা এবং ইভেন্ট লগিং সংরক্ষিত হয়।
- ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের জন্য সহায়ক: Events ড্যাপস এর জন্য একটি গুরুত্বপূর্ণ উপাদান, কারণ এগুলির মাধ্যমে ফ্রন্টএন্ড অ্যাপ্লিকেশন দ্রুত এবং কার্যকরীভাবে রিয়েল-টাইম ইন্টারঅ্যাকশন ট্র্যাক করতে পারে।
সারাংশ
Solidity তে logs বা events স্মার্ট কন্ট্রাক্টের কার্যকলাপ ট্র্যাক এবং রিয়েল-টাইম তথ্য ট্রান্সফার করতে সহায়ক। Events ব্লকচেইনে লগিং করা হয়, কিন্তু স্টোরেজে সংরক্ষিত হয় না, যা গ্যাস খরচ কমায় এবং ট্রানজেকশন অ্যাক্সেস করতে সুবিধা দেয়। আপনি যখন emit ব্যবহার করে ইভেন্ট ট্রিগার করেন, তখন সেটি সহজেই Web3.js বা Ethers.js এর মাধ্যমে ফ্রন্টএন্ডে শুনতে এবং প্রদর্শন করতে পারেন। Logs এবং Events স্মার্ট কন্ট্রাক্টের ইন্টারঅ্যাকশন ট্র্যাক করতে ব্যবহৃত হয়, যা dApp বা ওয়েব অ্যাপ্লিকেশনগুলোতে অত্যন্ত গুরুত্বপূর্ণ।
Read more