اہم مواد پر جائیں
Change page

ERC-1363 قابل ادائیگی ٹوکن اسٹینڈرڈ

صفحہ کی آخری تازہ کاری: 4 اپریل، 2025

تعارف

ERC-1363 کیا ہے؟

ERC-1363، ERC-20 ٹوکنز کے لیے ایک ایکسٹینشن انٹرفیس ہے جو ٹرانسفرز کے بعد وصول کنندہ کنٹریکٹ پر، یا منظوریوں کے بعد خرچ کرنے والے کنٹریکٹ پر، ایک ہی ٹرانزیکشن کے اندر، کسٹم لاجک کو عمل میں لانے کی حمایت کرتا ہے۔

ERC-20 سے فرق

transfer، transferFrom اور approve جیسے معیاری ERC-20 آپریشنز، ایک الگ ٹرانزیکشن کے بغیر وصول کنندہ یا خرچ کرنے والے کنٹریکٹ پر کوڈ کے نفاذ کی اجازت نہیں دیتے۔ یہ UI کی ڈیولپمنٹ میں پیچیدگی اور اسے اپنانے میں رکاوٹ پیدا کرتا ہے کیونکہ صارفین کو پہلے ٹرانزیکشن کے نافذ ہونے کا انتظار کرنا پڑتا ہے اور پھر دوسرا جمع کرنا پڑتا ہے۔ انہیں دو بار GAS بھی ادا کرنا پڑتا ہے۔

ERC-1363 قابل تبادلہ ٹوکنز کو زیادہ آسانی سے کارروائیاں انجام دینے اور کسی بھی آف چین لسنسر کے استعمال کے بغیر کام کرنے کے قابل بناتا ہے۔ یہ ایک ہی ٹرانزیکشن میں، ٹرانسفر یا منظوری کے بعد، وصول کنندہ یا خرچ کرنے والے کنٹریکٹ پر کال بیک کرنے کی اجازت دیتا ہے۔

شرائط

اس صفحہ کو بہتر طور پر سمجھنے کے لیے، ہم تجویز کرتے ہیں کہ آپ پہلے اس کے بارے میں پڑھیں:

باڈی

ERC-1363، transfer، transferFrom یا approve کے بعد اسمارٹ کنٹریکٹس کے ساتھ تعامل کرنے کے لیے ERC-20 ٹوکنز کے لیے ایک معیاری API متعارف کراتا ہے۔

یہ معیار ٹوکنز کو منتقل کرنے کے لیے بنیادی فعالیت فراہم کرتا ہے، ساتھ ہی ٹوکنز کو منظور کرنے کی اجازت دیتا ہے تاکہ انہیں کسی دوسرے آن چین تیسرے فریق کے ذریعے خرچ کیا جا سکے، اور پھر وصول کنندہ یا خرچ کرنے والے کنٹریکٹ پر کال بیک کیا جا سکے۔

اسمارٹ کنٹریکٹس کے بہت سے مجوزہ استعمالات ہیں جو ERC-20 کال بیکس کو قبول کر سکتے ہیں۔

مثالیں یہ ہو سکتی ہیں:

  • کراؤڈ سیلز: بھیجے گئے ٹوکنز فوری انعام کی تقسیم کو متحرک کرتے ہیں۔
  • سروسز: ادائیگی ایک مرحلے میں سروس تک رسائی کو فعال کرتی ہے۔
  • انوائسز: ٹوکنز خود بخود انوائسز کو سیٹل کرتے ہیں۔
  • سبسکرپشنز: سالانہ شرح کی منظوری پہلے مہینے کی ادائیگی کے اندر سبسکرپشن کو فعال کرتی ہے۔

انہی وجوہات کی بنا پر اسے اصل میں "قابل ادائیگی ٹوکن" کا نام دیا گیا تھا۔

کال بیک کا رویہ اس کی افادیت کو مزید وسعت دیتا ہے، جس سے ہموار تعاملات ممکن ہوتے ہیں جیسے:

  • اسٹیکنگ: منتقل کیے گئے ٹوکنز اسٹیکنگ کنٹریکٹ میں خودکار لاکنگ کو متحرک کرتے ہیں۔
  • ووٹنگ: موصول ہونے والے ٹوکنز گورننس سسٹم میں ووٹ رجسٹر کرتے ہیں۔
  • سواپنگ: ٹوکن کی منظوریاں ایک ہی مرحلے میں سواپ لاجک کو فعال کرتی ہیں۔

