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=[3, 6, 13] اور values=[100, 200, 5] دیے گئے ہیں تو، نتیجے میں ہونے والی منتقلی یہ ہوں گی
_fromسے_toمیں 3 آئی ڈی والے 100 ٹوکنز کی منتقلی۔_fromسے_toمیں 6 آئی ڈی والے 200 ٹوکنز کی منتقلی۔_fromسے_toمیں 13 آئی ڈی والے 5 ٹوکنز کی منتقلی۔
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=[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 کے ذریعے پڑھا جا سکتا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں، یہ ایک آل-اور-نتھنگ آپریشن ہے۔ آپ یہ وضاحت نہیں کر سکتے کہ کتنے ٹوکنز کو منظور کرنا ہے یا یہاں تک کہ کس ٹوکن کلاس کو منظور کرنا ہے۔
یہ جان بوجھ کر سادگی کو ذہن میں رکھتے ہوئے ڈیزائن کیا گیا ہے۔ آپ صرف ایک ایڈریس کے لیے ہر چیز کو منظور کر سکتے ہیں۔
ریسیو ہک
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 کی وضاحت کر سکتے ہیں۔ کلائنٹس کے ذریعے یو آر ایل کو پڑھا اور اس میں ترمیم کی جا سکتی ہے، یہاں (opens in a new tab) دیکھیں۔
محفوظ منتقلی کا اصول
ہم نے پچھلی وضاحتوں میں پہلے ہی چند محفوظ منتقلی کے اصولوں پر بات کی ہے۔ لیکن آئیے سب سے اہم اصولوں پر ایک نظر ڈالتے ہیں:
- کالر کو
_fromایڈریس کے لیے ٹوکنز خرچ کرنے کی منظوری ہونی چاہیے یا کالر_fromکے برابر ہونا چاہیے۔ - ٹرانسفر کال کو ریورٹ ہو جانا چاہیے اگر
_toایڈریس 0 ہے۔_idsکی لمبائی_valuesکی لمبائی کے برابر نہیں ہے۔_idsمیں ٹوکن (ٹوکنز) کے لیے ہولڈر (ہولڈرز) کا کوئی بھی بیلنس وصول کنندہ کو بھیجی گئی_valuesمیں متعلقہ رقم (رقوم) سے کم ہے۔- کوئی اور خرابی ہوتی ہے۔
نوٹ: ہک سمیت تمام بیچ فنکشنز بغیر بیچ والے ورژن کے طور پر بھی موجود ہیں۔ یہ گیس کی کارکردگی کے لیے کیا جاتا ہے، اس بات پر غور کرتے ہوئے کہ صرف ایک اثاثہ کی منتقلی اب بھی سب سے زیادہ استعمال ہونے والا طریقہ ہوگا۔ ہم نے انہیں وضاحتوں میں سادگی کے لیے چھوڑ دیا ہے، بشمول محفوظ منتقلی کے قواعد۔ نام ایک جیسے ہیں، بس 'بیچ' کو ہٹا دیں۔