اہم مواد پر جائیں
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=[3, 6, 13] اور values=[100, 200, 5] دیے گئے ہیں تو، نتیجے میں ہونے والی منتقلی یہ ہوں گی

  1. _from سے _to میں 3 آئی ڈی والے 100 ٹوکنز کی منتقلی۔
  2. _from سے _to میں 6 آئی ڈی والے 200 ٹوکنز کی منتقلی۔
  3. _from سے _to میں 13 آئی ڈی والے 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);

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

مثال کے طور پر، _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 کے ذریعے پڑھا جا سکتا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں، یہ ایک آل-اور-نتھنگ آپریشن ہے۔ آپ یہ وضاحت نہیں کر سکتے کہ کتنے ٹوکنز کو منظور کرنا ہے یا یہاں تک کہ کس ٹوکن کلاس کو منظور کرنا ہے۔

یہ جان بوجھ کر سادگی کو ذہن میں رکھتے ہوئے ڈیزائن کیا گیا ہے۔ آپ صرف ایک ایڈریس کے لیے ہر چیز کو منظور کر سکتے ہیں۔

ریسیو ہک

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 کی وضاحت کر سکتے ہیں۔ کلائنٹس کے ذریعے یو آر ایل کو پڑھا اور اس میں ترمیم کی جا سکتی ہے، یہاں (opens in a new tab) دیکھیں۔

محفوظ منتقلی کا اصول

ہم نے پچھلی وضاحتوں میں پہلے ہی چند محفوظ منتقلی کے اصولوں پر بات کی ہے۔ لیکن آئیے سب سے اہم اصولوں پر ایک نظر ڈالتے ہیں:

  1. کالر کو _from ایڈریس کے لیے ٹوکنز خرچ کرنے کی منظوری ہونی چاہیے یا کالر _from کے برابر ہونا چاہیے۔
  2. ٹرانسفر کال کو ریورٹ ہو جانا چاہیے اگر
    1. _to ایڈریس 0 ہے۔
    2. _ids کی لمبائی _values کی لمبائی کے برابر نہیں ہے۔
    3. _ids میں ٹوکن (ٹوکنز) کے لیے ہولڈر (ہولڈرز) کا کوئی بھی بیلنس وصول کنندہ کو بھیجی گئی _values میں متعلقہ رقم (رقوم) سے کم ہے۔
    4. کوئی اور خرابی ہوتی ہے۔

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

مزید پڑھیں

کیا یہ آرٹیکل کارآمد تھا؟