ERC-1363 ٹوکنز ان تمام صورتوں میں مخصوص یوٹیلیٹیز کے لیے استعمال کیے جا سکتے ہیں جن میں ٹرانسفر یا منظوری موصول ہونے کے بعد کال بیک کو نافذ کرنے کی ضرورت ہوتی ہے۔ ERC-1363 وصول کنندہ کی ٹوکنز کو ہینڈل کرنے کی صلاحیت کی تصدیق کر کے اسمارٹ کنٹریکٹس میں ٹوکن کے نقصان یا ٹوکن لاکنگ سے بچنے کے لیے بھی مفید ہے۔

دیگر ERC-20 ایکسٹینشن تجاویز کے برعکس، ERC-1363، ERC-20 کے transfer اور transferFrom طریقوں کو اوور رائڈ نہیں کرتا ہے اور ERC-20 کے ساتھ پسماندہ مطابقت کو برقرار رکھتے ہوئے نافذ کیے جانے والے انٹرفیس IDs کی وضاحت کرتا ہے۔

EIP-1363opens in a new tab سے:

طریقے

ERC-1363 معیار کو نافذ کرنے والے اسمارٹ کنٹریکٹس کو ERC1363 انٹرفیس کے تمام فنکشنز کے ساتھ ساتھ ERC20 اور ERC165 انٹرفیسز کو بھی لازمی طور پر نافذ کرنا چاہیے۔

