Skip to main content
Change page

Πρότυπο Ψηφιακού Στοιχείου ERC-20

Page last update: 11 Ιουνίου 2024

Εισαγωγή

Τι είναι ένα Ψηφιακό Στοιχείο;

Τα Ψηφιακά Στοιχεία μπορούν να αντιπροσωπεύουν σχεδόν τα πάντα στο Ethereum:

  • πόντους φήμης σε μια πλατφόρμα στο διαδίκτυο
  • ικανότητες του χαρακτήρα σε ένα παιχνίδι
  • χρηματοοικονομικά στοιχεία όπως μετοχές εταιρείας
  • ένα νόμισμα όπως το USD
  • μια ουγγιά χρυσού
  • και πολλά άλλα...

Ένα τόσο ισχυρό χαρακτηριστικό του Ethereum πρέπει να χειρίζεται από ένα ισχυρό πρότυπο; Αυτό είναι ακριβώς όπου το ERC-20 παίζει το ρόλο του! Αυτό το πρότυπο επιτρέπει στους προγραμματιστές να δημιουργούν εφαρμογές ψηφιακών στοιχείων που είναι διαλειτουργικές με άλλα προϊόντα και υπηρεσίες. Το πρότυπο ERC-20 χρησιμοποιείται επίσης για την παροχή πρόσθετης λειτουργικότητας στο .

Τι είναι το ERC-20;

Το ERC-20 εισάγει ένα πρότυπο για ανταλλάξιμα ψηφιακά στοιχεία, με άλλα λόγια, έχουν μια ιδιότητα που κάνει κάθε ψηφιακό στοιχείο να είναι ακριβώς το ίδιο (σε τύπο και αξία) με ένα άλλο. Για παράδειγμα, ένα ψηφιακό στοιχείο ERC-20 λειτουργεί ακριβώς όπως το ETH, που σημαίνει ότι 1 ψηφιακό στοιχείο ισούται και θα ισούται πάντα με όλα τα άλλα.

Προαπαιτούμενα

Κορμός

Το ERC-20 (Ethereum Request for Comments 20), που προτάθηκε από τον Fabian Vogelsteller τον Νοέμβριο του 2015, είναι ένα πρότυπο ψηφιακού στοιχείου που υλοποιεί ένα API για ψηφιακά στοιχεία εντός έξυπνων συμβολαίων.

Παραδείγματα λειτουργιών που παρέχει το ERC-20:

  • μεταφορά token από έναν λογαριασμό σε έναν άλλο
  • λήψη του τρέχοντος υπολοίπου token ενός λογαριασμού
  • Λήψη συνολικού κεφαλαίου του ψηφιακού στοιχείου που είναι διαθέσιμο στο δίκτυο
  • Έγκριση εάν ένα ποσό ψηφιακού στοιχείου ενός λογαριασμού μπορεί να δαπανηθεί από έναν τρίτο λογαριασμό

Εάν ένα έξυπνο συμβόλαιο εφαρμόζει τις ακόλουθες μεθόδους και συμβάντα μπορεί να ονομαστεί συμβόλαιο ψηφιακού στοιχείου ERC-20 και, όταν αναπτυχθεί, θα είναι υπεύθυνο για την παρακολούθηση των ψηφιακών στοιχείων που θα δημιουργηθούν στο Ethereum.

Από το EIP-20(opens in a new tab):

Μέθοδοι

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)
Εμφάνιση όλων

Συμβάντα

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

Παραδείγματα

Ας δούμε πώς ένα πρότυπο είναι τόσο σημαντικό για να μας διευκολύνει να επιθεωρήσουμε οποιοδήποτε έξυπνο συμβόλαιο ERC-20 Token στο Ethereum. Χρειαζόμαστε μόνο το Διασύνδεσμο Δυαδικού Κώδικα Εφαρμογής Συμβολαίου (ABI) για να δημιουργήσουμε μια διεπαφή σε οποιοδήποτε ERC-20 Token. Όπως μπορείτε να δείτε παρακάτω, θα χρησιμοποιήσουμε ένα απλοποιημένο ABI, για να το κάνουμε ένα παράδειγμα χαμηλής τριβής.

Παράδειγμα Web3.py

Αρχικά, βεβαιωθείτε ότι έχετε εγκαταστήσει τη βιβλιοθήκη της Python Web3.py(opens in a new tab):

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)
Εμφάνιση όλων

Γνωστά ζητήματα

Πρόβλημα λήψης αποδεικτικού ERC-20

Όταν αποστέλλονται token ERC-20 σε ένα έξυπνο συμβόλαιο που δεν έχει σχεδιαστεί να χειρίζεται token ERC-20, αυτά τα token μπορούν να χαθούν μόνιμα. Αυτό συμβαίνει επειδή το συμβαλλόμενο μέρος που λαμβάνει δεν έχει τη λειτουργικότητα να αναγνωρίζει ή να ανταποκρίνεται στα εισερχόμενα token και δεν υπάρχει μηχανισμός στο πρότυπο ERC-20 για να ειδοποιήσει το συμβαλλόμενο μέρος που λαμβάνει σχετικά με τα εισερχόμενα token. Οι κύριοι τρόποι με τους οποίους εμφανίζεται αυτό το ζήτημα είναι μέσω:

  1. Μηχανισμός μεταφοράς κρυπτονομισμάτων
  • Τα ψηφιακά στοιχεία ERC-20 μεταφέρονται χρησιμοποιώντας τις συναρτήσεις transfer ή transferFrom
    • Όταν ένας χρήστης στέλνει κρύπτο σε μια διεύθυνση συμβολαίου χρησιμοποιώντας αυτές τις συναρτήσεις, αυτά μεταφέρονται ανεξάρτητα από το εάν το συμβαλλόμενο μέρος που λαμβάνει έχει σχεδιαστεί για να τα χειρίζεται
  1. Έλλειψη ειδοποίησης
    • Το συμβαλλόμενο μέρος δε λαμβάνει ειδοποίηση ή ενημέρωση ότι του έχουν σταλεί ψηφιακά στοιχεία
    • Εάν το συμβαλλόμενο μέρος που λαμβάνει δε διαθέτει μηχανισμό για τη διαχείριση κρύπτο (π.χ. μια συνάρτηση fallback ή μια ειδική συνάρτηση για τη διαχείριση λήψης κρύπτο), τα ψηφιακά στοιχεία είναι ουσιαστικά κολλημένα στη διεύθυνση του συμβολαίου.
  2. Χωρίς ενσωματωμένη διαχείριση
    • Το πρότυπο ERC-20 δεν περιλαμβάνει υποχρεωτική συνάρτηση για την εφαρμογή συμβαλλόμενων μερών που λαμβάνουν, οδηγώντας σε μια κατάσταση όπου πολλά συμβόλαια δεν είναι σε θέση να διαχειρίζονται σωστά τα εισερχόμενα token

Μερικά εναλλακτικά πρότυπα προέκυψαν από αυτό το ζήτημα, όπως το ERC-223

Περισσότερες πληροφορίες

Άλλα πρότυπα ανταλλάξιμων ψηφιακών στοιχείων

Ήταν χρήσιμο αυτό το άρθρο;