ERC-20-tokenin toteuttaminen
Kehitä ja ota käyttöön oma ERC-20-yhteensopiva tokenisi, mukaan lukien transfer-, approve- ja allowance-funktiot.
ERC-20-tokenin toteuttaminen on ilmainen Lohkoketjun älysopimukset Soliditylla-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Lohkoketjun älysopimukset Soliditylla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lohkoketjun älysopimukset Soliditylla-kurssilla on yhteensä 4 oppituntia.
Rakentakaa oma ERC-20-tokeninne
Tervetuloa! Tällä oppitunnilla opitte toteuttamaan oman ERC-20-standardin mukaisen tokeninne. Käsittelemme olennaiset funktiot ja muuttujat, joista tämä laajasti käytetty standardi koostuu.
Oppitunnin lopussa ymmärrätte perustasolla, miten nämä tokenit toimivat Ethereum-lohkoketjussa.
Tokenin tunnistetiedot: nimi, symboli ja desimaalit
Jokainen ERC-20-token tarvitsee perustason tunnistetiedot: nimen, symbolin ja desimaalit. Nämä ovat usein julkisia tilamuuttujia.
- name: Tokeninne koko nimi (esimerkiksi "MyCoddyToken").
- symbol: Lyhyt tunnussymboli (esimerkiksi "MCT").
- decimals: Kuinka moneksi desimaaliosaksi token voidaan jakaa (yleensä 18, kuten Ether).
Aloitetaan sopimuksemme näillä ominaisuuksilla:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18; // Common for ERC-20
}Kokonaistarjonta ja alustava luonti
totalSupply-muuttuja pitää kirjaa kaikista olemassa olevista tokeneista. Lisäksi tarvitsemme tavan tallentaa kunkin käyttäjän saldo, yleensä mapping-rakenteen avulla.
constructor on erityinen funktio, joka suoritetaan vain kerran sopimuksen käyttöönoton yhteydessä. Sen avulla asetamme alustavan totalSupply-arvon ja annamme kaikki aloitustokenit käyttöönoton suorittajan osoitteelle.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply; // Total tokens in existence
mapping(address => uint256) private _balances; // User balances
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply; // Mints to deployer
}
}Saldojen tarkistaminen: `balanceOf`
balanceOf-funktion avulla kuka tahansa voi kysellä tietyn osoitteen tokenisaldoa. Se on view-funktio, eli se ei muuta sopimuksen tilaa eikä sen kutsuminen ketjun ulkopuolelta maksa gasia.
Haemme saldon _balances-mapping-rakenteestamme.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
}Suorat siirrot: `transfer`
transfer-funktion avulla tokenien haltija voi lähettää tokeneita suoraan toiseen osoitteeseen. Se on ERC-20-standardin keskeinen funktio.
Ennen siirtoa on varmistettava, että lähettäjällä on riittävä saldo. Siirron jälkeen lähetämme Transfer-tapahtuman, joka on tärkeä lohkoketjuselaimille ja dAppeille tokenien siirtojen seuraamista varten.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
// ERC-20 events
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply); // Minting event
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
}Valtuutettu kulutus: `approve`
approve-funktion avulla tokenien haltija (owner) voi antaa toiselle osoitteelle (spender) luvan käyttää tietyn määrän tokeneitaan puolestaan.
Tämä on olennaista hajautettujen sovellusten (dApps) kanssa toimittaessa, kun haluatte esimerkiksi antaa älysopimuksen hallinnoida tokeneitanne steikkausta tai kaupankäyntiä varten. Tallennamme hyväksynnät _allowances-mapping-rakenteeseen.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances; // New: owner => (spender => amount)
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
}Sallitun määrän tarkistaminen: `allowance`
allowance-funktion avulla voitte tarkistaa, kuinka monta tokenia tietty spender saa tällä hetkellä siirtää owner-osoitteen saldosta.
Tämä on view-funktio balanceOf-funktion tapaan, ja sen avulla ulkoiset sovellukset ymmärtävät käyttäjien määrittämät kulutusrajat.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
}Kuluttaminen toisen puolesta: `transferFrom`
transferFrom-funktiota käyttää hyväksynnän saanut spender siirtääkseen tokeneita owner-osoitteen saldosta recipient-osoitteeseen.
Se edellyttää sekä lähettäjän saldon että myönnetyn sallitun määrän tarkistamista. Onnistuneen siirron jälkeen sallittua määrää vähennetään siirretyllä määrällä.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public returns (bool) {
require(_balances[sender] >= amount, "Insufficient balance from sender");
require(_allowances[sender][msg.sender] >= amount, "Insufficient allowance");
_allowances[sender][msg.sender] -= amount;
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
return true;
}
}Täydellinen minimaalinen ERC-20-toteutus
Tässä on täydellinen ja minimaalinen ERC-20-tokenisopimus. Vaikka kehittyneemmät toteutukset, kuten OpenZeppelinin toteutukset, sisältävät lisäominaisuuksia ja turvallisuustarkistuksia, tämä koodi kattaa kaikki standardin edellyttämät ydintoiminnot.
Voitte ottaa tämän sopimuksen käyttöön testiverkossa ja luoda oman toimivan tokeninne!
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public returns (bool) {
require(_balances[sender] >= amount, "Insufficient balance from sender");
require(_allowances[sender][msg.sender] >= amount, "Insufficient allowance");
_allowances[sender][msg.sender] -= amount;
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
return true;
}
}ERC-20-ydintoimintojen testi
Olette oppineet ERC-20-tokenin olennaiset funktiot. Testataan nyt tietonne!
Kertaus: oma tokeninne
Onnittelut! Olette nyt toteuttaneet ERC-20-tokenin keskeisen logiikan. Opitte määrittelemään sen ominaisuudet, hallinnoimaan kokonaistarjontaa ja yksittäisiä saldoja sekä mahdollistamaan tokenien suorat ja valtuutetut siirrot.
Näiden perusrakennuspalikoiden ymmärtäminen on tärkeää, kun työskentelette minkä tahansa Ethereum-lohkoketjun tokenin kanssa. Seuraavaksi voitte tutustua olemassa olevien ERC-20-kirjastojen integrointiin tai lisätä edistyneempiä ominaisuuksia!
Opi Lohkoketjun älysopimukset Soliditylla tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”ERC-20-tokenin toteuttaminen” ilmainen?
Kyllä – oppitunnin ”ERC-20-tokenin toteuttaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Lohkoketjun älysopimukset Soliditylla-kurssin, päivitä CoddyKit PROhon. Lohkoketjun älysopimukset Soliditylla-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”ERC-20-tokenin toteuttaminen”?
Kehitä ja ota käyttöön oma ERC-20-yhteensopiva tokenisi, mukaan lukien transfer-, approve- ja allowance-funktiot. Harjoittelet Lohkoketjun älysopimukset Soliditylla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lohkoketjun älysopimukset Soliditylla-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lohkoketjun älysopimukset Soliditylla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”ERC-20-tokenin toteuttaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lohkoketjun älysopimukset Soliditylla-oppitunnilla?
Kyllä. Jokainen Lohkoketjun älysopimukset Soliditylla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- ERC-20-standardin mukaiset vaihdettavat tokenit
- ERC-20-tokenin toteuttaminen
- ERC-721:n non-fungible tokenit (NFT:t)
- ERC-1155-monitehdastoken-standardi