Solidity তে Inline Libraries এবং External Libraries দুটি গুরুত্বপূর্ণ ধারণা যা স্মার্ট কন্ট্রাক্টের কোড পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বৃদ্ধি করতে ব্যবহৃত হয়। এই লাইব্রেরিগুলি বিশেষভাবে নির্দিষ্ট কার্যক্রম বা ফাংশনগুলির জন্য ব্যবহৃত হয়, যা একাধিক কন্ট্রাক্টে পুনরায় ব্যবহার করা যেতে পারে। এরা স্মার্ট কন্ট্রাক্টের আর্কিটেকচারকে আরও সুশৃঙ্খল এবং কার্যকরী করে তোলে।
এখানে Inline Libraries এবং External Libraries এর ব্যবহারের বিস্তারিত আলোচনা করা হলো।
1. Inline Libraries
Inline Libraries এমন লাইব্রেরি যা কন্ট্রাক্টের সাথে সংযুক্ত হয় এবং কন্ট্রাক্টের মধ্যে ফাংশনগুলো সরাসরি কল করা যায়। Inline লাইব্রেরি ফাংশনগুলো গ্যাস খরচ এবং কোডের আকার কমাতে সহায়ক হতে পারে কারণ এই ফাংশনগুলি কন্ট্রাক্টের অংশ হিসেবে ইন্টারনালভাবে ব্যবহার করা হয় এবং ডিপ্লয়মেন্টের সময় তাদের একটি অংশ হিসেবে কন্ট্রাক্টে অন্তর্ভুক্ত করা হয়।
গঠন:
library MyLibrary {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
}এখানে, MyLibrary একটি inline library, যা add ফাংশনটি internal এবং pure হিসেবে ডিফাইন করেছে। internal মানে এই ফাংশনটি কেবলমাত্র এই লাইব্রেরি বা কন্ট্রাক্টের ভিতর থেকে অ্যাক্সেসযোগ্য, এবং pure মানে এই ফাংশন ব্লকচেইন স্টেট পরিবর্তন বা ব্যবহার করে না, শুধু ইনপুট অনুযায়ী আউটপুট প্রদান করে।
ব্যবহার:
pragma solidity ^0.8.0;
contract MyContract {
using MyLibrary for uint256;
uint256 public result;
function calculate(uint256 a, uint256 b) public {
result = a.add(b); // add ফাংশন লাইব্রেরি থেকে কল করা
}
}এখানে, using MyLibrary for uint256 দ্বারা MyContract কন্ট্রাক্টে MyLibrary লাইব্রেরি যুক্ত করা হয়েছে, যার ফলে add ফাংশনটি uint256 টাইপের উপর সরাসরি ব্যবহার করা যেতে পারে।
2. External Libraries
External Libraries হল এমন লাইব্রেরি যা স্মার্ট কন্ট্রাক্টের বাইরে ডিপ্লয় করা হয় এবং এটি স্মার্ট কন্ট্রাক্ট থেকে এক্সটার্নাল ফাংশন কল করতে ব্যবহৃত হয়। External লাইব্রেরিগুলির কোড আলাদা ব্লকচেইনে ডিপ্লয় হয় এবং কন্ট্রাক্ট থেকে এই লাইব্রেরি ডিপ্লয়মেন্ট অ্যাড্রেসের মাধ্যমে কল করা হয়।
গঠন:
library MyExternalLibrary {
function add(uint256 a, uint256 b) external pure returns (uint256) {
return a + b;
}
}এখানে, MyExternalLibrary একটি external library, যেখানে add ফাংশনটি external এবং pure হিসেবে ডিফাইন করা হয়েছে। external মানে এই ফাংশনটি অন্য কন্ট্রাক্ট বা বাইরের সিস্টেম থেকে কল করা যাবে।
ব্যবহার:
pragma solidity ^0.8.0;
contract MyContract {
address libraryAddress = 0x...; // লাইব্রেরির ডিপ্লয়মেন্ট অ্যাড্রেস
function calculate(uint256 a, uint256 b) public returns (uint256) {
return MyExternalLibrary(libraryAddress).add(a, b); // লাইব্রেরি থেকে ফাংশন কল করা
}
}এখানে, MyExternalLibrary কে বাইরের ডিপ্লয়ড লাইব্রেরি থেকে অ্যাড্রেস ব্যবহার করে কল করা হয়েছে।
3. Inline Libraries vs External Libraries
পার্থক্য:
- Inline Libraries:
- কোডের অংশ হিসেবে কন্ট্রাক্টের ভিতরেই ডিপ্লয় করা হয়।
- ফাংশনগুলো
internalবাprivateহতে পারে, এবং সরাসরি কন্ট্রাক্টের মধ্যে কল করা যায়। - কোডের আকার ছোট রাখে এবং গ্যাস খরচ কমাতে সহায়ক।
- External Libraries:
- আলাদা ব্লকচেইনে ডিপ্লয় করা হয় এবং বাইরের কন্ট্রাক্ট থেকে কল করা হয়।
- গ্যাস খরচ একটু বেশি হতে পারে, কারণ ব্লকচেইন থেকে বাইরের লাইব্রেরি কল করতে হয়।
- ফাংশনগুলি
externalহতে হয়, এবং কন্ট্রাক্টের বাইরে থেকে এক্সিকিউট করা হয়।
কখন কোনটা ব্যবহার করবেন:
- Inline Library ব্যবহার করা উচিত যখন আপনাকে একই কন্ট্রাক্টের অংশ হিসেবে কোড লিখতে হবে এবং আপনি গ্যাস খরচ এবং কোডের আকার কমাতে চান।
- External Library ব্যবহার করা উচিত যখন আপনি একাধিক কন্ট্রাক্টের মধ্যে একটি লাইব্রেরি পুনঃব্যবহার করতে চান, অথবা যখন আপনি লাইব্রেরি কোডকে আলাদা ব্লকচেইনে ডিপ্লয় করে রাখবেন।
4. Library Gas Cost Optimization
Solidity তে লাইব্রেরি ব্যবহার করার মাধ্যমে গ্যাস খরচ কমানো সম্ভব। Inline Libraries কন্ট্রাক্টের সাথে একত্রিত হয়ে সরাসরি ফাংশন ব্যবহার করতে পারে, তাই এটি আরও কার্যকর এবং কম গ্যাস খরচ করে। তবে, External Libraries এর গ্যাস খরচ একটু বেশি হতে পারে, কারণ এটি আলাদা ব্লকচেইনে ডিপ্লয় এবং এক্সিকিউট হয়।
5. Libraries with State Variables
Solidity তে লাইব্রেরি শুধুমাত্র ফাংশন এবং প্রোগ্রাম লজিক ধারণ করতে পারে। লাইব্রেরি state variables ধারণ করতে পারে না। যদি লাইব্রেরি state variables ব্যবহার করতে চায়, তাহলে সেটি অবশ্যই external লাইব্রেরি হতে হবে, এবং state variables ব্লকচেইনের মধ্যে সংরক্ষিত হতে হবে।
উদাহরণ:
library MyLibrary {
uint256 public data; // এটি ভুল হবে, কারণ লাইব্রেরিতে state variable রাখা যায় না
}এই ধরনের লাইব্রেরি অবশ্যই ভুল হবে, কারণ Solidity তে লাইব্রেরির মধ্যে স্টেট ভেরিয়েবল ধারণ করা সম্ভব নয়।
সারাংশ
Inline Libraries এবং External Libraries Solidity তে কোড পুনঃব্যবহারযোগ্যতা এবং গ্যাস খরচ অপ্টিমাইজ করতে সাহায্য করে। Inline Libraries কন্ট্রাক্টের অংশ হিসেবে থাকে এবং সহজেই কন্ট্রাক্টের মধ্যে ফাংশন কল করা যায়, যার ফলে গ্যাস খরচ কমে। অন্যদিকে, External Libraries আলাদা ব্লকচেইনে ডিপ্লয় করা হয় এবং বাইরের কন্ট্রাক্ট থেকে কল করা হয়, যা কিছুটা বেশি গ্যাস খরচ করতে পারে। লাইব্রেরি ব্যবহার করে কন্ট্রাক্টের কার্যক্ষমতা বৃদ্ধি এবং কোডের পুনঃব্যবহার নিশ্চিত করা যায়।
Read more