Solidity তে Contract Interaction এবং Contract Communication দুটি গুরুত্বপূর্ণ ধারণা যা স্মার্ট কন্ট্রাক্টের মধ্যে এবং একাধিক স্মার্ট কন্ট্রাক্টের মধ্যে তথ্য এবং কার্যক্রম শেয়ার করতে ব্যবহৃত হয়। এদের মাধ্যমে কন্ট্রাক্টগুলি একে অপরের সাথে যোগাযোগ করতে পারে, মান বা ডেটা পাঠাতে বা গ্রহণ করতে পারে, এবং স্বয়ংক্রিয়ভাবে কার্যক্রম সম্পাদন করতে পারে।
1. Contract Interaction
Contract Interaction হলো একটি কন্ট্রাক্টের ফাংশন বা প্রপার্টি অন্য কন্ট্রাক্ট থেকে কল বা অ্যাক্সেস করার প্রক্রিয়া। এটি স্মার্ট কন্ট্রাক্টের মধ্যে ইন্টারঅ্যাকশন বা যোগাযোগ সৃষ্টি করে, যেখানে এক কন্ট্রাক্টের ফাংশন অন্য কন্ট্রাক্টে কল করা হয় এবং ফলস্বরূপ তথ্য বা কার্যক্রম শেয়ার হয়।
উদাহরণ: Contract Interaction
pragma solidity ^0.8.0;
contract FirstContract {
uint public value;
constructor(uint _value) {
value = _value;
}
function setValue(uint _value) public {
value = _value;
}
}
contract SecondContract {
FirstContract public firstContract;
constructor(address _firstContractAddress) {
firstContract = FirstContract(_firstContractAddress);
}
function updateValueInFirstContract(uint _newValue) public {
firstContract.setValue(_newValue); // FirstContract এ ফাংশন কল করা
}
function getFirstContractValue() public view returns (uint) {
return firstContract.value(); // FirstContract থেকে value নেওয়া
}
}ব্যাখ্যা:
- FirstContract একটি সিম্পল কন্ট্রাক্ট যা
valueপ্রপার্টি ধারণ করে এবং সেটি আপডেট করার জন্যsetValueফাংশন প্রদান করে। - SecondContract অন্য একটি কন্ট্রাক্ট যা FirstContract এর ফাংশন
setValueকে কল করতে সক্ষম। SecondContractএর কনস্ট্রাক্টর FirstContract এর ঠিকানা গ্রহন করে এবং এর মাধ্যমে কন্ট্রাক্টের সাথে যোগাযোগ স্থাপন করে।
Contract Interaction এর বৈশিষ্ট্য:
- এক কন্ট্রাক্ট অন্য কন্ট্রাক্টের পাবলিক ফাংশন বা প্রপার্টি অ্যাক্সেস করতে পারে।
- কন্ট্রাক্টের মধ্যে ইন্টারঅ্যাকশন করার জন্য, এক কন্ট্রাক্টের ঠিকানা এবং তার ফাংশনের সিগনেচার প্রয়োজন হয়।
- এটি অনেক সুবিধা দেয়, যেমন একাধিক কন্ট্রাক্টের মধ্যে তথ্য শেয়ার করা বা কার্যক্রম সম্পাদন করা।
2. Contract Communication
Contract Communication হলো একাধিক কন্ট্রাক্টের মধ্যে তথ্য বা মানের আদান-প্রদান। এটি একটি কন্ট্রাক্ট থেকে অন্য কন্ট্রাক্টে ডেটা পাঠানোর প্রক্রিয়া, যেখানে কন্ট্রাক্টগুলি একে অপরের সাথে ডেটা বা ইভেন্ট শেয়ার করে। স্মার্ট কন্ট্রাক্টগুলির মধ্যে যোগাযোগের জন্য Solidity তে দুটি প্রধান উপায় রয়েছে: Function calls এবং Events।
2.1 Function Calls (Contract-to-Contract Communication)
এক কন্ট্রাক্ট অন্য কন্ট্রাক্টে সরাসরি ফাংশন কল করতে পারে। এটি মূলত Contract Interaction এরই একটি অংশ, যেখানে একটি কন্ট্রাক্টের ফাংশন অন্য কন্ট্রাক্টের সাথে যোগাযোগের মাধ্যমে কার্যকর হয়।
উদাহরণ: Contract-to-Contract Function Call
pragma solidity ^0.8.0;
contract Token {
mapping(address => uint) public balances;
function transfer(address _to, uint _amount) public {
balances[msg.sender] -= _amount;
balances[_to] += _amount;
}
}
contract TokenSale {
Token public token;
address public admin;
constructor(address _tokenAddress) {
token = Token(_tokenAddress);
admin = msg.sender;
}
function buyTokens(uint _amount) public payable {
require(msg.value == _amount * 1 ether, "Incorrect Ether amount.");
token.transfer(msg.sender, _amount); // Token কন্ট্রাক্টের ফাংশন কল
}
}ব্যাখ্যা:
- Token কন্ট্রাক্ট একটি সাধারণ ERC-20 টোকেন কন্ট্রাক্ট যেখানে
transferফাংশন রয়েছে যা টোকেন পাঠায়। - TokenSale কন্ট্রাক্টে
buyTokensফাংশন রয়েছে, যা ইউজারের কাছ থেকে Ether গ্রহণ করে এবংTokenকন্ট্রাক্টেtransferফাংশন কল করে টোকেন পাঠায়। - এইভাবে, দুটি কন্ট্রাক্ট একে অপরের সাথে যোগাযোগ করে এবং কার্যক্রম সম্পাদন করে।
2.2 Events (Contract Communication)
Events হল একটি শক্তিশালী উপায় যেটি কন্ট্রাক্টের মধ্যে ডেটা বা পরিবর্তন ঘটানোর পরে বাইরের বিশ্ব (যেমন, ড্যাপস বা ইউজার ইন্টারফেস) কে জানানো হয়। এটি ব্লকচেইনে টানল (log) হিসাবে রেকর্ড করা হয় এবং সহজে ট্র্যাক করা যায়।
উদাহরণ: Event-based Contract Communication
pragma solidity ^0.8.0;
contract EventExample {
event ValueUpdated(address indexed updater, uint newValue);
uint public value;
function setValue(uint _newValue) public {
value = _newValue;
emit ValueUpdated(msg.sender, _newValue); // ইভেন্টটি ট্রিগার করা
}
}ব্যাখ্যা:
- এখানে
ValueUpdatedএকটি Event যা একটি নতুনvalueসেট করার পর ট্রিগার হয়। - যখন
setValueফাংশন কল করা হয়, তখনValueUpdatedইভেন্টটি ট্রিগার হয় এবং সেটি বাইরের ওয়েব অ্যাপ্লিকেশন বা ড্যাপসকে জানায় যে ভ্যালু আপডেট হয়েছে। indexedকীওয়ার্ড ব্যবহার করে ইভেন্টে নির্দিষ্ট ইনফরমেশন (যেমন,updaterঠিকানা) সহজে ট্র্যাক করা যায়।
Events এর বৈশিষ্ট্য:
- Events ব্লকচেইনে লগ হিসাবে সংরক্ষিত থাকে, যা সহজে অ্যাক্সেস এবং ট্র্যাক করা যায়।
- এটি বাইরের প্রোগ্রাম বা ড্যাপসের সাথে কন্ট্রাক্টের পরিবর্তন বা কার্যক্রম শেয়ার করতে ব্যবহৃত হয়।
3. Contract Interaction এবং Communication এর মধ্যে পার্থক্য
| বিশেষত্ব | Contract Interaction | Contract Communication |
|---|---|---|
| প্রক্রিয়া | এক কন্ট্রাক্ট অন্য কন্ট্রাক্টের ফাংশন বা প্রপার্টি কল করে | কন্ট্রাক্টগুলি একে অপরের সাথে ডেটা শেয়ার করে বা ইভেন্টের মাধ্যমে তথ্য প্রদান করে |
| উদাহরণ | এক কন্ট্রাক্ট অন্য কন্ট্রাক্টের setValue ফাংশন কল করা | কন্ট্রাক্টের ইভেন্ট (যেমন, ValueUpdated) ট্রিগার করা |
| ব্যবহার | এক কন্ট্রাক্ট থেকে অন্য কন্ট্রাক্টে সরাসরি কার্যকরী কল | কন্ট্রাক্টের পরিবর্তন বা মান বাইরের বিশ্বে জানানোর জন্য |
| কেন ব্যবহৃত হয়? | একাধিক কন্ট্রাক্টের মধ্যে ডেটা শেয়ার করা এবং একে অপরের কার্যক্রম চালানো | বাইরের অ্যাপ্লিকেশন বা ইউজার ইন্টারফেসের সাথে যোগাযোগ তৈরি করা |
সারাংশ
Contract Interaction এবং Contract Communication দুটি গুরুত্বপূর্ণ কনসেপ্ট যা স্মার্ট কন্ট্রাক্টের মধ্যে যোগাযোগ এবং কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। Contract Interaction এর মাধ্যমে এক কন্ট্রাক্ট অন্য কন্ট্রাক্টের ফাংশন কল করতে পারে, যেখানে Contract Communication এর মাধ্যমে কন্ট্রাক্টগুলি একে অপরের সাথে তথ্য শেয়ার বা ইভেন্ট ট্রিগার করতে পারে। এগুলি Solidity তে একাধিক কন্ট্রাক্টের মধ্যে তথ্য আদান-প্রদান এবং কার্যক্রম একত্রিত করার জন্য অপরিহার্য।
Read more