مرکزی مواد پر جائیں
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 میں واحد فرق یہ ہے کہ ہم ویلیوز کو ایک ایرے کے طور پر پاس کرتے ہیں اور ہم ids کی بھی ایک ایرے پاس کرتے ہیں۔ مثال کے طور پر اگر ids=[3, 6, 13] اور values=[100, 200, 5] دیا گیا ہو، تو نتیجے میں ہونے والی منتقلی یہ ہوگی:

  1. 100 ٹوکنز جن کی id 3 ہے، انہیں _from سے _to میں منتقل کریں۔
  2. 200 ٹوکنز جن کی id 6 ہے، انہیں _from سے _to میں منتقل کریں۔
  3. 5 ٹوکنز جن کی id 13 ہے، انہیں _from سے _to میں منتقل کریں۔

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);

بیلنس کال کے لیے اس سے بھی آسان، ہم ایک ہی کال میں متعدد بیلنس حاصل کر سکتے ہیں۔ ہم مالکان کی ایرے پاس کرتے ہیں، جس کے بعد ٹوکن ids کی ایرے ہوتی ہے۔

مثال کے طور پر اگر _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. کال کرنے والے کو _from ایڈریس کے لیے ٹوکن خرچ کرنے کی منظوری ہونی چاہیے یا کال کرنے والا _from کے برابر ہونا چاہیے۔
  2. ٹرانسفر کال کو ریورٹ (revert) ہونا چاہیے اگر
    1. _to ایڈریس 0 ہے۔
    2. _ids کی لمبائی _values کی لمبائی کے برابر نہیں ہے۔
    3. _ids میں موجود ٹوکن(ز) کے لیے ہولڈر(ز) کا کوئی بھی بیلنس وصول کنندہ کو بھیجی گئی _values میں متعلقہ رقم(رقوم) سے کم ہے۔
    4. کوئی اور خرابی پیش آتی ہے۔

نوٹ: ہک سمیت تمام بیچ فنکشنز بغیر بیچ والے ورژنز کے طور پر بھی موجود ہیں۔ یہ گیس کی کارکردگی کے لیے کیا گیا ہے، اس بات پر غور کرتے ہوئے کہ صرف ایک اثاثہ منتقل کرنا ممکنہ طور پر اب بھی سب سے زیادہ استعمال ہونے والا طریقہ ہوگا۔ ہم نے انہیں وضاحتوں میں سادگی کے لیے چھوڑ دیا ہے، بشمول محفوظ منتقلی کے اصول۔ نام ایک جیسے ہیں، بس 'Batch' کو ہٹا دیں۔

مزید مطالعہ

کیا یہ مضمون مددگار تھا؟