1pragma solidity ^0.8.0;
2
3/**
4 * @title ERC1363
5 * @dev ERC-20 ٹوکنز کے لیے ایک ایکسٹینشن انٹرفیس جو `transfer` یا `transferFrom` کے بعد وصول کنندہ کنٹریکٹ پر کوڈ کو نافذ کرنے، یا `approve` کے بعد خرچ کرنے والے کنٹریکٹ پر کوڈ کو نافذ کرنے کی حمایت کرتا ہے، ایک ہی ٹرانزیکشن میں۔
6 */
7interface ERC1363 is ERC20, ERC165 {
8 /*
9 * نوٹ: اس انٹرفیس کے لیے ERC-165 شناخت کنندہ 0xb0202a11 ہے۔
10 * 0xb0202a11 ===
11 * bytes4(keccak256('transferAndCall(address,uint256)')) ^
12 * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
13 * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
14 * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
15 * bytes4(keccak256('approveAndCall(address,uint256)')) ^
16 * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
17 */
18
19 /**
20 * @dev کالر کے اکاؤنٹ سے `to` میں `value` کی مقدار میں ٹوکنز منتقل کرتا ہے اور پھر `to` پر `ERC1363Receiver::onTransferReceived` کو کال کرتا ہے۔
21 * @param to وہ ایڈریس جس پر ٹوکنز منتقل کیے جا رہے ہیں۔
22 * @param value منتقل کیے جانے والے ٹوکنز کی مقدار۔
23 * @return ایک بولین ویلیو جو یہ بتاتی ہے کہ آپریشن کامیاب رہا جب تک کہ کوئی خرابی نہ ہو۔
24 */
25 function transferAndCall(address to, uint256 value) external returns (bool);
26
27 /**
28 * @dev کالر کے اکاؤنٹ سے `to` میں `value` کی مقدار میں ٹوکنز منتقل کرتا ہے اور پھر `to` پر `ERC1363Receiver::onTransferReceived` کو کال کرتا ہے۔
29 * @param to وہ ایڈریس جس پر ٹوکنز منتقل کیے جا رہے ہیں۔
30 * @param value منتقل کیے جانے والے ٹوکنز کی مقدار۔
31 * @param data بغیر کسی مخصوص فارمیٹ کے اضافی ڈیٹا، جو `to` کو کال میں بھیجا جاتا ہے۔
32 * @return ایک بولین ویلیو جو یہ بتاتی ہے کہ آپریشن کامیاب رہا جب تک کہ کوئی خرابی نہ ہو۔
33 */
34 function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
35
36 /**
37 * @dev الاؤنس میکانزم کا استعمال کرتے ہوئے `from` سے `to` میں `value` کی مقدار میں ٹوکنز منتقل کرتا ہے اور پھر `to` پر `ERC1363Receiver::onTransferReceived` کو کال کرتا ہے۔
38 * @param from وہ ایڈریس جہاں سے ٹوکنز بھیجنے ہیں۔
39 * @param to وہ ایڈریس جس پر ٹوکنز منتقل کیے جا رہے ہیں۔
40 * @param value منتقل کیے جانے والے ٹوکنز کی مقدار۔
41 * @return ایک بولین ویلیو جو یہ بتاتی ہے کہ آپریشن کامیاب رہا جب تک کہ کوئی خرابی نہ ہو۔
42 */
43 function transferFromAndCall(address from, address to, uint256 value) external returns (bool);
44
45 /**
46 * @dev الاؤنس میکانزم کا استعمال کرتے ہوئے `from` سے `to` میں `value` کی مقدار میں ٹوکنز منتقل کرتا ہے اور پھر `to` پر `ERC1363Receiver::onTransferReceived` کو کال کرتا ہے۔
47 * @param from وہ ایڈریس جہاں سے ٹوکنز بھیجنے ہیں۔
48 * @param to وہ ایڈریس جس پر ٹوکنز منتقل کیے جا رہے ہیں۔
49 * @param value منتقل کیے جانے والے ٹوکنز کی مقدار۔
50 * @param data بغیر کسی مخصوص فارمیٹ کے اضافی ڈیٹا، جو `to` کو کال میں بھیجا جاتا ہے۔
51 * @return ایک بولین ویلیو جو یہ بتاتی ہے کہ آپریشن کامیاب رہا جب تک کہ کوئی خرابی نہ ہو۔
52 */
53 function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);
54
55 /**
56 * @dev کالر کے ٹوکنز پر `spender` کے الاؤنس کے طور پر `value` کی مقدار میں ٹوکنز سیٹ کرتا ہے اور پھر `spender` پر `ERC1363Spender::onApprovalReceived` کو کال کرتا ہے۔
57 * @param spender وہ ایڈریس جو فنڈز خرچ کرے گا۔
58 * @param value خرچ کیے جانے والے ٹوکنز کی مقدار۔
59 * @return ایک بولین ویلیو جو یہ بتاتی ہے کہ آپریشن کامیاب رہا جب تک کہ کوئی خرابی نہ ہو۔
60 */
61 function approveAndCall(address spender, uint256 value) external returns (bool);
62
63 /**
64 * @dev کالر کے ٹوکنز پر `spender` کے الاؤنس کے طور پر `value` کی مقدار میں ٹوکنز سیٹ کرتا ہے اور پھر `spender` پر `ERC1363Spender::onApprovalReceived` کو کال کرتا ہے۔
65 * @param spender وہ ایڈریس جو فنڈز خرچ کرے گا۔
66 * @param value خرچ کیے جانے والے ٹوکنز کی مقدار۔
67 * @param data بغیر کسی مخصوص فارمیٹ کے اضافی ڈیٹا، جو `spender` کو کال میں بھیجا جاتا ہے۔
68 * @return ایک بولین ویلیو جو یہ بتاتی ہے کہ آپریشن کامیاب رہا جب تک کہ کوئی خرابی نہ ہو۔
69 */
70 function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
71}
72
73interface ERC20 {
74 event Transfer(address indexed from, address indexed to, uint256 value);
75 event Approval(address indexed owner, address indexed spender, uint256 value);
76 function transfer(address to, uint256 value) external returns (bool);
77 function transferFrom(address from, address to, uint256 value) external returns (bool);
78 function approve(address spender, uint256 value) external returns (bool);
79 function totalSupply() external view returns (uint256);
80 function balanceOf(address account) external view returns (uint256);
81 function allowance(address owner, address spender) external view returns (uint256);
82}
83
84interface ERC165 {
85 function supportsInterface(bytes4 interfaceId) external view returns (bool);
86}
سب دکھائیں

