Solidity তে Events এবং Logs অত্যন্ত গুরুত্বপূর্ণ ফিচার যা স্মার্ট কন্ট্রাক্টের কার্যক্রম ট্র্যাক করতে, ডিবাগিং করতে এবং ব্লকচেইনে ঘটনার ইতিহাস সংরক্ষণ করতে ব্যবহৃত হয়। ইভেন্ট এবং লগস ব্লকচেইনে পরিবর্তন ও লেনদেনের তথ্য রেকর্ড করতে সাহায্য করে এবং ব্যবহারকারীরা বা অন্যান্য কন্ট্রাক্টে এই তথ্য অ্যাক্সেস করতে পারে।
১. Events (ইভেন্ট)
Event হল একটি বিশেষ ধরনের লগ যা স্মার্ট কন্ট্রাক্টের মধ্যে ঘটে এমন গুরুত্বপূর্ণ কার্যক্রমের জন্য তৈরি করা হয়। ইভেন্টগুলি ব্লকচেইনে সংরক্ষিত হয় এবং তা সাধারণত ব্যবহারকারীদের বা অন্যান্য কন্ট্রাক্টগুলিকে সিগন্যাল দিতে ব্যবহৃত হয়। ইভেন্টগুলির মাধ্যমে অ্যাপ্লিকেশনগুলির মধ্যে যোগাযোগ করা সহজ হয়, বিশেষত যখন ক্লায়েন্টরা (যেমন ওয়েব3.js বা Ethers.js) এই ইভেন্টগুলির মাধ্যমে অ্যাক্সেস করে।
Event Declaration (ইভেন্ট ঘোষণা)
Solidity তে ইভেন্ট ডিক্লেয়ার করার জন্য event কিওয়ার্ড ব্যবহার করা হয়।
pragma solidity ^0.8.0;
contract EventExample {
// Declaring an event
event Transfer(address indexed from, address indexed to, uint256 value);
function transfer(address _to, uint256 _value) public {
// Emitting the event
emit Transfer(msg.sender, _to, _value);
}
}এখানে, Transfer নামের একটি ইভেন্ট ডিক্লেয়ার করা হয়েছে যা দুটি address এবং একটি uint256 মান নেবে। এই ইভেন্টটি তখন emit কিওয়ার্ড ব্যবহার করে ট্রিগার (অর্থাৎ ঘটানো) করা হয়।
Event Indexing (ইভেন্ট ইনডেক্সিং)
Solidity তে, ইভেন্টের কিছু প্যারামিটার indexed হিসেবে চিহ্নিত করা যায়। এটি সেই প্যারামিটারগুলিকে ফিল্টার করার সুবিধা দেয়। সাধারণত, আপনি যেসব প্যারামিটার দিয়ে খোঁজ করতে চান, সেগুলিকে indexed হিসেবে ব্যবহার করবেন।
event Transfer(address indexed from, address indexed to, uint256 value);এখানে, from এবং to প্যারামিটারগুলো ইনডেক্সড করা হয়েছে, যার ফলে ট্রানজেকশনগুলি ফিল্টার করতে বা অনুসন্ধান করতে সহজ হবে।
২. Logs (লগস)
Logs হল ইভেন্টগুলির রেকর্ড, যা ব্লকচেইনে স্টোর হয়। যখন একটি ইভেন্ট এমিট (trigger) করা হয়, তখন সেটি একটি log entry হিসেবে ব্লকচেইনে সংরক্ষিত হয়। Logs মূলত ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন (dApp) এ ইভেন্টগুলির স্টোরেজ এবং সিগন্যালিংয়ের জন্য ব্যবহৃত হয়।
Logs Access (লগস অ্যাক্সেস)
যখন একটি ইভেন্ট ব্লকচেইনে এমিট হয়, তখন সেই ইভেন্টের লগগুলি ব্লকচেইনে সংরক্ষিত থাকে এবং এগুলিকে পরে Web3.js, Ethers.js অথবা অন্যান্য ক্লায়েন্ট লাইব্রেরির মাধ্যমে অ্যাক্সেস করা যেতে পারে। স্মার্ট কন্ট্রাক্টের লগগুলি ব্যবহারকারীর বা ডেভেলপারদের জন্য ব্লকচেইনে ঘটমান কার্যক্রম সম্পর্কে তথ্য প্রদান করে।
// Web3.js example
contract.events.Transfer({
filter: {from: "0x123...abc"},
fromBlock: 0
}, function(error, event) {
console.log(event); // Logs the Transfer event
});এই কোডে, Web3.js ব্যবহার করে Transfer ইভেন্টের লগ অ্যাক্সেস করা হচ্ছে, যেখানে from ঠিকানার জন্য ফিল্টার করা হচ্ছে।
৩. Why Use Events and Logs (ইভেন্ট এবং লগস কেন ব্যবহার করবেন)
- ডিবাগিং: ইভেন্ট এবং লগস স্মার্ট কন্ট্রাক্টের কার্যক্রম ট্র্যাক করতে সহায়ক। এটি ডেভেলপারদের জন্য চুক্তি এবং লেনদেনের ধাপ বুঝতে সহজ করে।
- স্বচ্ছতা: ব্লকচেইনে প্রতিটি ইভেন্ট এবং লগ অ্যাক্সেসযোগ্য থাকে, যা চুক্তির কার্যক্রমের স্বচ্ছতা নিশ্চিত করে।
- ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন (dApps): স্মার্ট কন্ট্রাক্ট ইভেন্টগুলো ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনগুলির সাথে যোগাযোগ করার উপায় প্রদান করে, যেখানে ক্লায়েন্ট (যেমন ওয়েব3.js) ব্লকচেইনের ইভেন্টগুলি ট্র্যাক করতে পারে এবং সেই অনুযায়ী ইউজার ইন্টারফেসে প্রতিক্রিয়া দেখাতে পারে।
- ফিল্টারিং: লগ এবং ইভেন্ট ইনডেক্সিং ব্যবহার করে ব্যবহারকারীরা সহজেই নির্দিষ্ট ট্রানজেকশন বা কার্যক্রম অনুসন্ধান করতে পারে।
৪. Log vs Event
Log এবং Event মূলত একই জিনিস হলেও তাদের মধ্যে কিছু পার্থক্য রয়েছে:
- Event: Solidity তে ইভেন্ট হল একটি ডিক্লেয়ারড আর্কিটেকচার যা স্মার্ট কন্ট্রাক্টের কার্যক্রম ট্র্যাক করে এবং ক্লায়েন্ট অ্যাপ্লিকেশনগুলির মধ্যে সহজে সিগন্যাল পাঠায়।
- Log: যখন একটি ইভেন্ট এমিট হয়, তখন এটি একটি ব্লকচেইন লগ হিসেবে সংরক্ষিত হয়। এটি ব্লকচেইনের বাইরে অ্যাপ্লিকেশন দ্বারা অ্যাক্সেসযোগ্য।
অতএব, একটি ইভেন্ট হল একটি সিগন্যাল যা ক্লায়েন্ট-সাইড অ্যাপ্লিকেশনকে জানিয়েছে যে ব্লকচেইনে কিছু ঘটনা ঘটেছে, এবং লগ হল সেই ইভেন্টের স্টোরেজ, যা পরে প্রাপ্ত তথ্য অনুসন্ধান ও বিশ্লেষণের জন্য ব্যবহার করা হয়।
সারাংশ
Solidity তে Events এবং Logs স্মার্ট কন্ট্রাক্টের কার্যক্রম ট্র্যাক, বিশ্লেষণ, এবং ব্যবহারকারীদের বা ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনগুলিকে ইভেন্টগুলির মাধ্যমে সিগন্যাল পাঠানোর জন্য ব্যবহৃত হয়। ইভেন্টগুলি ব্লকচেইনে এমিট করা হয় এবং সেগুলি পরে লগ হিসেবে সংরক্ষিত থাকে। ইভেন্ট এবং লগস স্মার্ট কন্ট্রাক্টের স্বচ্ছতা, নিরাপত্তা এবং কার্যকারিতা নিশ্চিত করতে সহায়ক।
Events Solidity তে একটি গুরুত্বপূর্ণ ফিচার যা স্মার্ট কন্ট্রাক্টে লজিকাল পরিবর্তন বা কোনো কার্যক্রম সম্পন্ন হওয়ার পর একটি সিগন্যাল বা বার্তা প্রদান করতে ব্যবহৃত হয়। যখন কোনো ইভেন্ট ট্রিগার হয়, তখন এটি Ethereum ব্লকচেইনে একটি লগ রেকর্ড হিসেবে সংরক্ষিত হয়। ইভেন্টগুলি মূলত ডেভেলপারদের এবং ক্লায়েন্ট অ্যাপ্লিকেশনগুলোর জন্য স্মার্ট কন্ট্রাক্টের মধ্যে ঘটিত কার্যক্রম সম্পর্কে অবহিত হওয়ার একটি উপায় হিসেবে কাজ করে।
1. Event কী?
Solidity তে Event হল এমন একটি ঘোষণা যা স্মার্ট কন্ট্রাক্টের মধ্যে বিশেষ কার্যক্রম ঘটে গেলে লগ বা সিগন্যাল প্রদান করে। ইভেন্টগুলো বিশেষভাবে ব্যবহার করা হয় যখন একটি গুরুত্বপূর্ণ ডেটা বা কার্যক্রম পরিবর্তন হয়, যেমন একটি ট্রানজেকশন সম্পন্ন হওয়া বা স্টেট পরিবর্তন হওয়া।
একটি ইভেন্ট সাধারণত ক্লায়েন্ট অ্যাপ্লিকেশন দ্বারা মনিটর করা হয়, এবং এটি ট্রানজেকশন বা কার্য সম্পাদনের পর ব্যবহারকারীকে অবহিত করে।
2. Event Declaration
Solidity তে একটি ইভেন্ট ডিক্লেয়ার করার জন্য event কীওয়ার্ড ব্যবহার করা হয়। ইভেন্টের মধ্যে বিভিন্ন ধরনের ডেটা প্যারামিটার পাস করা যায়, যা ব্লকচেইনে সংরক্ষিত হয়।
Sintaxis:
event <event_name>(<parameter1>, <parameter2>, ...);এখানে:
<event_name>হল ইভেন্টের নাম।<parameter1>,<parameter2>ইত্যাদি হল ইভেন্টে পাস করা প্যারামিটার।
উদাহরণ:
event Transfer(address indexed from, address indexed to, uint256 value);এখানে:
Transferহল ইভেন্টের নাম।from,toএবংvalueহল প্যারামিটার যাaddressএবংuint256টাইপের।
Note: indexed ব্যবহার করলে প্যারামিটারগুলি ইন্ডেক্স করা হয়, যা পরে ইভেন্ট লগ অনুসন্ধানে সুবিধা দেয়।
3. Event Trigger
ইভেন্টটিকে trigger বা emit করার জন্য emit কীওয়ার্ড ব্যবহার করা হয়। যখন একটি নির্দিষ্ট শর্ত পূর্ণ হয় বা কোনো কার্যক্রম সম্পন্ন হয়, তখন ইভেন্টটি ট্রিগার করা হয়।
Sintaxis:
emit <event_name>(<parameter1>, <parameter2>, ...);উদাহরণ:
function transfer(address to, uint256 amount) public {
// কিছু লজিক, যেমন ব্যালান্স চেক করা
emit Transfer(msg.sender, to, amount);
}এখানে:
transferফাংশনটিTransferইভেন্টটিকেmsg.sender,to, এবংamountপ্যারামিটারসহ ট্রিগার করছে।
4. Event ব্যবহার করা
ইভেন্ট ব্যবহার করার ফলে স্মার্ট কন্ট্রাক্টের কার্যক্রম ব্লকচেইনে লগ হিসেবে সংরক্ষিত থাকে, এবং ডেভেলপাররা বা ক্লায়েন্ট অ্যাপ্লিকেশনগুলি এই ইভেন্টগুলিকে ট্র্যাক করতে পারে। ক্লায়েন্ট অ্যাপ্লিকেশনগুলি সাধারণত ইভেন্টগুলির প্রতি মনোযোগী থাকে এবং যখন একটি নির্দিষ্ট ইভেন্ট ট্রিগার হয়, তখন তারা ব্যবহারকারীদের জানাতে পারে বা কোনো পদক্ষেপ নিতে পারে।
5. Event Logs
ইভেন্টগুলি ব্লকচেইনে logs হিসেবে সংরক্ষিত হয় এবং এগুলি অত্যন্ত কার্যকরী হতে পারে যখন স্মার্ট কন্ট্রাক্টের ট্রানজেকশন বা কার্য সম্পাদন সম্পর্কে তথ্য অনুসন্ধান করতে হয়। ইভেন্ট লগগুলি সংরক্ষিত হওয়ায়, এটি gas সাশ্রয়ী হয়, কারণ ফাংশনের আউটপুট ব্লকচেইনে মেমরিতে সংরক্ষণ করা হয় না, বরং এটি শুধু লগ হিসেবে সংরক্ষিত থাকে।
6. Event ব্যবহার করে ক্লায়েন্টে তথ্য গ্রহণ
ইভেন্টগুলি সাধারণত একটি web3.js বা ethers.js লাইব্রেরি ব্যবহার করে ক্লায়েন্ট অ্যাপ্লিকেশনে গ্রহণ করা হয়। এই লাইব্রেরি গুলি Ethereum ব্লকচেইনে ইভেন্ট ট্র্যাক করার জন্য ব্যবহৃত হয়।
উদাহরণ: (Web3.js ব্যবহার করে)
contract.events.Transfer({
filter: {from: '0x123...', to: '0x456...'},
fromBlock: 0
})
.on('data', function(event){
console.log(event);
})
.on('error', console.error);এখানে, Transfer ইভেন্টটি মনিটর করা হচ্ছে এবং যখন এই ইভেন্টটি ট্রিগার হবে, তখন এটি কনসোলে আউটপুট দেখাবে।
7. কেন ইভেন্ট প্রয়োজন?
- ডাটা লগিং: স্মার্ট কন্ট্রাক্টের কার্যক্রম যেমন ট্রানজেকশন, ডেটা পরিবর্তন ইত্যাদি ব্লকচেইনে সেভ করা হয়, যা পরে অনুসন্ধান করা যায়।
- অনুসন্ধানযোগ্যতা: ইভেন্টগুলির মাধ্যমে সহজে স্মার্ট কন্ট্রাক্টের কার্যক্রম খোঁজা এবং ট্র্যাক করা যায়, যা ডেভেলপারদের জন্য অত্যন্ত উপকারী।
- স্বচ্ছতা: ইভেন্টগুলি ব্লকচেইনে সংরক্ষিত থাকে, যা স্মার্ট কন্ট্রাক্টের কার্যক্রম সম্পর্কে স্বচ্ছতা নিশ্চিত করে।
- এপ্লিকেশন-ভিত্তিক ব্যবহার: ইভেন্টগুলি ক্লায়েন্ট অ্যাপ্লিকেশনে ব্যবহারকারীকে স্মার্ট কন্ট্রাক্টের কার্যক্রম সম্পর্কে অবহিত করার জন্য সহায়ক হয়।
সারাংশ
Solidity তে Events স্মার্ট কন্ট্রাক্টের কার্যক্রম সম্পর্কে জানাতে ব্যবহৃত হয়। এগুলি ক্লায়েন্ট অ্যাপ্লিকেশনগুলিকে স্মার্ট কন্ট্রাক্টের মধ্যে ঘটিত শর্ত পরিবর্তন বা কার্য সম্পাদন সম্পর্কে অবহিত করতে সহায়তা করে। ইভেন্টগুলি ব্লকচেইনে সেভ করা হয়, যা পরবর্তীতে ডেটা ট্র্যাক বা অনুসন্ধান করার জন্য ব্যবহৃত হতে পারে। ইভেন্টগুলি স্মার্ট কন্ট্রাক্টের কার্যক্রমের স্বচ্ছতা এবং সহজে ব্যবহারযোগ্যতা নিশ্চিত করে।
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 তে ইভেন্ট ব্যবহারের মাধ্যমে স্মার্ট কন্ট্রাক্টের কার্যক্রম আরও স্বচ্ছ ও ট্র্যাকযোগ্য হয়ে ওঠে।
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 বা ওয়েব অ্যাপ্লিকেশনগুলোতে অত্যন্ত গুরুত্বপূর্ণ।
Solidity তে Events একটি অত্যন্ত গুরুত্বপূর্ণ কনসেপ্ট যা স্মার্ট কন্ট্রাক্টের মধ্যে বিভিন্ন কার্যক্রমের পরিবর্তন বা তথ্য জানাতে ব্যবহৃত হয়। ইভেন্টগুলি ব্লকচেইনে লগ (log) হিসাবে সংরক্ষিত থাকে এবং বাইরের ড্যাপ (dApp) বা ইউজার ইন্টারফেস (UI) সহজেই এই ইভেন্টগুলি ট্র্যাক করতে পারে।
Events স্মার্ট কন্ট্রাক্টের কার্যক্রমের নির্দিষ্ট পরিবর্তন বা শর্ত অনুযায়ী বাইরের অ্যাপ্লিকেশন বা ইউজার ইন্টারফেসকে জানানোর জন্য ব্যবহৃত হয়। এর মাধ্যমে কন্ট্রাক্টের কাজ বা ট্রানজেকশন পর্যালোচনা করা সহজ হয়, বিশেষ করে যখন স্মার্ট কন্ট্রাক্টের ফলাফল দ্রুত বা কার্যকরীভাবে বাইরের সিস্টেমে পাঠানোর প্রয়োজন হয়।
1. Event Declaration
Solidity তে ইভেন্ট ডিক্লেয়ার করার জন্য event কীওয়ার্ড ব্যবহার করা হয়। ইভেন্টের নাম এবং যেসব প্যারামিটার প্রয়োজন, সেগুলি ডিক্লেয়ার করতে হয়।
Event Declaration এর সাধারণ সিনট্যাক্স:
event EventName(address indexed sender, uint value);ব্যাখ্যা:
EventNameহলো ইভেন্টের নাম।indexedকীওয়ার্ডটি ফিল্ডকে ইনডেক্সড করে, যাতে পরবর্তীতে এই তথ্যগুলো সহজে খোঁজা যায়।indexedফিল্ডের মাধ্যমে আপনার ইভেন্ট ফিল্টার করা এবং ট্র্যাক করা সহজ হয়।- অন্যান্য প্যারামিটার (যেমন
sender,value) হলো ইভেন্টের ডেটা, যা ট্রানজেকশনের তথ্য ধারণ করে।
2. Event Emit
ইভেন্টটি স্মার্ট কন্ট্রাক্টে নির্দিষ্ট শর্তে ট্রিগার করা হয়। emit কীওয়ার্ড ব্যবহার করে ইভেন্টটি ট্রিগার করা হয় এবং এর মাধ্যমে ইভেন্টের তথ্য লগে সংরক্ষিত হয়।
Event Emit এর উদাহরণ:
pragma solidity ^0.8.0;
contract EventExample {
event ValueUpdated(address indexed updater, uint newValue);
uint public value;
function updateValue(uint _newValue) public {
value = _newValue;
emit ValueUpdated(msg.sender, _newValue); // ইভেন্ট ট্রিগার করা
}
}ব্যাখ্যা:
- এখানে
ValueUpdatedনামে একটি ইভেন্ট ডিক্লেয়ার করা হয়েছে, যাupdater(যিনি ইভেন্টটি ট্রিগার করেছেন) এবংnewValue(নতুন মান যা আপডেট করা হয়েছে) গ্রহণ করে। updateValueফাংশনটিvalueআপডেট করার পর,ValueUpdatedইভেন্টটিemitদিয়ে ট্রিগার করে এবং তথ্য লগে সংরক্ষণ করে।
3. Events এর মাধ্যমে ব্লকচেইনে তথ্য সংরক্ষণ
ইভেন্টগুলিকে ব্লকচেইনে লগ হিসাবে সংরক্ষিত করা হয়। এটি ব্লকচেইনের ইথেরিয়াম নেটওয়ার্কে একটি বিশেষভাবে প্রণীত log entry হিসেবে কাজ করে, যা সিস্টেমের পরিবর্তন, কার্যকলাপ বা লেনদেনের বিস্তারিত ট্র্যাক করতে সাহায্য করে। ইভেন্টটি সাধারণত বাইরের অ্যাপ্লিকেশন বা ইউজার ইন্টারফেস দ্বারা পর্যবেক্ষণ করা হয় এবং তা থেকে তথ্য পাওয়া যায়।
Event এর মাধ্যমে তথ্য সংরক্ষণ:
- ইভেন্টগুলি ব্লকচেইনে একটি ইতিহাস হিসেবে সংরক্ষিত থাকে যা সংশ্লিষ্ট ডেটা ট্র্যাক করার জন্য ব্যবহৃত হয়।
- একবার ইভেন্ট ট্রিগার হয়ে গেলে, এর ডেটা ব্লকচেইনে সংরক্ষিত হয় এবং এটি সময়ের সাথে পরিবর্তন ট্র্যাক করার জন্য উপযোগী।
4. Events এবং Web3.js (বা dApp) এর মাধ্যমে তথ্য এক্সেস করা
Web3.js লাইব্রেরির মাধ্যমে স্মার্ট কন্ট্রাক্টের ইভেন্টগুলি ট্র্যাক এবং এক্সেস করা যায়। Web3.js ব্যবহার করে ইভেন্টের লোগস এবং আর্গুমেন্টস সংগ্রহ করা সম্ভব, যা ব্লকচেইন ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়।
Web3.js এ ইভেন্ট ট্র্যাক করার উদাহরণ:
const contract = new web3.eth.Contract(abi, contractAddress);
// ইভেন্ট ট্র্যাক করা
contract.events.ValueUpdated({
fromBlock: 'latest'
}, function(error, event){
if (!error) {
console.log(event); // ইভেন্ট ডেটা কনসোল লগে প্রদর্শন
} else {
console.log(error);
}
});ব্যাখ্যা:
contract.events.ValueUpdatedএর মাধ্যমেValueUpdatedইভেন্টটি ট্র্যাক করা হচ্ছে, যাfromBlock: 'latest'দ্বারা সর্বশেষ ব্লক থেকে শুরু হবে।- ইভেন্টের তথ্য
eventঅবজেক্টে সংরক্ষিত হবে এবং তা কনসোল লগে প্রদর্শিত হবে।
5. Events এর সুবিধা
- অন্য কন্ট্রাক্ট বা ড্যাপসের সাথে যোগাযোগ: ইভেন্ট ব্যবহার করে কন্ট্রাক্টের পরিবর্তন বা কার্যক্রম বাইরের সিস্টেমে জানানো যায়। উদাহরণস্বরূপ, যখন একটি টোকেন ট্রান্সফার হয়, তখন সেই ইভেন্ট অন্য কন্ট্রাক্ট বা ইউজার ইন্টারফেসে পাঠানো হয়।
- গ্যাস সাশ্রয়: ইভেন্টগুলি স্মার্ট কন্ট্রাক্টের মধ্যে গ্যাস খরচ কমিয়ে তথ্য শেয়ার করতে সাহায্য করে। এটি ব্লকচেইনে শুধু লগ হিসাবে সংরক্ষিত থাকে, তাই এটি কম গ্যাস খরচে তথ্য প্রদান করে।
- ডেটা ট্র্যাকিং: ব্লকচেইনে লগ হিসেবে ইভেন্টগুলি ডেটা ট্র্যাকিংয়ের জন্য গুরুত্বপূর্ণ। সময় এবং অন্যান্য প্যারামিটার দ্বারা ডেটা সহজেই অনুসন্ধান করা যায়।
সারাংশ
Solidity তে Events স্মার্ট কন্ট্রাক্টের কার্যক্রম বা পরিবর্তন সম্পর্কে বাইরের সিস্টেমকে জানাতে ব্যবহৃত হয়। ইভেন্টগুলি ব্লকচেইনে লগ হিসাবে সংরক্ষিত হয় এবং বাইরের অ্যাপ্লিকেশন বা ড্যাপস (যেমন Web3.js) এর মাধ্যমে ট্র্যাক করা যায়। ইভেন্ট ব্যবহারের মাধ্যমে আপনি স্মার্ট কন্ট্রাক্টের কার্যক্রমের একটি স্বচ্ছ ইতিহাস তৈরি করতে পারেন, যা গ্যাস সাশ্রয়ী এবং ডেটা ট্র্যাকিং সহজ করে তোলে।
Read more