Kiwango cha Tokeni ya Kulipwa cha ERC-1363
Ukurasa ulihaririwa mwisho: 4 Aprili 2025
Utangulizi
ERC-1363 ni nini?
ERC-1363 ni kiolesura cha upanuzi kwa tokeni za ERC-20 ambacho kinawezesha utekelezaji wa mantiki maalum kwenye mkataba wa mpokeaji baada ya uhamisho, au kwenye mkataba wa mtumiaji baada ya idhini, yote ndani ya muamala mmoja.
Tofauti kutoka ERC-20
Operesheni za kawaida za ERC-20 kama transfer, transferFrom na approve, haziruhusu utekelezaji wa msimbo kwenye mkataba wa mpokeaji au mtumiaji bila muamala tofauti.
Hii inaleta ugumu katika uundaji wa UI na kikwazo katika utumiaji kwa sababu watumiaji lazima wasubiri muamala wa kwanza utekelezwe na kisha wawasilishe wa pili.
Lazima pia walipe GAS mara mbili.
ERC-1363 inafanya tokeni zinazoweza kubadilishwa kuwa na uwezo wa kutekeleza vitendo kwa urahisi zaidi na kufanya kazi bila kutumia msikilizaji yeyote wa nje ya mnyororo. Inaruhusu kufanya mwitikio kwenye mkataba wa mpokeaji au mtumiaji, baada ya uhamisho au idhini, katika muamala mmoja.
Mahitaji ya awali
Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza usome kwanza kuhusu:
Mwili
ERC-1363 inaleta API ya kawaida kwa tokeni za ERC-20 ili kuingiliana na mikataba-erevu baada ya transfer, transferFrom au approve.
Kiwango hiki kinatoa utendaji wa msingi wa kuhamisha tokeni, pamoja na kuruhusu tokeni kuidhinishwa ili ziweze kutumiwa na mhusika mwingine wa tatu kwenye mnyororo, na kisha kufanya mwitikio kwenye mkataba wa mpokeaji au mtumiaji.
Kuna matumizi mengi yaliyopendekezwa ya mikataba-erevu ambayo inaweza kukubali mwitikio wa ERC-20.
Mifano inaweza kuwa:
- Crowdsales: tokeni zilizotumwa huchochea ugawaji wa zawadi papo hapo.
- Huduma: malipo huwasha ufikiaji wa huduma kwa hatua moja.
- Ankara: tokeni hulipa ankara kiotomatiki.
- Usajili: kuidhinisha kiwango cha mwaka huwasha usajili ndani ya malipo ya mwezi wa kwanza.
Kwa sababu hizi hapo awali iliitwa "Tokeni ya Kulipwa".
Tabia ya mwitikio hupanua zaidi manufaa yake, na kuwezesha mwingiliano usio na mshono kama vile:
- Kusimamisha: tokeni zilizohamishwa huchochea kufungwa kiotomatiki katika mkataba wa kusimamisha.
- Kupiga kura: tokeni zilizopokewa husajili kura katika mfumo wa utawala.
- Kubadilisha: idhini za tokeni huwasha mantiki ya kubadilisha kwa hatua moja.
Tokeni za ERC-1363 zinaweza kutumika kwa manufaa maalum katika visa vyote vinavyohitaji mwitikio kutekelezwa baada ya uhamisho au idhini kupokewa. ERC-1363 pia ni muhimu kwa kuepuka upotevu wa tokeni au kufungiwa kwa tokeni katika mikataba-erevu kwa kuthibitisha uwezo wa mpokeaji kushughulikia tokeni.
Tofauti na mapendekezo mengine ya upanuzi wa ERC-20, ERC-1363 haibatilishi mbinu za ERC-20 transfer na transferFrom na inafafanua Vitambulisho vya violesura vitakavyotekelezwa huku ikidumisha uoanifu nyuma na ERC-20.
Kutoka EIP-1363opens in a new tab:
Mbinu
Mikataba-erevu inayotekeleza kiwango cha ERC-1363 LAZIMA itekeleze kazi zote katika kiolesura cha ERC1363, pamoja na violesura vya ERC20 na ERC165.
1pragma solidity ^0.8.0;23/**4 * @title ERC13635 * @dev Kiolesura cha upanuzi kwa tokeni za ERC-20 ambacho kinawezesha utekelezaji wa msimbo kwenye mkataba wa mpokeaji6 * baada ya `transfer` au `transferFrom`, au msimbo kwenye mkataba wa mtumiaji baada ya `approve`, katika muamala mmoja.7 */8interface ERC1363 is ERC20, ERC165 {9 /*10 * KUMBUKA: kitambulisho cha ERC-165 kwa kiolesura hiki ni 0xb0202a11.11 * 0xb0202a11 ===12 * bytes4(keccak256('transferAndCall(address,uint256)')) ^13 * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^14 * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^15 * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^16 * bytes4(keccak256('approveAndCall(address,uint256)')) ^17 * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))18 */1920 /**21 * @dev Huhamisha kiasi cha `value` cha tokeni kutoka kwa akaunti ya mwitaji hadi `to`22 * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`.23 * @param to Anwani ambayo tokeni zinahamishiwa.24 * @param value Kiasi cha tokeni kitakachohamishwa.25 * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu.26 */27 function transferAndCall(address to, uint256 value) external returns (bool);2829 /**30 * @dev Huhamisha kiasi cha `value` cha tokeni kutoka kwa akaunti ya mwitaji hadi `to`31 * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`.32 * @param to Anwani ambayo tokeni zinahamishiwa.33 * @param value Kiasi cha tokeni kitakachohamishwa.34 * @param data Data ya ziada isiyo na umbizo maalum, iliyotumwa katika wito kwa `to`.35 * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu.36 */37 function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);3839 /**40 * @dev Huhamisha kiasi cha `value` cha tokeni kutoka `from` kwenda `to` kwa kutumia utaratibu wa posho41 * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`.42 * @param from Anwani ambayo tokeni zinatumwa kutoka.43 * @param to Anwani ambayo tokeni zinahamishiwa.44 * @param value Kiasi cha tokeni kitakachohamishwa.45 * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu.46 */47 function transferFromAndCall(address from, address to, uint256 value) external returns (bool);4849 /**50 * @dev Huhamisha kiasi cha `value` cha tokeni kutoka `from` kwenda `to` kwa kutumia utaratibu wa posho51 * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`.52 * @param from Anwani ambayo tokeni zinatumwa kutoka.53 * @param to Anwani ambayo tokeni zinahamishiwa.54 * @param value Kiasi cha tokeni kitakachohamishwa.55 * @param data Data ya ziada isiyo na umbizo maalum, iliyotumwa katika wito kwa `to`.56 * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu.57 */58 function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);5960 /**61 * @dev Huweka kiasi cha `value` cha tokeni kama posho ya `spender` juu ya tokeni za mwitaji62 * kisha huita `ERC1363Spender::onApprovalReceived` kwenye `spender`.63 * @param spender Anwani itakayotumia fedha.64 * @param value Kiasi cha tokeni kitakachotumiwa.65 * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu.66 */67 function approveAndCall(address spender, uint256 value) external returns (bool);6869 /**70 * @dev Huweka kiasi cha `value` cha tokeni kama posho ya `spender` juu ya tokeni za mwitaji71 * kisha huita `ERC1363Spender::onApprovalReceived` kwenye `spender`.72 * @param spender Anwani itakayotumia fedha.73 * @param value Kiasi cha tokeni kitakachotumiwa.74 * @param data Data ya ziada isiyo na umbizo maalum, iliyotumwa katika wito kwa `spender`.75 * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu.76 */77 function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);78}7980interface ERC20 {81 event Transfer(address indexed from, address indexed to, uint256 value);82 event Approval(address indexed owner, address indexed spender, uint256 value);83 function transfer(address to, uint256 value) external returns (bool);84 function transferFrom(address from, address to, uint256 value) external returns (bool);85 function approve(address spender, uint256 value) external returns (bool);86 function totalSupply() external view returns (uint256);87 function balanceOf(address account) external view returns (uint256);88 function allowance(address owner, address spender) external view returns (uint256);89}9091interface ERC165 {92 function supportsInterface(bytes4 interfaceId) external view returns (bool);93}Onyesha yoteMkataba-erevu unaotaka kukubali tokeni za ERC-1363 kupitia transferAndCall au transferFromAndCall LAZIMA utekeleze kiolesura cha ERC1363Receiver:
1/**2 * @title ERC1363Receiver3 * @dev Kiolesura cha mkataba wowote unaotaka kusaidia `transferAndCall` au `transferFromAndCall` kutoka kwa mikataba ya tokeni ya ERC-1363.4 */5interface ERC1363Receiver {6 /**7 * @dev Wakati wowote tokeni za ERC-1363 zinapohamishiwa kwenye mkataba huu kupitia `ERC1363::transferAndCall` au `ERC1363::transferFromAndCall`8 * na `operator` kutoka `from`, kazi hii inaitwa.9 *10 * KUMBUKA: Ili kukubali uhamisho, ni lazima hii irudishe11 * `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))`12 * (yaani 0x88a7ca5c, au kiteuzi chake cha kazi).13 *14 * @param operator Anwani iliyoita kazi ya `transferAndCall` au `transferFromAndCall`.15 * @param from Anwani ambayo tokeni zinahamishwa kutoka.16 * @param value Kiasi cha tokeni zilizohamishwa.17 * @param data Data ya ziada isiyo na umbizo maalum.18 * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` ikiwa uhamisho unaruhusiwa isipokuwa kama kuna hitilafu.19 */20 function onTransferReceived(address operator, address from, uint256 value, bytes calldata data) external returns (bytes4);21}Onyesha yoteMkataba-erevu unaotaka kukubali tokeni za ERC-1363 kupitia approveAndCall LAZIMA utekeleze kiolesura cha ERC1363Spender:
1/**2 * @title ERC1363Spender3 * @dev Kiolesura cha mkataba wowote unaotaka kusaidia `approveAndCall` kutoka kwa mikataba ya tokeni ya ERC-1363.4 */5interface ERC1363Spender {6 /**7 * @dev Wakati wowote `mmiliki` wa tokeni za ERC-1363 anapoidhinisha mkataba huu kupitia `ERC1363::approveAndCall`8 * kutumia tokeni zao, kazi hii inaitwa.9 *10 * KUMBUKA: Ili kukubali idhini, hii lazima irudishe11 * `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))`12 * (yaani 0x7b04a2d0, au kiteuzi chake cha kazi).13 *14 * @param owner Anwani iliyoita kazi ya `approveAndCall` na iliyomiliki tokeni hapo awali.15 * @param value Kiasi cha tokeni kitakachotumiwa.16 * @param data Data ya ziada isiyo na umbizo maalum.17 * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` ikiwa idhini inaruhusiwa isipokuwa kama kuna hitilafu.18 */19 function onApprovalReceived(address owner, uint256 value, bytes calldata data) external returns (bytes4);20}Onyesha yote