Solidity তে ফাংশন এবং ভিজিবিলিটি (visibility) হল গুরুত্বপূর্ণ ধারণা যা স্মার্ট কন্ট্রাক্টের আচরণ এবং সুরক্ষা নির্ধারণ করে। ফাংশন ব্যবহার করা হয় কন্ট্রাক্টের মধ্যে লজিক প্রয়োগ করার জন্য এবং ভিজিবিলিটি ব্যবহার করা হয় সেই ফাংশনের অ্যাক্সেস কিভাবে হবে তা নির্ধারণ করতে। এখানে ফাংশন এবং ভিজিবিলিটি নিয়ে বিস্তারিত আলোচনা করা হলো।
1. ফাংশন (Functions)
Solidity তে ফাংশন হল কোডের একক ব্লক যা কিছু নির্দিষ্ট কাজ সম্পাদন করে। ফাংশনগুলি সাধারণত একটি বা একাধিক ইনপুট নেয় এবং একটি আউটপুট প্রদান করে। ফাংশন ডিফাইন করা হয় নির্দিষ্ট টাইপের মাধ্যমে এবং বিভিন্ন কাজ সম্পাদন করতে পারে, যেমন স্টেট পরিবর্তন করা, চুক্তি থেকে ডেটা পড়া ইত্যাদি।
একটি সাধারণ ফাংশন কিভাবে ডিফাইন করা হয়:
pragma solidity ^0.8.0;
contract MyContract {
uint256 public balance;
function setBalance(uint256 _balance) public {
balance = _balance;
}
}এখানে, setBalance একটি পাবলিক ফাংশন যা _balance ইনপুট নেয় এবং balance ভেরিয়েবল সেট করে।
2. Visibility (ভিজিবিলিটি)
Solidity তে ফাংশনের ভিজিবিলিটি নির্ধারণ করা হয়, যাতে জানানো যায় ফাংশনটি কোথা থেকে অ্যাক্সেসযোগ্য হবে। ভিজিবিলিটি ফাংশন বা ভেরিয়েবল-এর অ্যাক্সেস কন্ট্রোল নির্ধারণ করতে ব্যবহৃত হয়। Solidity তে চারটি ভিজিবিলিটি রয়েছে:
- Public
- Private
- Internal
- External
এখানে, প্রতিটি ভিজিবিলিটি সম্পর্কে বিস্তারিত আলোচনা করা হলো।
3. Public Visibility
public ভিজিবিলিটি ব্যবহৃত হয় এমন ফাংশন বা ভেরিয়েবলগুলোর জন্য যা স্মার্ট কন্ট্রাক্টের বাইরের ব্যবহারকারীদের থেকেও অ্যাক্সেসযোগ্য। public ফাংশনকে স্মার্ট কন্ট্রাক্টের বাইরে থেকে এবং অন্যান্য কন্ট্রাক্ট থেকে কল করা যেতে পারে।
- Public ফাংশন: সাধারণত অন্যান্য কন্ট্রাক্ট বা অ্যাপ্লিকেশন থেকে এক্সেস করার জন্য ব্যবহৃত হয়।
- Public ভেরিয়েবল: এসব ভেরিয়েবল ব্লকচেইনের যে কেউ দেখতে এবং পড়তে পারে।
pragma solidity ^0.8.0;
contract MyContract {
uint256 public balance; // public variable
function setBalance(uint256 _balance) public { // public function
balance = _balance;
}
}এখানে, balance ভেরিয়েবল এবং setBalance ফাংশনটি পাবলিক, তাই অন্য কন্ট্রাক্ট বা ব্যবহারকারীও এগুলিকে এক্সেস করতে পারবে।
4. Private Visibility
private ভিজিবিলিটি ব্যবহার করা হয় এমন ফাংশন বা ভেরিয়েবলগুলোর জন্য যা কেবলমাত্র সেই কন্ট্রাক্টের ভিতরে অ্যাক্সেসযোগ্য। অন্য কন্ট্রাক্ট বা বাইরের ব্যবহারকারীরা private ফাংশন বা ভেরিয়েবল অ্যাক্সেস করতে পারে না।
- Private ফাংশন: কেবলমাত্র একই কন্ট্রাক্টের ভিতর থেকে কল করা যেতে পারে।
- Private ভেরিয়েবল: কেবলমাত্র ঐ কন্ট্রাক্টে ব্যবহার করা যেতে পারে এবং ব্লকচেইনে প্রকাশিত হয় না।
pragma solidity ^0.8.0;
contract MyContract {
uint256 private balance; // private variable
function setBalance(uint256 _balance) private { // private function
balance = _balance;
}
}এখানে, balance ভেরিয়েবল এবং setBalance ফাংশনটি প্রাইভেট, তাই বাইরের ব্যবহারকারী বা অন্য কন্ট্রাক্ট থেকে এগুলো অ্যাক্সেস করা যাবে না।
5. Internal Visibility
internal ভিজিবিলিটি ব্যবহৃত হয় এমন ফাংশন বা ভেরিয়েবলগুলোর জন্য যা সেই কন্ট্রাক্ট এবং তার বংশগত কন্ট্রাক্ট (inheritance) থেকে অ্যাক্সেসযোগ্য। অর্থাৎ, এই ফাংশনগুলি বা ভেরিয়েবলগুলি কেবলমাত্র কন্ট্রাক্টের ভিতরে এবং তার সাব-কন্ট্রাক্ট (derived contract) থেকে অ্যাক্সেস করা যেতে পারে।
- Internal ফাংশন: কন্ট্রাক্টের ভিতরে এবং সাব-কন্ট্রাক্ট থেকে এক্সেসযোগ্য।
- Internal ভেরিয়েবল: কন্ট্রাক্ট এবং তার সাব-কন্ট্রাক্ট থেকে অ্যাক্সেস করা যায়, কিন্তু বাইরের সিস্টেম থেকে নয়।
pragma solidity ^0.8.0;
contract MyContract {
uint256 internal balance; // internal variable
function setBalance(uint256 _balance) internal { // internal function
balance = _balance;
}
}
contract DerivedContract is MyContract {
function getBalance() public view returns (uint256) {
return balance; // Accessing internal variable
}
}এখানে, setBalance ফাংশন এবং balance ভেরিয়েবল internal ভিজিবিলিটির, যা মূল কন্ট্রাক্ট এবং তার সাব-কন্ট্রাক্ট থেকে অ্যাক্সেস করা যেতে পারে।
6. External Visibility
external ভিজিবিলিটি ব্যবহৃত হয় এমন ফাংশন বা ভেরিয়েবলগুলোর জন্য যা কেবলমাত্র বাইরের কন্ট্রাক্ট বা ব্যবহারকারীদের জন্য অ্যাক্সেসযোগ্য। external ফাংশনটি বাইরের কন্ট্রাক্ট থেকে কল করা যায়, কিন্তু কন্ট্রাক্টের ভিতরে থেকে এটি সরাসরি কল করা সম্ভব নয়।
- External ফাংশন: বাইরের কন্ট্রাক্ট বা ব্যবহারকারীদের দ্বারা এক্সেসযোগ্য।
- External ভেরিয়েবল: বাইরের কন্ট্রাক্ট বা ব্যবহারকারী থেকে এক্সেস করা যেতে পারে।
pragma solidity ^0.8.0;
contract MyContract {
uint256 public balance;
function setBalance(uint256 _balance) external { // external function
balance = _balance;
}
}এখানে, setBalance ফাংশনটি external, যা বাইরের কন্ট্রাক্ট বা ব্যবহারকারীদের জন্য এক্সেসযোগ্য।
সারাংশ
Solidity তে ফাংশনের ভিজিবিলিটি অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি কন্ট্রাক্টের নিরাপত্তা এবং ফাংশনগুলোর অ্যাক্সেস নিয়ন্ত্রণ করে। Public, Private, Internal, এবং External এই চারটি ভিজিবিলিটি ব্যবহৃত হয় ফাংশন এবং ভেরিয়েবলগুলোর অ্যাক্সেস কন্ট্রোল করতে। এর মাধ্যমে স্মার্ট কন্ট্রাক্টের নিরাপত্তা ও কার্যকারিতা উন্নত হয়, এবং কন্ট্রাক্টের আচরণ সঠিকভাবে পরিচালিত হয়।
Read more