মূল কন্টেন্টে যান
Change page

ERC-1155 মাল্টি-টোকেন স্ট্যান্ডার্ড

পেজ সর্বশেষ আপডেট: 22 অক্টোবর, 2025

ভূমিকা

একাধিক টোকেন টাইপ পরিচালনা করে এমন কন্ট্রাক্টগুলোর জন্য একটি স্ট্যান্ডার্ড ইন্টারফেস। একটি একক ডেপ্লয় করা কন্ট্রাক্টে ফান্জেবল টোকেন, নন-ফান্জেবল টোকেন বা অন্যান্য কনফিগারেশনের (যেমন, সেমি-ফান্জেবল টোকেন) যেকোনো সমন্বয় অন্তর্ভুক্ত থাকতে পারে।

মাল্টি-টোকেন স্ট্যান্ডার্ড বলতে কী বোঝায়?

ধারণাটি সহজ এবং এটি এমন একটি স্মার্ট কন্ট্রাক্ট ইন্টারফেস তৈরি করতে চায় যা যেকোনো সংখ্যক ফান্জেবল এবং নন-ফান্জেবল টোকেন টাইপকে উপস্থাপন এবং নিয়ন্ত্রণ করতে পারে। এইভাবে, ERC-1155 টোকেন একটি ERC-20 এবং ERC-721 টোকেনের মতো একই কাজ করতে পারে এবং এমনকি একই সাথে উভয় কাজও করতে পারে। এটি ERC-20 এবং ERC-721 উভয় স্ট্যান্ডার্ডের কার্যকারিতা উন্নত করে, এটিকে আরও দক্ষ করে তোলে এবং সুস্পষ্ট বাস্তবায়ন ত্রুটিগুলো সংশোধন করে।

ERC-1155 টোকেনটি EIP-1155 (opens in a new tab)-এ সম্পূর্ণভাবে বর্ণনা করা হয়েছে।

পূর্বশর্ত

এই পৃষ্ঠাটি আরও ভালোভাবে বোঝার জন্য, আমরা সুপারিশ করছি যে আপনি প্রথমে টোকেন স্ট্যান্ডার্ড, ERC-20, এবং ERC-721 সম্পর্কে পড়ুন।

ERC-1155 এর ফাংশন এবং বৈশিষ্ট্যসমূহ:

ব্যাচ ট্রান্সফার

ব্যাচ ট্রান্সফার সাধারণ ERC-20 ট্রান্সফারের মতোই কাজ করে। চলুন সাধারণ ERC-20 transferFrom ফাংশনটি দেখি:

1// ERC-20
2function transferFrom(address from, address to, uint256 value) external returns (bool);
3
4// ERC-1155
5function safeBatchTransferFrom(
6 address _from,
7 address _to,
8 uint256[] calldata _ids,
9 uint256[] calldata _values,
10 bytes calldata _data
11) external;

ERC-1155-এ একমাত্র পার্থক্য হলো আমরা ভ্যালুগুলোকে একটি অ্যারে হিসেবে পাস করি এবং আমরা id-গুলোর একটি অ্যারেও পাস করি। উদাহরণস্বরূপ, যদি ids=[3, 6, 13] এবং values=[100, 200, 5] দেওয়া হয়, তবে এর ফলে যে ট্রান্সফারগুলো হবে তা হলো

  1. _from থেকে _to-তে 3 id যুক্ত 100টি টোকেন ট্রান্সফার।
  2. _from থেকে _to-তে 6 id যুক্ত 200টি টোকেন ট্রান্সফার।
  3. _from থেকে _to-তে 13 id যুক্ত 5টি টোকেন ট্রান্সফার।

ERC-1155-এ আমাদের শুধুমাত্র transferFrom আছে, কোনো transfer নেই। এটিকে একটি সাধারণ transfer-এর মতো ব্যবহার করতে, শুধুমাত্র from এডড্রেস-টিকে সেই এডড্রেস-এ সেট করুন যা ফাংশনটিকে কল করছে।

ব্যাচ ব্যালেন্স

সংশ্লিষ্ট ERC-20 balanceOf কলেরও একইভাবে ব্যাচ সাপোর্টসহ এর পার্টনার ফাংশন রয়েছে। মনে করিয়ে দেওয়ার জন্য, এটি হলো ERC-20 সংস্করণ:

