Solidity তে receive functions এবং Ether receive করার ক্ষমতা একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য, যা স্মার্ট কন্ট্রাক্টে Ether গ্রহণ করতে ব্যবহৃত হয়। Ethereum ব্লকচেইনে Ether (ETH) ট্রান্সফার করার জন্য এবং সেগুলিকে স্মার্ট কন্ট্রাক্টে গ্রহণ করার জন্য receive function এবং fallback function ব্যবহার করা হয়। এই ফাংশনগুলো স্মার্ট কন্ট্রাক্টে Ether প্রাপ্তির প্রক্রিয়া নির্ধারণ করে।
1. Receive Function
Solidity তে receive function একটি বিশেষ ধরনের ফাংশন যা শুধু Ether গ্রহণের জন্য ব্যবহৃত হয়। যখন একটি ট্রানজেকশন একটি কন্ট্রাক্টের অ্যাড্রেসে Ether পাঠায় এবং কোনো ডেটা বা ফাংশন কল না থাকে, তখন receive ফাংশনটি ট্রিগার হয়। এই ফাংশনটি payable হতে হবে, অর্থাৎ এটি Ether গ্রহণ করতে সক্ষম হতে হবে।
গঠন:
receive() external payable {
// Ether গ্রহণের কোড
}external: এই ফাংশনটি কেবল বাইরের কন্ট্রাক্ট থেকে এক্সিকিউট করা যেতে পারে।payable: এই কিওয়ার্ডটি নির্ধারণ করে যে ফাংশনটি Ether গ্রহণ করতে পারে।
উদাহরণ:
pragma solidity ^0.8.0;
contract MyContract {
uint256 public balance;
// receive function যা Ether গ্রহণ করবে
receive() external payable {
balance += msg.value; // Ether গ্রহণ এবং balance আপডেট
}
}এখানে, receive ফাংশনটি msg.value ব্যবহার করে কন্ট্রাক্টে প্রাপ্ত Ether এর পরিমাণ সংরক্ষণ করে balance ভেরিয়েবলে।
msg.value: এটি সেই Ether এর পরিমাণ যেটি কন্ট্রাক্টে পাঠানো হয়েছে।
2. Fallback Function
Fallback function হলো একটি বিশেষ ফাংশন যা যখন কোনও ফাংশন কল বা Ether পাঠানোর চেষ্টা করা হয়, এবং সে ফাংশনটি কন্ট্রাক্টে ডিফাইন করা না থাকে, তখন এটি ট্রিগার হয়। এটি সাধারণত সুরক্ষা বা নিরাপত্তার জন্য ব্যবহৃত হয় এবং একটি fallback function ইথেরিয়াম নেটওয়ার্কে লেনদেন বা স্মার্ট কন্ট্রাক্টের জন্য নিরাপত্তা ব্যবস্থা হিসেবে কাজ করতে পারে।
গঠন:
fallback() external payable {
// কোড
}fallback: ফাংশনটি কোনো নির্দিষ্ট ফাংশন বা ডেটা না পাওয়া গেলে কল হয়।payable: এই কিওয়ার্ডটি দিয়ে নিশ্চিত করা হয় যে, ফাংশনটি Ether গ্রহণ করতে পারে।
উদাহরণ:
pragma solidity ^0.8.0;
contract MyContract {
uint256 public balance;
// fallback function
fallback() external payable {
balance += msg.value; // Ether গ্রহণ এবং balance আপডেট
}
}এখানে, যদি কোনও নির্দিষ্ট ফাংশন না পাওয়া যায় বা ট্রানজেকশনে কোনো ডেটা না থাকে, তবে fallback ফাংশনটি Ether গ্রহণ করবে এবং balance আপডেট করবে।
3. Receive Function এবং Fallback Function এর মধ্যে পার্থক্য
- Receive Function: শুধুমাত্র Ether গ্রহণের জন্য ব্যবহৃত হয়, যখন কোনো ডেটা পাঠানো না হয় (একটি মুদ্রা ট্রান্সফার)।
- Fallback Function: এটি Ether গ্রহণ করতে পারে এবং একে একাধিক উদ্দেশ্যে ব্যবহার করা যেতে পারে, যেমন যখন কোনো ফাংশন কল সঠিকভাবে পাওয়া যায় না।
4. Ether প্রেরণ (Sending Ether)
একটি কন্ট্রাক্ট থেকে Ether পাঠানোর জন্য transfer বা send ফাংশন ব্যবহার করা হয়। তবে Solidity তে নতুনভাবে call ফাংশন ব্যবহার করা হয় যেটি আরও নিরাপদ এবং নমনীয়।
Ether পাঠানোর উদাহরণ:
pragma solidity ^0.8.0;
contract MyContract {
address payable public recipient;
constructor(address payable _recipient) {
recipient = _recipient;
}
function sendEther() public payable {
recipient.transfer(msg.value); // Ether পাঠানো
}
}এখানে, sendEther ফাংশনটি ব্যবহারকারী থেকে Ether গ্রহণ করে এবং তারপর recipient অ্যাড্রেসে Ether পাঠায়।
transfer: এটি Ether পাঠাতে ব্যবহৃত হয় এবং যদি পাঠানো না যায় তবে এটি একটিrevertঘটাবে।
5. Payable Modifier
যখন একটি ফাংশনকে payable করা হয়, তখন সেটি Ether গ্রহণ করতে সক্ষম হয়। Solidity তে কোনো ফাংশন, কনস্ট্রাক্টর বা অ্যাড্রেস যদি Ether গ্রহণ করতে চায়, তবে তা অবশ্যই payable হতে হবে।
উদাহরণ:
pragma solidity ^0.8.0;
contract MyContract {
address public owner;
constructor() {
owner = msg.sender;
}
// payable modifier সহ ফাংশন
function receiveFunds() public payable {
require(msg.value > 0, "You need to send some Ether!");
}
function getBalance() public view returns (uint256) {
return address(this).balance;
}
}এখানে, receiveFunds ফাংশনটি payable, তাই এটি Ether গ্রহণ করতে পারে। getBalance ফাংশনটি কন্ট্রাক্টের Ether ব্যালেন্স রিটার্ন করে।
সারাংশ
Solidity তে receive function এবং fallback function ব্যবহার করে স্মার্ট কন্ট্রাক্টে Ether গ্রহণ করা যায়। receive function শুধুমাত্র Ether গ্রহণের জন্য ব্যবহৃত হয় যখন কোনো ডেটা থাকে না, এবং fallback function সেই ক্ষেত্রে ব্যবহৃত হয় যখন কোনো ফাংশন বা ডেটা না পাওয়া যায়। Ether প্রেরণের জন্য transfer, send, এবং call ফাংশন ব্যবহার করা হয়। payable modifier ব্যবহার করে ফাংশনকে Ether গ্রহণের জন্য সক্ষম করা হয়, যা স্মার্ট কন্ট্রাক্টে লেনদেন এবং অর্থনৈতিক কার্যক্রমের জন্য অপরিহার্য।
Read more