Ana içeriğe geç
Change page

ERC-20 Token Standardı

Son düzenleme: @selcuk45(opens in a new tab), 11 Haziran 2024

Giriş

Token nedir?

Token'lar Ethereum'daki hemen hemen her şeyi temsil edebilir:

  • çevrimiçi bir platformdaki itibar puanları
  • bir oyundaki karakterin becerileri
  • şirket hissesi gibi finansal varlıklar
  • ABD Doları gibi itibari para birimi
  • ons altın
  • ve daha fazlası...

Ethereum'un bu kadar güçlü bir özelliği güçlü bir standart tarafından idare edilmeli, değil mi? ERC-20 tam da bu noktada devreye giriyor! Bu standart, geliştiricilerin diğer ürün ve servislerle uyumlu token uygulamaları inşa etmesini sağlar. ERC-20 standardı, 'e ek işlevsellik kazandırmak için de kullanılır.

ERC-20 nedir?

ERC-20, Değiştirilebilir Jetonlar için bir standart getirmiştir: Başka bir deyişle bunlar, her bir Jetonun (tür ve değer olarak) başka bir Jeton ile tamamen aynı olmasını sağlayan bir özelliğe sahiptir. Örnek olarak, bir ERC-20 Token'ı tıpkı ETH gibi davranır, yani 1 Token her zaman tüm diğer Token'lara eşit olur.

Ön Koşullar

  • Hesaplar
  • Akıllı Sözleşmeler
  • Token standartları

Şablon

Fabian Vogelsteller tarafından Kasım 2015'te önerilen ERC-20 (Ethereum Yorum Talebi 20), Akıllı Sözleşmeler içindeki token'lar için bir API sağlayan bir Token Standardıdır.

ERC-20'nin sağladığı örnek işlevler:

  • token'ları bir hesaptan diğerine aktarma
  • bir hesabın mevcut token bakiyesini alma
  • ağda mevcut olan token'ların toplam arzını alma
  • bir hesaptaki token miktarının bir üçüncü taraf hesabı tarafından harcanıp harcanamayacağını onaylama

Eğer bir Akıllı Sözleşme aşağıdaki metodları ve olayları uygularsa bir ERC-20 Token Sözleşmesi olarak çağrılabilir ve dağıtıldığı andan itibaren Ethereum'da oluşturulan token'ları takip etmekten sorumludur.

EIP-20(opens in a new tab)'den:

Yöntemler

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)
Tümünü göster
Kopyala

Olaylar

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

Örnekler

Ethereum'daki herhangi bir ERC-20 Token Sözleşmesini incelememizi basitleştirmek için bir Standart'ın ne kadar önemli olduğunu görelim. Herhangi bir ERC-20 token'a arayüz oluşturmak için sadece Sözleşme Uygulama İkili Arayüzü'ne (ABI) ihtiyacımız var. Aşağıda görebileceğiniz gibi az sürtünmeli bir örnek olması için basitleştirilmiş bir ABI kullanacağız.

Web3.py Örneği

İlk olarak, Web3.py(opens in a new tab) Python kütüphanesini kurduğunuzdan emin olun:

1pip 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.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**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.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**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)
Tümünü göster
Kopyala

Bilinen sorunlar

ERC-20 jeton alma sorunu

ERC-20 jetonları, ERC-20 jetonlarını işlemek üzere tasarlanmamış bir akıllı sözleşmeye gönderildiğinde kalıcı olarak kaybolabilir. Bunun nedeni, alıcı sözleşmesinin gelen jetonları tanıma veya yanıtlama işlevine sahip olmaması ve ERC-20 standardında alıcı sözleşmesini gelen jetonlar hakkında bilgilendirmek için bir mekanizmanın bulunmamasıdır. Bu sorunun başlıca ortaya çıkma şekilleri şunlardır:

  1. Jeton transfer mekanizması
  • ERC-20 jetonları, transfer veya transferFrom fonksiyonları kullanılarak transfer edilir
    • Bir kullanıcı bu fonksiyonları kullanarak bir sözleşme adresine jeton gönderdiğinde, alıcı sözleşmesinin bunları işlemek üzere tasarlanmış olup olmadığına bakılmaksızın jetonlar aktarılır
  1. Bildirim eksikliği
    • Alıcı sözleşmesi, kendisine jeton gönderildiğine dair bir bildirim veya geri arama almaz
    • Alıcı sözleşmesinde jetonları işlemek için bir mekanizma yoksa (örneğin, bir yedek fonksiyon veya jeton alımını yönetmek için özel bir fonksiyon), jetonlar sözleşme adresinde takılı kalır
  2. Yerleşik işlemenin olmaması
    • ERC-20 standardının sözleşmelerin uygulanması için zorunlu bir fonksiyon barındırmaması, birçok sözleşmenin gelen jetonları düzgün bir şekilde yönetememesine yol açar

Bu sorundan dolayı ERC-223 gibi bazı alternatif standartlar ortaya çıktı

daha fazla okuma

Diğer değiştirilebilir jeton standartları

  • ERC-223
  • ERC-777
  • ERC-4626 - Jetonlaştırılmış kasalar

Bu makale yararlı oldu mu?