ERC-20 Token Szabvány
Bevezetés
Mi is az a token?
A tokenek gyakorlatilag bármit képviselhetnek az Ethereumon:
- reputációs pontokat egy online platformon
- egy karakter képességeit egy játékban
- lottó szelvényeket
- pénzügyi eszközöket, mint például részesedést egy cégben
- fiat valutát, mint az USD
- egy uncia aranyat
- és még sok más...
Egy ilyen erős Ethereum tulajdonságot egy szintén erős szabványnak kell kezelnie, igaz? És pontosan itt jön képbe az ERC-20 szerepe! Ez a szabvány lehetővé teszi a fejlesztők számára, hogy olyan token alkalmazásokat fejlesszenek, amelyek együttműködnek más termékekkel és szolgáltatásokkal.
Mi az az ERC-20?
Az ERC-20 bevezeti a Felcserélhető Token szabványt, vagyis a tokeneknek meg van az a tulajdonságuk, hogy minden egyes token pontosan ugyanaz (típusban és értékben), mint egy másik token. Például egy ERC-20 token úgy viselkedik, mint az ETH, vagyis 1 token egyenlő és egyenlő is marad az összes többi tokennel.
Előfeltételek
Törzs
Az ERC-20 (Ethereum Request for Comments 20), melyet Fabian Vogelsteller javasolt 2015 novemberében, egy Token Szabvány, mely egy API-t implementál a tokenek számára az okosszerződéseken belül.
Olyan funkcionalitásokat tartalmaz, mint a token átutalás egyik számláról a másikra vagy a token jelenlegi egyenlege az adott számlán valamint a teljes elérhető token mennyiség a hálózaton. Emellett vannak más más funkciók is, mint például annak jóváhagyása, hogy egy harmadik fél számlája elkölthessen egy bizonyos mennyiségű tokent az adott számláról.
Ha egy okosszerződés implementálja a következő metódusokat és eseményeket, akkor egy ERC-20 token szerződésnek lehet nevezni, és a telepítés után a létrejött tokenek számontartásáért lesz felelős az Ethereumon.
Az EIP-20-ból:
Metódusok
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)10Összes megjelenítéseMásolás
Események
1event Transfer(address indexed _from, address indexed _to, uint256 _value)2event Approval(address indexed _owner, address indexed _spender, uint256 _value)3Másolás
Példák
Nézzük meg, miért olyan fontos egy szabvány, hogy egyszerűbbé tegye számunkra azt, hogy bármely ERC-20 token szerződést megtekinthessük az Ethereumon. Csak a szerződés Application Binary Interface-ére (ABI) lesz szükség, hogy egy felületet készítsünk bármely ERC-20 tokennek. Ahogy lentebb látni fogod, egy egyszerűsített ABI-t használunk, hogy egy egyszerűbb példával éljünk.
Web3.py példa
Először győződj meg arról, hogy a Web3.py Python könyvtár telepítve van:
1$ pip install web32
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# Ez egy ERC-20 token szerződés egyszerűsített Application Binary Interface-e (ABI).12# Csak a következő metódusokat tartalmazza: balanceOf(address), decimals(), symbol() és 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.toChecksumAddress(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.toChecksumAddress(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)61Összes megjelenítéseMásolás
További olvasnivaló
- EIP-20: ERC-20 Token Szabvány
- OpenZeppelin - Tokenek
- OpenZeppelin - ERC-20 Implementáció
- ConsenSys - ERC-20 Implementáció