ERC-20 Caighdeán Chomhartha
Eagarthóireacht dheireanach: @corwintines, 11 Meitheamh 2024
Réamhrá
Cad is Comhartha ann?
Is féidir le comharthaí ionadaíocht a dhéanamh ar bheagnach rud ar bith in Ethereum:
- pointí clú ar ardán ar líne
- scileanna carachtair i gcluiche
- sócmhainní airgeadais amhail scair i gcuideachta
- airgeadra fiat cosúil le USD
- unsa óir
- agus tuilleadh...
Nach mór gné chomh chumhachtach de Ethereum a láimhseáil le caighdeán láidir? Sin é go díreach an ról atá ag ERC-20! Ligeann an caighdeán seo d’fhorbróirí feidhmchláir chomharthaí a thógáil atá idir-inoibritheach le táirgí agus seirbhísí eile. Úsáidtear an caighdeán ERC-20 freisin chun feidhmiúlacht bhreise a sholáthar do .
Cad é ERC-20?
Tugann an ERC-20 isteach caighdeán le haghaidh Comharthaí Idirmhalartacha, i bhfocail eile, tá maoin acu a fhágann go bhfuil gach Comhartha go díreach mar an gcéanna (i gcineál agus luach) le Comhartha eile. Mar shampla, feidhmíonn Comhartha ERC-20 díreach cosúil leis an ETH, rud a chiallaíonn go bhfuil 1 Chomhartha cothrom i gcónaí le gach Comhartha eile.
Réamhriachtanais
Comhlacht
Is Caighdeán Comhartha é an ERC-20 (Iarratas Ethereum ar Thuairimí 20), a mhol Fabian Vogelsteller i mí na Samhna 2015. Cuireann sé API le haghaidh comharthaí laistigh de Chonarthaí Cliste i bhfeidhm.
Feidhmiúlachtaí samplacha a sholáthraíonn ERC-20:
- comharthaí a aistriú ó chuntas amháin go cuntas eile
- iarmhéid comharthaíochta reatha an chuntais a fháil
- soláthar iomlán an chomhartha atá ar fáil ar an líonra a fháil
- a cheadú cibé an féidir le cuntas tríú páirtí méid dearbhán ó chuntas a chaitheamh
Má chuireann Conradh Cliste na modhanna agus na himeachtaí seo a leanas i bhfeidhm is féidir Conradh Comhartha ERC-20 a thabhairt air agus, nuair a imscartar é, beidh sé freagrach as súil a choinneáil ar na comharthaí cruthaithe ar Ethereum.
Ó EIP-20:
Modhanna
1function name() public view returns (string)2function symbol() public view returns (string)3function decimals() public view returns (uint8)4function totalSupply() public view returns (uint256)5function balanceOf(address _owner) public view returns (uint256 balance)6function transfer(address _to, uint256 _value) public returns (bool success)7function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)8function approve(address _spender, uint256 _value) public returns (bool success)9function allowance(address _owner, address _spender) public view returns (uint256 remaining)Taispeáin gach rudCóip
Imeachtaí
1event Transfer(address indexed _from, address indexed _to, uint256 _value)2event Approval(address indexed _owner, address indexed _spender, uint256 _value)Cóip
Samplaí
Feicimis conas atá Caighdeán chomh tábhachtach chun go mbeadh sé simplí dúinn iniúchadh a dhéanamh ar aon Chonradh Chomhartha ERC-20 ar Ethereum. Níl uainn ach Comhéadan Dénártha Iarratas Conartha (ABI) chun comhéadan a chruthú d’aon Chomhartha ERC-20. Mar atá le feiceáil thíos bainfimid úsáid as ABI simplithe, chun sampla frithchuimilte íseal a dhéanamh de.
Sampla Web3.py
Ar dtús, déan cinnte go bhfuil Web3.py leabharlann Python suiteáilte agat:
1pip install web3
1from web3 import Web3234w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))56dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI7weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Wrapped ether (WETH)89acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 21011# This is a simplified Contract Application Binary Interface (ABI) of an ERC-20 Token Contract.12# It will expose only the methods: balanceOf(address), decimals(), symbol() and totalSupply()13simplified_abi = [14 {15 'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}],16 'name': 'balanceOf',17 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],18 'stateMutability': 'view', 'type': 'function', 'constant': True19 },20 {21 'inputs': [],22 'name': 'decimals',23 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}],24 'stateMutability': 'view', 'type': 'function', 'constant': True25 },26 {27 'inputs': [],28 'name': 'symbol',29 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],30 'stateMutability': 'view', 'type': 'function', 'constant': True31 },32 {33 'inputs': [],34 'name': 'totalSupply',35 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],36 'stateMutability': 'view', 'type': 'function', 'constant': True37 }38]3940dai_contract = w3.eth.contract(address=w3.to_checksum_address(dai_token_addr), abi=simplified_abi)41symbol = dai_contract.functions.symbol().call()42decimals = dai_contract.functions.decimals().call()43totalSupply = dai_contract.functions.totalSupply().call() / 10**decimals44addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals4546# DAI47print("===== %s =====" % symbol)48print("Total Supply:", totalSupply)49print("Addr Balance:", addr_balance)5051weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi)52symbol = weth_contract.functions.symbol().call()53decimals = weth_contract.functions.decimals().call()54totalSupply = weth_contract.functions.totalSupply().call() / 10**decimals55addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals5657# WETH58print("===== %s =====" % symbol)59print("Total Supply:", totalSupply)60print("Addr Balance:", addr_balance)Taispeáin gach rudCóip
Saincheisteanna aitheanta
Saincheist ghlactha comhartha ERC-20
Nuair a sheoltar comharthaí ERC-20 chuig conradh cliste nach bhfuil deartha chun comharthaí ERC-20 a láimhseáil, is féidir na comharthaí sin a chailliúint go buan. Tarlaíonn sé seo toisc nach bhfuil an fheidhmiúlacht ag an gconradh fála chun na comharthaí isteach a aithint nó freagairt dóibh, agus níl aon mheicníocht sa chaighdeán ERC-20 chun fógra a thabhairt don chonradh fála faoi na comharthaí isteach. Is iad na príomhbhealaí a dtagann an cheist seo i gcrích ná trí:
- Meicníocht aistrithe comhartha
- Aistrítear comharthaí ERC-20 ag baint úsáide as na feidhmeanna aistrithe nó transferFrom
- Nuair a sheolann úsáideoir comharthaí chuig seoladh conartha ag baint úsáide as na feidhmeanna seo, aistrítear na comharthaí gan aird ar an bhfuil an conradh glactha deartha chun iad a láimhseáil
- Easpa fógra
- Ní fhaigheann an conradh fála fógra nó aisghlao go bhfuil comharthaí seolta chuige
- Mura bhfuil meicníocht ag an gconradh fála chun comharthaí a láimhseáil (m.sh. feidhm chúltaca nó feidhm thiomnaithe chun glacadh comharthaí a bhainistiú), tá na comharthaí i bhfostú go héifeachtach i seoladh an chonartha
- Gan láimhseáil ionsuite
- Ní áirítear i gcaighdeán ERC-20 feidhm shainordaitheach chun conarthaí a fháil le cur chun feidhme, rud a fhágann nach féidir le go leor conarthaí comharthaí isteach a bhainistiú i gceart
D'eascair roinnt caighdeán malartacha as an gceist seo ar nós ERC-223
Tuilleadh léitheoireachta
- EIP-20: Caighdeán Comhartha ERC-20
- OpenZeppelin - Comharthaí
- OpenZeppelin - ERC-20 Cur i bhfeidhm
- Ailceimic - Treoir maidir le Comharthaí Solidity ERC20