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

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

ভূমিকা

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

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

ধারণাটি সহজ এবং এটি এমন একটি স্মার্ট কন্ট্রাক্ট ইন্টারফেস তৈরি করতে চায় যা যেকোনো সংখ্যক বিনিমেয় এবং অবিনিমেয় টোকেন ধরনকে উপস্থাপন এবং নিয়ন্ত্রণ করতে পারে। এইভাবে, 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 ফাংশনটি দেখি:

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 সংস্করণ:

// ERC-20
function balanceOf(address owner) external view returns (uint256);

// ERC-1155
function balanceOfBatch(
    address[] calldata _owners,
    uint256[] calldata _ids
) external view returns (uint256[] memory);

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

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

[
    balanceOf(0xbeef...),
    balanceOf(0x1337...),
    balanceOf(0x1111...)
]

ব্যাচ অনুমোদন

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

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

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

রিসিভ হুক

function onERC1155BatchReceived(
    address _operator,
    address _from,
    uint256[] calldata _ids,
    uint256[] calldata _values,
    bytes calldata _data
) external returns(bytes4);

EIP-165 (opens in a new tab) সমর্থনের কারণে, ERC-1155 শুধুমাত্র স্মার্ট কন্ট্রাক্টগুলোর জন্য রিসিভ হুক সমর্থন করে। হুক ফাংশনটিকে অবশ্যই একটি ম্যাজিক পূর্বনির্ধারিত bytes4 মান প্রদান করতে হবে যা নিচে দেওয়া হলো:

bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))

যখন গ্রহণকারী কন্ট্রাক্ট এই মানটি প্রদান করে, তখন ধরে নেওয়া হয় যে কন্ট্রাক্টটি হস্তান্তর গ্রহণ করে এবং জানে কীভাবে ERC-1155 টোকেনগুলো পরিচালনা করতে হয়। দারুণ, কন্ট্রাক্টে আর কোনো আটকে থাকা টোকেন নেই!

NFT সমর্থন

যখন সরবরাহ শুধুমাত্র একটি হয়, তখন টোকেনটি মূলত একটি অবিনিমেয় টোকেন (NFT)। এবং ERC-721 এর স্ট্যান্ডার্ড অনুযায়ী, আপনি একটি মেটাডেটা URL সংজ্ঞায়িত করতে পারেন। URL-টি ক্লায়েন্টদের দ্বারা পড়া এবং পরিবর্তন করা যেতে পারে, এখানে (opens in a new tab) দেখুন।

নিরাপদ হস্তান্তরের নিয়ম

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

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

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

আরও পড়ুন