Solidity একটি উচ্চস্তরের প্রোগ্রামিং ভাষা, এবং এর সিনট্যাক্স অন্যান্য সাধারণ ভাষাগুলোর মতোই কিন্তু কিছু বিশেষ নিয়ম এবং ধারণা অনুসরণ করে যা ব্লকচেইন ভিত্তিক অ্যাপ্লিকেশন এবং স্মার্ট কন্ট্রাক্ট তৈরি করার জন্য উপযোগী। Solidity সিনট্যাক্সে কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে, যেমন ডেটা টাইপ, ফাংশন, ভেরিয়েবল, কন্ট্রাক্ট, মডিফায়ার এবং অন্যান্য, যা স্মার্ট কন্ট্রাক্ট কোডিংয়ে ব্যবহৃত হয়। এখানে Solidity এর মৌলিক সিনট্যাক্স এবং এর ব্যবহারের ধারণা আলোচনা করা হচ্ছে।
1. কন্ট্রাক্ট (Contract)
Solidity কোড মূলত কন্ট্রাক্ট দ্বারা গঠিত হয়। একটি কন্ট্রাক্ট হচ্ছে স্মার্ট কন্ট্রাক্টের প্রধান অংশ, যা Ethereum ব্লকচেইনে ডিপ্লয় করা হয় এবং এর মধ্যে প্রয়োজনীয় লজিক এবং ফাংশন থাকে। Solidity কোডে কন্ট্রাক্ট ডিফাইন করা হয় নিচের মতো:
pragma solidity ^0.8.0;
contract MyContract {
// কন্ট্রাক্টের কোড এখানে থাকবে
}এখানে pragma নির্দেশিকা Solidity এর ভার্সন নির্দেশ করে, এবং contract কীওয়ার্ড দিয়ে কন্ট্রাক্ট ডিফাইন করা হয়।
2. ভেরিয়েবল (Variables)
Solidity এ ভেরিয়েবল ব্যবহার করে ডেটা সংরক্ষণ করা হয়। Solidity তে বিভিন্ন ধরনের ডেটা টাইপ ব্যবহার করা যেতে পারে যেমন uint (unsigned integer), string, address ইত্যাদি।
- স্ট্যাটিক টাইপ ভেরিয়েবল: Solidity একটি স্ট্যাটিক টাইপ ভাষা, অর্থাৎ ভেরিয়েবলগুলোর টাইপ পূর্বে নির্ধারণ করতে হয়।
uint256 public balance;
string public name;
address public owner;এখানে balance একটি uint256 টাইপ ভেরিয়েবল, name একটি string টাইপ এবং owner একটি address টাইপ ভেরিয়েবল।
3. ফাংশন (Functions)
Solidity তে ফাংশন ব্যবহার করা হয় স্মার্ট কন্ট্রাক্টের লজিক এবং কার্যক্রম সম্পাদন করার জন্য। একটি ফাংশন ডিফাইন করা হয় নিচের মতো:
function setBalance(uint256 _balance) public {
balance = _balance;
}এখানে, setBalance নামক একটি ফাংশন ডিফাইন করা হয়েছে যা balance ভেরিয়েবলে একটি নতুন মান সেট করে।
- Visibility: ফাংশনগুলির জন্য বিভিন্ন ভিজিবিলিটি নির্ধারণ করা যায়, যেমন
public,private,internal,external। - Pure এবং View Functions: Solidity তে দুটি বিশেষ ধরনের ফাংশন রয়েছে —
pure(যে ফাংশন কেবলমাত্র ইনপুট থেকে আউটপুট প্রদান করে এবং ব্লকচেইনে কোনো পরিবর্তন ঘটায় না) এবংview(যে ফাংশন ডেটা পড়তে পারে কিন্তু কোনো পরিবর্তন ঘটাতে পারে না)।
4. কন্ট্রাক্টের কনস্ট্রাক্টর (Constructor)
কন্ট্রাক্টের কনস্ট্রাক্টর হল একটি বিশেষ ফাংশন যা কন্ট্রাক্ট ডিপ্লয় হওয়ার সময় একবার রান হয়। এটি সাধারণত কন্ট্রাক্টের প্রাথমিক অবস্থান সেট করার জন্য ব্যবহৃত হয়।
constructor(uint256 _initialBalance) {
balance = _initialBalance;
owner = msg.sender;
}এখানে, কনস্ট্রাক্টরটি _initialBalance এর মান গ্রহণ করে এবং balance ভেরিয়েবলকে সেট করে, সাথে সাথে কন্ট্রাক্টের মালিকের ঠিকানা owner ভেরিয়েবলে সংরক্ষণ করা হয়।
5. ইভেন্ট (Events)
Solidity তে ইভেন্ট ব্যবহার করা হয় স্মার্ট কন্ট্রাক্টের বাইরের সিস্টেমকে ট্রানজেকশন বা স্টেট চেঞ্জ সম্পর্কে জানানোর জন্য। এটি সাধারণত ফ্রন্টএন্ড বা ব্যবহারকারীর ইন্টারফেসে ডেটা প্রদর্শনের জন্য ব্যবহৃত হয়।
event BalanceUpdated(uint256 newBalance);
function updateBalance(uint256 _newBalance) public {
balance = _newBalance;
emit BalanceUpdated(_newBalance);
}এখানে, BalanceUpdated নামক একটি ইভেন্ট ডিফাইন করা হয়েছে যা updateBalance ফাংশনের মাধ্যমে নতুন ব্যালেন্স গ্রহণের পর ট্রিগার হয়।
6. গ্যাস (Gas) এবং ট্রানজেকশন
Solidity তে গ্যাস ব্যবহার হয় ব্লকচেইন নেটওয়ার্কে লেনদেন সম্পাদনের জন্য প্রয়োজনীয় খরচ বা শক্তি পরিমাপ করতে। যখন একটি ফাংশন ব্লকচেইনে কার্যকরী হয়, তখন তার জন্য গ্যাস ব্যবহার করতে হয়, এবং গ্যাসের পরিমাণ নির্ভর করে যে কতটা কম্পিউটেশন বা স্টোরেজ দরকার।
uint256 public gasLimit = 100000;এখানে, gasLimit একটি ভেরিয়েবল যা গ্যাস খরচ সীমাবদ্ধ করে।
7. মডিফায়ার (Modifiers)
Solidity তে মডিফায়ার ব্যবহার করে ফাংশন বা কন্ট্রাক্টের কার্যক্রমে শর্ত বা সীমাবদ্ধতা যোগ করা যায়। এটি ফাংশনের আগে অথবা পরে প্রযোজ্য হতে পারে।
modifier onlyOwner() {
require(msg.sender == owner, "You are not the owner!");
_;
}
function updateBalance(uint256 _newBalance) public onlyOwner {
balance = _newBalance;
}এখানে, onlyOwner মডিফায়ারটি চেক করে যে কলকারী owner কিনা, অন্যথায় ফাংশনটি কার্যকর হবে না।
8. ফল্ট টলারেন্স এবং নিরাপত্তা
Solidity এর সিনট্যাক্স নিরাপত্তা এবং ফল্ট টলারেন্সের জন্য বিশেষভাবে ডিজাইন করা হয়েছে। Solidity তে require(), assert(), এবং revert() ফাংশন ব্যবহার করা হয় যাতে প্রোগ্রামটি অপ্রত্যাশিত অবস্থায় ফিরে না যায় বা কোনও ত্রুটি থেকে নিরাপদ থাকে।
require(balance >= amount, "Insufficient balance");এখানে, require() ব্যবহার করে নির্দিষ্ট শর্ত যাচাই করা হয়, যদি শর্তটি মিথ্যা হয় তবে লেনদেনটি বাতিল হয়ে যায় এবং ত্রুটি বার্তা দেখানো হয়।
সারাংশ
Solidity এর সিনট্যাক্স অন্যান্য সাধারণ প্রোগ্রামিং ভাষার মতো হলেও এটি ব্লকচেইন প্রযুক্তির জন্য বিশেষভাবে ডিজাইন করা হয়েছে। এর মধ্যে কন্ট্রাক্ট, ভেরিয়েবল, ফাংশন, কনস্ট্রাক্টর, মডিফায়ার, ইভেন্ট এবং গ্যাস ব্যবস্থাপনা গুরুত্বপূর্ণ উপাদান হিসেবে কাজ করে। Solidity এর সিনট্যাক্সের মাধ্যমে স্মার্ট কন্ট্রাক্টে স্বয়ংক্রিয় কার্যক্রম, নিরাপত্তা, এবং স্বচ্ছতা নিশ্চিত করা সম্ভব হয়, যা Ethereum ব্লকচেইনে কার্যকরী স্মার্ট কন্ট্রাক্ট সিস্টেম গঠন করতে সহায়ক।
Read more