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

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

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

مثال کے طور پر _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' کو ہٹا دیں۔

مزید مطالعہ