Ajută la actualizarea acestei pagini

🌏

Există o nouă versiune a acestei pagini, dar acum este doar în engleză. Ajută-ne să traducem cea mai recentă versiune.

Această pagină este incompletă. Dacă ești expert în acest subiect, te rugăm să editezi această pagină și s-o presari cu înțelepciune.

Token ERC-20 Standard

Ultima editare: , Invalid DateTime
Edit page

Introducere

Ce este un token?

Tokenurile pot reprezenta practic orice în Ethereum:

  • puncte de reputație într-o platformă online
  • abilități ale unui personaj într-un joc
  • bilete de loterie
  • active financiare cum ar fi o acțiune într-o întreprindere
  • o monedă fiat precum USD
  • o uncie de aur
  • și altele...

O caracteristică atât de puternică a lui Ethereum trebuie gestionată printr-un standard robust, nu? Exact aici ERC-20 își joacă rolul! Aceste standarde permit programatorilor să construiască aplicații token care sunt interoperabile cu alte produse și servicii.

Ce este ERC-20?

ERC-20 introduce un standard pentru tokenurile Fungibile, cu alte cuvinte, au o proprietate care face ca fiecare token să fie exact la fel (în tip și valoare) cu alt token. De exemplu, un token ERC-20 acționează exact ca ETH-ul, însemnând că 1 token este și va fi întotdeauna egal cu toate celelalte tokenuri.

Condiții prealabile

Conținut

ERC-20 (Cerere pentru comentarii Ethereum 20), propus de Fabian Vogelsteller în noiembrie 2015, este un standard de tokenuri care implementează un API pentru tokenuri în cadrul contractelor inteligente.

Oferă funcționalități cum ar fi transferul de tokenuri dintr-un cont în altul, pentru a obține soldul actual al tokenurilor unui cont și de asemenea, furnizarea totalului de tokenuri disponibile în rețea. Pe lângă acestea, are și alte funcționalități cum ar fi să aprobe ca o sumă de tokenuri dintr-un cont să poată fi cheltuită de un cont terț.

Dacă un contract inteligent implementează următoarele metode și evenimente, poate fi numit contract token ERC-20 și, odată implementat, acesta va fi responsabil să țină evidența tokenelor create pe Ethereum.

De la EIP-20:

Metode

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
Afișează tot
📋 Copiere

Evenimente

1event Transfer(address indexed _from, address indexed _to, uint256 _value)
2event Approval(address indexed _owner, address indexed _spender, uint256 _value)
3
📋 Copiere

Exemple

Să vedem cum un standard este atât de important pentru a simplifica lucrurile pentru noi pentru a inspecta orice contract token ERC-20 pe Ethereum. Avem nevoie doar de Interfața binară aplicație (ABI) a contractului pentru a crea o interfață pentru orice token ERC-20. După cum poți să vezi mai jos, vom folosi un ABI simplificat, pentru a face exemplul ușor de înțeles.

Exemplu Web3.py

În primul rând, asigură-te că ai instalat librăria Python Web3.py:

1$ pip install web3
2
1from web3 import Web3
2
3
4w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))
5
6dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI
7weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Wrapped eter (WETH)
8
9acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2
10
11# Aceasta este o interfață binară simplificată pentru aplicația contractuală (ABI) a unui token Contract ERC-20.
12# Va expune doar metodele: 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': True
19 },
20 {
21 'inputs': [],
22 'name': 'decimals',
23 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}],
24 'stateMutability': 'view', 'type': 'function', 'constant': True
25 },
26 {
27 'inputs': [],
28 'name': 'symbol',
29 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
30 'stateMutability': 'view', 'type': 'function', 'constant': True
31 },
32 {
33 'inputs': [],
34 'name': 'totalSupply',
35 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
36 'stateMutability': 'view', 'type': 'function', 'constant': True
37 }
38]
39
40dai_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**decimals
44addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals
45
46# DAI
47print("===== %s =====" % symbol)
48print("Total Supply:", totalSupply)
49print("Addr Balance:", addr_balance)
50
51weth_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**decimals
55addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals
56
57# WETH
58print("===== %s =====" % symbol)
59print("Total Supply:", totalSupply)
60print("Addr Balance:", addr_balance)
61
Afișează tot
📋 Copiere

Referințe suplimentare

UrmătorERC-721
👉