Web3:n ja DApp-sovellusten kehityksen perusteet · Oppitunti

Token-laajennukset

Pausable, Burnable.

Oppitunti 3/413 vaihetta

Token-laajennukset on ilmainen Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Web3:n ja DApp-sovellusten kehityksen perusteet-kurssilla on yhteensä 4 oppituntia.

Tokenien laajentaminen

Perusmuotoinen ERC-20 käsittelee vain siirtoja ja hyväksyntöjä. OpenZeppelin tarjoaa laajennuksia, jotka lisäävät ominaisuuksia perinnän avulla:

  • Pausable — jäädyttää siirrot hätätilanteissa.
  • Burnable — antaa haltijoiden tuhota tokeneita.
  • Capped — pakottaa enimmäistarjonnan.
  • Permit — mahdollistaa kaasumaksuttomat hyväksynnät allekirjoitusten avulla.

Yhdistäminen perinnän avulla

Yhdistäkää laajennukset luettelemalla useita kantasopimuksia:

import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; contract MyToken is ERC20, ERC20Burnable { constructor() ERC20("MyToken", "MTK") {} }
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";

contract MyToken is ERC20, ERC20Burnable {
    constructor() ERC20("MyToken", "MTK") {}
}

Burnable-tokenit

ERC20Burnable lisää kaksi funktiota:

  • burn(amount) — tuhoaa kutsujan omat tokenit.
  • burnFrom(account, amount) — polttaa tokeneita tililtä, joka on antanut teille siihen hyväksynnän.

Polttaminen vähentää totalSupply-arvoa, jota voidaan hyödyntää deflatorisissa mekanismeissa.

// holder destroys their tokens
token.burn(ethers.parseEther("100"));

Pausable-tokenit

ERC20Pausable mahdollistaa sen, että valtuutettu tili voi pysäyttää kaikki siirrot — tästä on hyötyä tietoturvapoikkeaman aikana:

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract MyToken is ERC20, ERC20Pausable, Ownable { function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } }
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyToken is ERC20, ERC20Pausable, Ownable {
    function pause() public onlyOwner { _pause(); }
    function unpause() public onlyOwner { _unpause(); }
}

Miten pysäyttäminen toimii

Pysäytettynä siirrot kumoutuvat virheellä EnforcedPause. Pausable-laajennus kytkeytyy tokenin sisäiseen siirtologiikkaan, joten transfer, transferFrom, minttaus ja polttaminen estetään, kunnes unpause kutsutaan.

Käyttäkää pysäytystä harkiten — se keskittää hallinnan.

Funktioristiriitojen ratkaiseminen

Kun kaksi kantaluokkaa määrittelee saman sisäisen hook-funktion, Solidity edellyttää, että ylikirjoitatte funktion ja määritätte järjestyksen:

function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Pausable) { super._update(from, to, value); }

Tämä kertoo kääntäjälle, miten perintähierarkia linearisoidaan.

function _update(address from, address to, uint256 value)
    internal override(ERC20, ERC20Pausable) {
    super._update(from, to, value);
}

Rajoitettu kokonaistarjonta

ERC20Capped asettaa käyttöönoton yhteydessä määritetyn ehdottoman enimmäistarjonnan:

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol"; contract MyToken is ERC20Capped { constructor() ERC20("MyToken", "MTK") ERC20Capped(1000000 * 10 ** 18) {} }

Kaikki minttaukset, jotka ylittäisivät enimmäismäärän, kumoutuvat.

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol";

contract MyToken is ERC20Capped {
    constructor()
        ERC20("MyToken", "MTK")
        ERC20Capped(1000000 * 10 ** 18) {}
}

Kaasuttomat hyväksynnät Permitillä

ERC20Permit mahdollistaa kulutuksen hyväksymisen ketjun ulkopuolisella allekirjoituksella sen sijaan, että käyttäjän pitäisi tehdä ketjussa approve-transaktio:

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; contract MyToken is ERC20, ERC20Permit { constructor() ERC20("MyToken", "MTK") ERC20Permit("MyToken") {} }

Tämä parantaa käyttökokemusta poistamalla yhden transaktion tarpeen.

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";

contract MyToken is ERC20, ERC20Permit {
    constructor()
        ERC20("MyToken", "MTK")
        ERC20Permit("MyToken") {}
}

Myös NFT-laajennukset

ERC-721:lle on vastaavia laajennuksia:

  • ERC721Enumerable — käy läpi kaikki tokenit.
  • ERC721URIStorage — tokenikohtaiset metadatan URI:t.
  • ERC721Burnable / ERC721Pausable — samat ideat kuin ERC-20:ssä.

Perinnän avulla tapahtuva koostaminen toimii samalla tavalla.

Koostakaa vain tarvitsemanne

Jokainen laajennus lisää koodia, kaasukustannuksia ja hyökkäyspinta-alaa. Sisällyttäkää vain ominaisuudet, joita tokeninne todella tarvitsee:

  • Harvemmat laajennukset tarkoittavat halvempaa käyttöönottoa ja pienempää hyökkäyspinta-alaa.
  • Dokumentoikaa, miksi kukin laajennus on mukana.

Votes-laajennus

ERC20Votes seuraa äänivallan historiaa ottamalla saldoista tilannekuvan jokaisessa lohkossa, mikä mahdollistaa ketjussa tapahtuvan hallinnon:

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";

Haltijat voivat delegoida äänensä, ja ehdotukset voivat kysyä aiemman äänivallan flash loan -manipulaation estämiseksi.

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";

Pikatarkistus

Testatkaa ymmärrystänne token-laajennuksista.

Kertaus

Opitte koostamaan tokenien ominaisuuksia laajennusten avulla.

  • Laajennukset lisäävät toiminnallisuutta moniperinnän avulla.
  • Burnable tuhoaa tokeneita; Capped rajoittaa enimmäistarjontaa.
  • Pausable jäädyttää siirrot hätätilanteissa.
  • Permit mahdollistaa kaasuttomat, allekirjoitukseen perustuvat hyväksynnät.
  • Ratkaiskaa hook-funktioiden ristiriidat ylikirjoittamalla ne, esimerkiksi _update, ja sisällyttäkää vain tarvitsemanne ominaisuudet.
Aloita maksutta

Opi Web3:n ja DApp-sovellusten kehityksen perusteet 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
29
Oppitunnit
105

Usein kysytyt kysymykset

Onko oppitunti ”Token-laajennukset” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Token-laajennukset”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Web3:n ja DApp-sovellusten kehityksen perusteet-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Token-laajennukset”?

Pausable, Burnable. Harjoittelet Web3:n ja DApp-sovellusten kehityksen perusteet-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Web3:n ja DApp-sovellusten kehityksen perusteet-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Web3:n ja DApp-sovellusten kehityksen perusteet-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Token-laajennukset”-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ä Web3:n ja DApp-sovellusten kehityksen perusteet-oppitunnilla?

Kyllä. Jokainen Web3:n ja DApp-sovellusten kehityksen perusteet-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

  1. Miksi OpenZeppelin
  2. Käyttöoikeuksien hallinta
  3. Token-laajennukset
  4. Päivitettävät sopimukset
← Takaisin: Web3:n ja DApp-sovellusten kehityksen perusteet