1// ERC-20
2function balanceOf(address owner) external view returns (uint256);
3
4// ERC-1155
5function balanceOfBatch(
6 address[] calldata _owners,
7 uint256[] calldata _ids
8) external view returns (uint256[] memory);

ব্যালেন্স কলের জন্য এটি আরও সহজ, আমরা একটি একক কলে একাধিক ব্যালেন্স পুনরুদ্ধার করতে পারি। আমরা ওনারদের (owners) অ্যারে পাস করি, এরপর টোকেন id-গুলোর অ্যারে পাস করি।

উদাহরণস্বরূপ, যদি _ids=[3, 6, 13] এবং _owners=[0xbeef..., 0x1337..., 0x1111...] দেওয়া হয়, তবে রিটার্ন ভ্যালু হবে

1[
2 balanceOf(0xbeef...),
3 balanceOf(0x1337...),
4 balanceOf(0x1111...)
5]

ব্যাচ অ্যাপ্রুভাল

1// ERC-1155
2function setApprovalForAll(
3 address _operator,
4 bool _approved
5) external;
6
7function isApprovedForAll(
8 address _owner,
9 address _operator
10) external view returns (bool);

অ্যাপ্রুভালগুলো ERC-20 এর চেয়ে কিছুটা আলাদা। নির্দিষ্ট পরিমাণ অনুমোদন করার পরিবর্তে, আপনি setApprovalForAll-এর মাধ্যমে একজন অপারেটরকে অনুমোদিত বা অননুমোদিত হিসেবে সেট করেন।

বর্তমান স্ট্যাটাস পড়া isApprovedForAll-এর মাধ্যমে করা যেতে পারে। যেমনটি আপনি দেখতে পাচ্ছেন, এটি একটি অল-অর-নাথিং (all-or-nothing) অপারেশন। আপনি কতগুলো টোকেন অনুমোদন করবেন বা এমনকি কোন টোকেন ক্লাস তা নির্ধারণ করতে পারবেন না।

এটি ইচ্ছাকৃতভাবে সরলতার কথা মাথায় রেখে ডিজাইন করা হয়েছে। আপনি শুধুমাত্র একটি এডড্রেস-এর জন্য সবকিছু অনুমোদন করতে পারেন।

রিসিভ হুক

1function onERC1155BatchReceived(
2 address _operator,
3 address _from,
4 uint256[] calldata _ids,
5 uint256[] calldata _values,
6 bytes calldata _data
7) external returns(bytes4);

EIP-165 (opens 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) দেখুন।

নিরাপদ ট্রান্সফার নিয়ম

আমরা পূর্ববর্তী ব্যাখ্যাগুলোতে ইতিমধ্যে কয়েকটি নিরাপদ ট্রান্সফার নিয়ম নিয়ে আলোচনা করেছি। তবে চলুন সবচেয়ে গুরুত্বপূর্ণ নিয়মগুলো দেখি:

  1. কলারকে (caller) _from এডড্রেস-এর জন্য টোকেন খরচ করার অনুমোদন থাকতে হবে অথবা কলারকে _from-এর সমান হতে হবে।
  2. ট্রান্সফার কলটি অবশ্যই রিভার্ট (revert) হবে যদি
    1. _to এডড্রেস 0 হয়।
    2. _ids-এর দৈর্ঘ্য _values-এর দৈর্ঘ্যের সমান না হয়।
    3. _ids-এ থাকা টোকেন(গুলোর) জন্য হোল্ডার(দের) যেকোনো ব্যালেন্স প্রাপকের কাছে পাঠানো _values-এর সংশ্লিষ্ট পরিমাণ(গুলোর) চেয়ে কম হয়।
    4. অন্য কোনো ত্রুটি ঘটে।

দ্রষ্টব্য: হুকসহ সমস্ত ব্যাচ ফাংশন ব্যাচ ছাড়া সংস্করণ হিসেবেও বিদ্যমান। এটি গ্যাস দক্ষতার জন্য করা হয়েছে, কারণ শুধুমাত্র একটি অ্যাসেট ট্রান্সফার করাই সম্ভবত সবচেয়ে বেশি ব্যবহৃত উপায় হবে। নিরাপদ ট্রান্সফার নিয়মসহ ব্যাখ্যাগুলোতে সরলতার জন্য আমরা সেগুলোকে বাদ দিয়েছি। নামগুলো অভিন্ন, শুধু 'Batch' শব্দটি সরিয়ে দিন।

আরও পড়ুন

এই আর্টিকেলটি কি সহায়ক ছিল?