ERC-1155 মাল্টি-টোকেন স্ট্যান্ডার্ড
পৃষ্ঠাটি সর্বশেষ আপডেট করা হয়েছে: ২২ অক্টোবর, ২০২৫
ভূমিকা
একাধিক টোকেন প্রকার পরিচালনাকারী কন্ট্র্যাক্টগুলির জন্য একটি স্ট্যান্ডার্ড ইন্টারফেস। একটি একক ডেপ্লয়েড কন্ট্র্যাক্টে ফাঞ্জিবল টোকেন, নন-ফাঞ্জিবল টোকেন বা অন্যান্য কনফিগারেশনের (যেমন, সেমি-ফাঞ্জিবল টোকেন) যেকোনো সংমিশ্রণ অন্তর্ভুক্ত থাকতে পারে।
মাল্টি-টোকেন স্ট্যান্ডার্ড বলতে কী বোঝায়?
এর ধারণাটি সহজ এবং এটি এমন একটি স্মার্ট কন্ট্র্যাক্ট ইন্টারফেস তৈরি করতে চায় যা যেকোনো সংখ্যক ফাঞ্জিবল এবং নন-ফাঞ্জিবল টোকেন প্রকারকে উপস্থাপন এবং নিয়ন্ত্রণ করতে পারে। এইভাবে, ERC-1155 টোকেন একটি ERC-20 এবং ERC-721 টোকেনের মতো একই কাজ করতে পারে, এবং এমনকি একই সময়ে উভয়ই করতে পারে। এটি ERC-20 এবং ERC-721 উভয় স্ট্যান্ডার্ডের কার্যকারিতা উন্নত করে, এটিকে আরও কার্যকর করে তোলে এবং সুস্পষ্ট ইমপ্লিমেন্টেশন ত্রুটি সংশোধন করে।
ERC-1155 টোকেনটি EIP-1155opens in a new tab-এ সম্পূর্ণরূপে বর্ণনা করা হয়েছে।
পূর্বশর্ত
এই পৃষ্ঠাটি আরও ভালভাবে বোঝার জন্য, আমরা আপনাকে প্রথমে টোকেন স্ট্যান্ডার্ড, ERC-20 এবং ERC-721 সম্পর্কে পড়ার পরামর্শ দিই।
ERC-1155 ফাংশন এবং বৈশিষ্ট্য:
- ব্যাচ ট্রান্সফার: একটি কলে একাধিক অ্যাসেট ট্রান্সফার করুন।
- ব্যাচ ব্যালেন্স: একটি কলে একাধিক অ্যাসেটের ব্যালেন্স পান।
- ব্যাচ অ্যাপ্রুভাল: একটি অ্যাড্রেসে সমস্ত টোকেন অ্যাপ্রুভ করুন।
- হুক: টোকেন হুক গ্রহণ করুন।
- NFT সাপোর্ট: সাপ্লাই মাত্র 1 হলে, এটিকে NFT হিসাবে গণ্য করুন।
- নিরাপদ ট্রান্সফার নিয়ম: নিরাপদ ট্রান্সফারের জন্য নিয়মের সেট।
ব্যাচ ট্রান্সফার
ব্যাচ ট্রান্সফারটি সাধারণ ERC-20 ট্রান্সফারের মতোই কাজ করে। আসুন সাধারণ ERC-20 transferFrom ফাংশনটি দেখি:
1// ERC-202function transferFrom(address from, address to, uint256 value) external returns (bool);34// ERC-11555function safeBatchTransferFrom(6 address _from,7 address _to,8 uint256[] calldata _ids,9 uint256[] calldata _values,10 bytes calldata _data11) external;সবকটি দেখুনERC-1155-এর একমাত্র পার্থক্য হলো আমরা মানগুলিকে একটি অ্যারে হিসাবে এবং আইডিগুলির একটি অ্যারেও পাস করি। উদাহরণস্বরূপ, ids=[3, 6, 13] এবং values=[100, 200, 5] দেওয়া থাকলে, ফলাফলস্বরূপ ট্রান্সফারগুলি হবে
_fromথেকে_to-তে id 3 সহ 100টি টোকেন ট্রান্সফার করুন।_fromথেকে_to-তে id 6 সহ 200টি টোকেন ট্রান্সফার করুন।_fromথেকে_to-তে id 13 সহ 5টি টোকেন ট্রান্সফার করুন।
ERC-1155-এ আমাদের কেবল transferFrom আছে, transfer নেই। এটিকে একটি সাধারণ transfer-এর মতো ব্যবহার করতে, শুধুমাত্র from অ্যাড্রেসটিকে ফাংশন কল করা অ্যাড্রেসে সেট করুন।
ব্যাচ ব্যালেন্স
সংশ্লিষ্ট ERC-20 balanceOf কলেরও ব্যাচ সাপোর্টসহ তার পার্টনার ফাংশন রয়েছে। মনে করিয়ে দেওয়া যাক, এটি হলো ERC-20 সংস্করণ:
1// ERC-202function balanceOf(address owner) external view returns (uint256);34// ERC-11555function balanceOfBatch(6 address[] calldata _owners,7 uint256[] calldata _ids8) external view returns (uint256[] memory);ব্যালেন্স কলের জন্য আরও সহজ হলো, আমরা একটি কলে একাধিক ব্যালেন্স পুনরুদ্ধার করতে পারি। আমরা মালিকদের অ্যারে পাস করি, তারপরে টোকেন আইডিগুলির অ্যারে।
উদাহরণস্বরূপ _ids=[3, 6, 13] এবং _owners=[0xbeef..., 0x1337..., 0x1111...] দেওয়া থাকলে, রিটার্ন ভ্যালু হবে
1[2 balanceOf(0xbeef...),3 balanceOf(0x1337...),4 balanceOf(0x1111...)5]ব্যাচ অ্যাপ্রুভাল
1// ERC-11552function setApprovalForAll(3 address _operator,4 bool _approved5) external;67function isApprovedForAll(8 address _owner,9 address _operator10) external view returns (bool);সবকটি দেখুনঅ্যাপ্রুভালগুলি ERC-20 থেকে কিছুটা আলাদা। নির্দিষ্ট পরিমাণ অ্যাপ্রুভ করার পরিবর্তে, আপনি setApprovalForAll-এর মাধ্যমে একজন অপারেটরকে অ্যাপ্রুভড বা নট অ্যাপ্রুভড হিসাবে সেট করেন।
isApprovedForAll-এর মাধ্যমে বর্তমান স্ট্যাটাস পড়া যেতে পারে। আপনি যেমন দেখতে পাচ্ছেন, এটি একটি অল-অর-নাথিং অপারেশন। আপনি কতগুলি টোকেন অ্যাপ্রুভ করবেন বা এমনকি কোন টোকেন ক্লাস তাও নির্ধারণ করতে পারবেন না।
এটি ইচ্ছাকৃতভাবে সরলতাকে মাথায় রেখে ডিজাইন করা হয়েছে। আপনি শুধুমাত্র একটি অ্যাড্রেসের জন্য সবকিছু অ্যাপ্রুভ করতে পারেন।
রিসিভ হুক
1function onERC1155BatchReceived(2 address _operator,3 address _from,4 uint256[] calldata _ids,5 uint256[] calldata _values,6 bytes calldata _data7) external returns(bytes4);EIP-165opens in a new tab সাপোর্ট দেওয়া থাকায়, ERC-1155 শুধুমাত্র স্মার্ট কন্ট্র্যাক্টের জন্য রিসিভ হুক সাপোর্ট করে। হুক ফাংশনটিকে অবশ্যই একটি ম্যাজিক পূর্বনির্ধারিত bytes4 ভ্যালু রিটার্ন করতে হবে যা এইরকম:
1bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))যখন রিসিভিং কন্ট্র্যাক্ট এই মানটি রিটার্ন করে, তখন ধরে নেওয়া হয় যে কন্ট্র্যাক্টটি ট্রান্সফার গ্রহণ করে এবং ERC-1155 টোকেনগুলি কীভাবে হ্যান্ডেল করতে হয় তা জানে। দারুণ, কোনো কন্ট্র্যাক্টে আর টোকেন আটকে থাকবে না!
NFT সাপোর্ট
যখন সাপ্লাই মাত্র একটি হয়, তখন টোকেনটি মূলত একটি নন-ফাঞ্জিবল টোকেন (NFT)। এবং ERC-721-এর জন্য স্ট্যান্ডার্ড হিসাবে, আপনি একটি মেটাডেটা URL সংজ্ঞায়িত করতে পারেন। URL-টি ক্লায়েন্টদের দ্বারা পড়া এবং পরিবর্তন করা যেতে পারে, এখানেopens in a new tab দেখুন।
নিরাপদ ট্রান্সফার নিয়ম
আমরা আগের ব্যাখ্যাগুলিতে ইতিমধ্যে কয়েকটি নিরাপদ ট্রান্সফার নিয়ম আলোচনা করেছি। তবে আসুন সবচেয়ে গুরুত্বপূর্ণ নিয়মগুলি দেখি:
- কলারকে
_fromঅ্যাড্রেসের জন্য টোকেন খরচ করার জন্য অ্যাপ্রুভড হতে হবে অথবা কলারকে_from-এর সমান হতে হবে। - ট্রান্সফার কলটি অবশ্যই রিভার্ট হবে যদি
_toঅ্যাড্রেস 0 হয়।_ids-এর দৈর্ঘ্য_values-এর দৈর্ঘ্যের সমান না হয়।_ids-এর মধ্যে থাকা টোকেন(গুলি)-র জন্য হোল্ডার(দের)-র ব্যালেন্স(গুলি)-র মধ্যে কোনোটি প্রাপকের কাছে পাঠানো_values-এর সংশ্লিষ্ট পরিমাণ(গুলি)-র থেকে কম হয়।- অন্য কোনো ত্রুটি ঘটে।
দ্রষ্টব্য: হুকসহ সমস্ত ব্যাচ ফাংশন ব্যাচ ছাড়া সংস্করণ হিসাবেও বিদ্যমান। এটি গ্যাস দক্ষতার জন্য করা হয়েছে, কারণ শুধুমাত্র একটি অ্যাসেট ট্রান্সফার করাই সম্ভবত সবচেয়ে বেশি ব্যবহৃত উপায় হিসেবে থাকবে। নিরাপদ ট্রান্সফার নিয়মসহ ব্যাখ্যার সরলতার জন্য আমরা সেগুলোকে বাদ দিয়েছি। নামগুলি অভিন্ন, শুধু 'ব্যাচ' সরিয়ে দিন।