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 کے فنکشنز اور خصوصیات:
- بیچ ٹرانسفر: ایک ہی کال میں متعدد اثاثے منتقل کریں۔
- بیچ بیلنس: ایک ہی کال میں متعدد اثاثوں کا بیلنس حاصل کریں۔
- بیچ اپروول: کسی ایڈریس کے لیے تمام ٹوکنز منظور کریں۔
- ہکس: ٹوکنز وصول کرنے کا ہک۔
- NFT سپورٹ: اگر سپلائی صرف 1 ہے، تو اسے NFT کے طور پر سمجھیں۔
- محفوظ منتقلی کے اصول: محفوظ منتقلی کے لیے اصولوں کا مجموعہ۔
بیچ ٹرانسفرز
بیچ ٹرانسفر عام ERC-20 ٹرانسفرز کی طرح ہی کام کرتا ہے۔ آئیے عام ERC-20 transferFrom فنکشن پر نظر ڈالتے ہیں:
1// ERC-202function transferFrom(address from, address to, uint256 value) external returns (bool);34// ERC-11555function safeBatchTransferFrom(6 address _from,7 address _to,8 uint256[] calldata _ids,9 uint256[] calldata _values,10 bytes calldata _data11) external;سب دکھائیںERC-1155 میں واحد فرق یہ ہے کہ ہم ویلیوز کو ایک ایرے کے طور پر پاس کرتے ہیں اور ہم ids کی بھی ایک ایرے پاس کرتے ہیں۔ مثال کے طور پر اگر ids=[3, 6, 13] اور values=[100, 200, 5] دیا گیا ہو، تو نتیجے میں ہونے والی منتقلی یہ ہوگی:
- 100 ٹوکنز جن کی id 3 ہے، انہیں
_fromسے_toمیں منتقل کریں۔ - 200 ٹوکنز جن کی id 6 ہے، انہیں
_fromسے_toمیں منتقل کریں۔ - 5 ٹوکنز جن کی id 13 ہے، انہیں
_fromسے_toمیں منتقل کریں۔
ERC-1155 میں ہمارے پاس صرف transferFrom ہے، کوئی transfer نہیں ہے۔ اسے ایک عام transfer کی طرح استعمال کرنے کے لیے، بس from ایڈریس کو اس ایڈریس پر سیٹ کریں جو فنکشن کو کال کر رہا ہے۔
بیچ بیلنس
متعلقہ ERC-20 balanceOf کال کا بھی اسی طرح بیچ سپورٹ کے ساتھ ایک پارٹنر فنکشن ہے۔ یاد دہانی کے طور پر، یہ ERC-20 ورژن ہے:
1// ERC-202function balanceOf(address owner) external view returns (uint256);34// ERC-11555function balanceOfBatch(6 address[] calldata _owners,7 uint256[] calldata _ids8) 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-11552function setApprovalForAll(3 address _operator,4 bool _approved5) external;67function isApprovedForAll(8 address _owner,9 address _operator10) 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 _data7) 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) دیکھیں۔
محفوظ منتقلی کا اصول
ہم پچھلی وضاحتوں میں پہلے ہی کچھ محفوظ منتقلی کے اصولوں پر بات کر چکے ہیں۔ لیکن آئیے سب سے اہم اصولوں پر نظر ڈالتے ہیں:
- کال کرنے والے کو
_fromایڈریس کے لیے ٹوکن خرچ کرنے کی منظوری ہونی چاہیے یا کال کرنے والا_fromکے برابر ہونا چاہیے۔ - ٹرانسفر کال کو ریورٹ (revert) ہونا چاہیے اگر
_toایڈریس 0 ہے۔_idsکی لمبائی_valuesکی لمبائی کے برابر نہیں ہے۔_idsمیں موجود ٹوکن(ز) کے لیے ہولڈر(ز) کا کوئی بھی بیلنس وصول کنندہ کو بھیجی گئی_valuesمیں متعلقہ رقم(رقوم) سے کم ہے۔- کوئی اور خرابی پیش آتی ہے۔
نوٹ: ہک سمیت تمام بیچ فنکشنز بغیر بیچ والے ورژنز کے طور پر بھی موجود ہیں۔ یہ گیس کی کارکردگی کے لیے کیا گیا ہے، اس بات پر غور کرتے ہوئے کہ صرف ایک اثاثہ منتقل کرنا ممکنہ طور پر اب بھی سب سے زیادہ استعمال ہونے والا طریقہ ہوگا۔ ہم نے انہیں وضاحتوں میں سادگی کے لیے چھوڑ دیا ہے، بشمول محفوظ منتقلی کے اصول۔ نام ایک جیسے ہیں، بس 'Batch' کو ہٹا دیں۔