Preskoči na glavno vsebino
Change page

Standard za žetone ERC-20

Nazadnje urejeno: @PeterKecman(opens in a new tab), 19. november 2023

Uvod

Kaj je žeton?

V Ethereumu lahko žetoni predstavljajo praktično karkoli:

  • točke ugleda na spletni platformi,
  • spretnosti osebe v igri,
  • loterijske srečke,
  • finančna sredstva, kot je delež v podjetju,
  • fiat valuto, kot je USD,
  • unčo zlata.
  • in drugo ...

Tako mogočna funkcionalnost Ethereuma mora biti upravljana z robustnim standardom, kajne? Točno to je področje, kjer ima ERC-20 svojo vlogo! Ta standard razvijalcem omogoča razvoj aplikacij žetonov, ki so interoperabilni z drugimi produkti in storitvami.

Kaj je ERC-20?

ERC-20 predstavlja standard za zamenljive žetone. Z drugimi besedami: žetoni imajo značilnost, ki vsak žeton naredi popolnoma identičen (po vrsti in vrednosti) drugemu žetonu. Na primer, žeton ERC-20 deluje enako kot ETH, kar pomeni, da je in vedno bo 1 žeton enak vsem drugim žetonom.

Predpogoji

  • Računi
  • Pametne pogodbe
  • Standardi za žetone

Jedro

ERC-20 (Zahteva Ethereum za komentarje 20), ki ga je novembra 2015 predlagal Fabian Vogelsteller, je standard za žetone, ki implementira API za žetone znotraj pametnih pogodb.

Primeri funkcionalnosti, ki jih zagotavlja ERC-20:

  • prenos žetonov z enega računa na drugega,
  • pridobitev trenutnega stanja žetonov računa,
  • pridobitev celotne zaloge žetona, dostopne na omrežju,
  • odobritev možnosti, da lahko količino žetona z enega računa porabi račun tretje osebe.

Če pametna pogodba implementira naslednje metode in dogodke, se lahko imenuje pogodba žetona ERC-20; in ko je enkrat uveljavljena, bo odgovorna za sledenje ustvarjenih žetonov na Ethereumu.

Od EIP-20(opens in a new tab):

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)
Prikaži vse
Kopiraj

Dogodki

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

Primeri

Oglejmo si, zakaj je standard tako pomemben za to, da poenostavi pregled katerekoli pogodbe žetona ERC-20 na Ethereumu. Za ustvarjanje vmesnika za katerikoli žeton ERC-20 potrebujemo le binarni vmesnik pogodbene aplikacije (ABI). Kot lahko vidite spodaj, bomo uporabili poenostavljen ABI, da bi ustvarili primer z nizkim trenjem.

Primer Web3.py

Najprej se prepričajte, da ste namestili knjižnico Web3.py(opens in a new tab) Python:

pip install web3
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 ether (WETH)
8
9acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2
10
11# 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': 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)
Prikaži vse
Kopiraj

Nadaljnje branje

Je bil ta članek uporaben?