ایک اسمارٹ کنٹریکٹ جو transferAndCall یا transferFromAndCall کے ذریعے ERC-1363 ٹوکنز کو قبول کرنا چاہتا ہے اسے لازمی طور پر ERC1363Receiver انٹرفیس کو نافذ کرنا چاہیے:

1/**
2 * @title ERC1363Receiver
3 * @dev کسی بھی کنٹریکٹ کے لیے انٹرفیس جو ERC-1363 ٹوکن کنٹریکٹس سے `transferAndCall` یا `transferFromAndCall` کو سپورٹ کرنا چاہتا ہے۔
4 */
5interface ERC1363Receiver {
6 /**
7 * @dev جب بھی ERC-1363 ٹوکنز اس کنٹریکٹ میں `operator` کے ذریعے `from` سے `ERC1363::transferAndCall` یا `ERC1363::transferFromAndCall` کے ذریعے منتقل کیے جاتے ہیں، تو یہ فنکشن کال کیا جاتا ہے۔
8 *
9 * نوٹ: ٹرانسفر کو قبول کرنے کے لیے، اسے لازمی طور پر
10 * `bytes4(keccak256(\"onTransferReceived(address,address,uint256,bytes)\"))`
11 * (یعنی 0x88a7ca5c، یا اس کا اپنا فنکشن سلیکٹر) واپس کرنا چاہیے۔
12 *
13 * @param operator وہ ایڈریس جس نے `transferAndCall` یا `transferFromAndCall` فنکشن کو کال کیا۔
14 * @param from وہ ایڈریس جہاں سے ٹوکنز منتقل کیے گئے ہیں۔
15 * @param value منتقل کیے گئے ٹوکنز کی مقدار۔
16 * @param data بغیر کسی مخصوص فارمیٹ کے اضافی ڈیٹا۔
17 * @return `bytes4(keccak256(\"onTransferReceived(address,address,uint256,bytes)\"))` اگر ٹرانسفر کی اجازت ہو جب تک کہ کوئی خرابی نہ ہو۔
18 */
19 function onTransferReceived(address operator, address from, uint256 value, bytes calldata data) external returns (bytes4);
20}
سب دکھائیں

ایک اسمارٹ کنٹریکٹ جو approveAndCall کے ذریعے ERC-1363 ٹوکنز کو قبول کرنا چاہتا ہے اسے لازمی طور پر ERC1363Spender انٹرفیس کو نافذ کرنا چاہیے:

1/**
2 * @title ERC1363Spender
3 * @dev کسی بھی کنٹریکٹ کے لیے انٹرفیس جو ERC-1363 ٹوکن کنٹریکٹس سے `approveAndCall` کو سپورٹ کرنا چاہتا ہے۔
4 */
5interface ERC1363Spender {
6 /**
7 * @dev جب بھی کوئی ERC-1363 ٹوکنز کا `owner` اس کنٹریکٹ کو `ERC1363::approveAndCall` کے ذریعے اپنے ٹوکنز خرچ کرنے کی منظوری دیتا ہے، تو یہ فنکشن کال کیا جاتا ہے۔
8 *
9 * نوٹ: منظوری کو قبول کرنے کے لیے، اسے لازمی طور پر
10 * `bytes4(keccak256(\"onApprovalReceived(address,uint256,bytes)\"))`
11 * (یعنی 0x7b04a2d0، یا اس کا اپنا فنکشن سلیکٹر) واپس کرنا چاہیے۔
12 *
13 * @param owner وہ ایڈریس جس نے `approveAndCall` فنکشن کو کال کیا اور پہلے ٹوکنز کا مالک تھا۔
14 * @param value خرچ کیے جانے والے ٹوکنز کی مقدار۔
15 * @param data بغیر کسی مخصوص فارمیٹ کے اضافی ڈیٹا۔
16 * @return `bytes4(keccak256(\"onApprovalReceived(address,uint256,bytes)\"))` اگر منظوری کی اجازت ہو جب تک کہ کوئی خرابی نہ ہو۔
17 */
18 function onApprovalReceived(address owner, uint256 value, bytes calldata data) external returns (bytes4);
19}
سب دکھائیں

مزید پڑھیں

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