Interfaces Solidity তে একটি গুরুত্বপূর্ণ ফিচার, যা বিভিন্ন কন্ট্রাক্টের মধ্যে যোগাযোগ (communication) এবং ইন্টারঅ্যাকশন সহজ করে তোলে। যখন বিভিন্ন কন্ট্রাক্ট একে অপরের সাথে ইন্টারঅ্যাক্ট করতে চায়, তখন interface ব্যবহার করা হয়। Interface হলো একটি কন্ট্রাক্টের ফাংশন সিগনেচার যা কেবলমাত্র ফাংশনগুলির স্বাক্ষর (signature) প্রদান করে, কিন্তু তাদের বাস্তবায়ন বা কোড প্রদান করে না।
Interfaces এর মাধ্যমে এক কন্ট্রাক্ট অন্য কন্ট্রাক্টের ফাংশন কল করতে পারে, কিন্তু কন্ট্রাক্টের বাস্তবায়ন (implementation) সম্পর্কে কোনো ধারণা না থাকলেও কেবলমাত্র সেই কন্ট্রাক্টের ফাংশন সিগনেচার জানা প্রয়োজন।
Interface এর বৈশিষ্ট্য:
- শুধুমাত্র ফাংশন সিগনেচার: Interface একটি কন্ট্রাক্টের ফাংশনগুলো ঘোষণার জন্য ব্যবহৃত হয়, তবে এর বাস্তবায়ন অন্তর্ভুক্ত হয় না।
- কোনো ভেরিয়েবল বা স্টোরেজ নেই: Interface তে কোনো স্টোরেজ ভেরিয়েবল থাকে না, শুধুমাত্র ফাংশন সিগনেচার থাকে।
- Multiple Inheritance: Solidity তে একাধিক Interface উত্তরাধিকারসূত্রে নেওয়া যেতে পারে (multiple inheritance)।
- বস্তুনিষ্ঠতা: Interface একটি কন্ট্রাক্টের বাইরে অন্য কন্ট্রাক্টের সাথে যোগাযোগের একটি নির্দিষ্ট মানদণ্ড (standard) তৈরি করে।
Interface ব্যবহার করার জন্য Steps
- Interface Declaration
- Interface Implementation
- Contract Communication
১. Interface Declaration
Interface ডিক্লেয়ার করার সময়, শুধুমাত্র ফাংশন সিগনেচার দেওয়া হয় এবং তার বাস্তবায়ন বা কোড দেওয়া হয় না।
pragma solidity ^0.8.0;
// Interface Declaration
interface IToken {
function transfer(address recipient, uint amount) external returns (bool);
function balanceOf(address account) external view returns (uint);
}এখানে:
ITokenএকটি interface যা দুটি ফাংশন ঘোষণা করেছে:transfer: টোকেন ট্রান্সফারের জন্য ব্যবহৃত হবে।balanceOf: নির্দিষ্ট অ্যাকাউন্টের ব্যালেন্স ফেরত দেয়।
২. Interface Implementation
এখন আপনি একটি কন্ট্রাক্ট তৈরি করতে পারেন যা এই Interface-এর বাস্তবায়ন করবে। এখানে, MyToken কন্ট্রাক্টটি IToken ইন্টারফেসের বাস্তবায়ন করবে।
pragma solidity ^0.8.0;
// Interface Declaration
interface IToken {
function transfer(address recipient, uint amount) external returns (bool);
function balanceOf(address account) external view returns (uint);
}
// Contract Implementation
contract MyToken is IToken {
mapping(address => uint) public balances;
// Implementing the transfer function from IToken interface
function transfer(address recipient, uint amount) public override returns (bool) {
require(balances[msg.sender] >= amount, "Insufficient balance");
balances[msg.sender] -= amount;
balances[recipient] += amount;
return true;
}
// Implementing the balanceOf function from IToken interface
function balanceOf(address account) public view override returns (uint) {
return balances[account];
}
// Function to mint tokens
function mint(address account, uint amount) public {
balances[account] += amount;
}
}এখানে:
MyTokenকন্ট্রাক্টেITokenইন্টারফেসের দুটি ফাংশনের বাস্তবায়ন রয়েছে:transfer: একটি নির্দিষ্ট পরিমাণ টোকেন প্রেরণ করে।balanceOf: কোনো অ্যাকাউন্টের ব্যালেন্স ফেরত দেয়।
এবং mint ফাংশনটি MyToken কন্ট্রাক্টের জন্য তৈরি করা হয়েছে, যা নতুন টোকেন তৈরি করে (এই ফাংশনটি IToken ইন্টারফেসের অংশ নয়)।
৩. Contract Communication
এখন, আমরা অন্য একটি কন্ট্রাক্ট থেকে MyToken কন্ট্রাক্টের ফাংশন কল করতে চাই, এটি করতে IToken ইন্টারফেস ব্যবহার করা যেতে পারে।
pragma solidity ^0.8.0;
contract TokenSender {
IToken public tokenContract;
// Constructor to set the token contract address
constructor(address _tokenAddress) {
tokenContract = IToken(_tokenAddress);
}
// Function to send tokens using the IToken interface
function sendTokens(address recipient, uint amount) public returns (bool) {
return tokenContract.transfer(recipient, amount);
}
}এখানে:
TokenSenderকন্ট্রাক্টেITokenইন্টারফেস ব্যবহার করা হয়েছে যাMyTokenকন্ট্রাক্টের সাথে যোগাযোগ করতে সক্ষম।sendTokensফাংশনটিITokenইন্টারফেসেরtransferফাংশন কল করে, যাMyTokenকন্ট্রাক্টের মাধ্যমে টোকেন প্রেরণ করে।
Solidity তে Interface এর সুবিধা
- আন্তঃকন্ট্রাক্ট কমিউনিকেশন: Interfaces কন্ট্রাক্টগুলোর মধ্যে যোগাযোগ সহজ করে তোলে, যাতে তারা একে অপরের ফাংশনগুলি কল করতে পারে।
- ডেটা আর্কিটেকচার উন্নতি: কন্ট্রাক্টগুলোর মধ্যে স্পষ্ট ইন্টারফেসের মাধ্যমে ডেটার নিরাপত্তা এবং সঠিক ব্যবস্থাপনা নিশ্চিত করা যায়।
- স্ট্যান্ডার্ডাইজেশন: বিশেষ করে ERC-20, ERC-721, ERC-1155 ইত্যাদি স্ট্যান্ডার্ড প্রোটোকলগুলিতে ইন্টারফেস ব্যবহৃত হয়। এসব প্রোটোকলে বিভিন্ন কন্ট্রাক্টের মধ্যে সঙ্গতি বজায় রাখা সহজ হয়।
- কোডের রিইউজযোগ্যতা: একবার ইন্টারফেস ডিফাইন করে, আপনি একাধিক কন্ট্রাক্টে সেটি ব্যবহার করতে পারেন, যা কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করে।
সারাংশ
Interfaces Solidity তে বিভিন্ন কন্ট্রাক্টের মধ্যে ইন্টারঅ্যাকশন এবং যোগাযোগ সহজ করতে ব্যবহৃত হয়। এটি কেবলমাত্র কন্ট্রাক্টের ফাংশন সিগনেচার প্রদান করে, বাস্তবায়ন নয়। একটি কন্ট্রাক্ট যে ইন্টারফেস অনুসরণ করবে, সে কেবল সেই ইন্টারফেসের ঘোষিত ফাংশনগুলির বাস্তবায়ন করবে। এতে কন্ট্রাক্টগুলোর মধ্যে স্ট্যান্ডার্ডাইজেশন, নিরাপত্তা এবং যোগাযোগ সহজ হয়। Interfaces ব্যবহারের মাধ্যমে একটি কন্ট্রাক্ট অন্য কন্ট্রাক্টের কার্যকারিতা ব্যবহার করতে পারে, যা স্মার্ট কন্ট্রাক্ট ডেভেলপমেন্টে অনেক সুবিধা প্রদান করে।
Read more