Grunnleggende om Web3- og DApp-utvikling · leksjon

Token-utvidelser

Pausable, Burnable

Leksjon 3 av 413 trinn

Token-utvidelser er en gratis leksjon i Grunnleggende om Web3- og DApp-utvikling på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende om Web3- og DApp-utvikling, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.

Utvide tokens

Grunnimplementasjonen av ERC-20 håndterer bare overføringer og godkjenninger. OpenZeppelin tilbyr utvidelser som legger til funksjoner gjennom arv:

  • Pausable — frys overføringer i nødstilfeller.
  • Burnable — la innehavere ødelegge tokens.
  • Capped — håndhev en maksimal forsyning.
  • Permit — godkjenninger uten gas fees ved hjelp av signaturer.

Kombinere gjennom arv

De kombinerer utvidelser ved å liste opp flere basiskontrakter:

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") {}
}

Tokens som kan brennes

ERC20Burnable legger til to funksjoner:

  • burn(amount) — ødelegger innringerens egne tokens.
  • burnFrom(account, amount) — brenner tokens fra en konto som har godkjent Dem.

Brenning reduserer totalSupply, noe som kan brukes til deflatorisk mekanikk.

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

Tokens som kan settes på pause

ERC20Pausable lar en autorisert konto stanse alle overføringer — nyttig under en sikkerhetshendelse:

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(); }
}

Slik fungerer pausefunksjonen

Når tokenet er satt på pause, feiler overføringer med EnforcedPause. Pausable-utvidelsen kobler seg inn i tokenets interne overføringslogikk, slik at transfer, transferFrom, minting og burning blokkeres frem til unpause kalles.

Bruk pausing med måte — det sentraliserer kontrollen.

Løse funksjonskonflikter

Når to foreldre definerer samme interne hook, krever Solidity at du overstyrer den og angir rekkefølgen:

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

Dette forteller kompilatoren hvordan arven skal lineariseres.

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

Begrenset forsyning

ERC20Capped håndhever en fast maksimal forsyning som angis ved utrulling:

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

All minting som ville overskredet grensen, feiler.

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

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

Gebyrfrie godkjenninger med Permit

ERC20Permit lar brukere godkjenne bruk av tokenene sine med en signatur utenfor kjeden, i stedet for en approve-transaksjon på kjeden:

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

Dette forbedrer brukeropplevelsen ved å fjerne behovet for én transaksjon.

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

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

Utvidelser for NFT-er også

ERC-721 har tilsvarende utvidelser:

  • ERC721Enumerable — iterer over alle tokenene.
  • ERC721URIStorage — metadata-URI-er for hvert token.
  • ERC721Burnable / ERC721Pausable — de samme ideene som for ERC-20.

Mønsteret med å sette sammen funksjonalitet gjennom arv er det samme.

Sett sammen bare det du trenger

Hver utvidelse tilfører kode, gasskostnader og en større angrepsflate. Ta bare med funksjonene tokenet faktisk trenger:

  • Færre utvidelser betyr billigere utrulling og en mindre angrepsflate.
  • Dokumenter hvorfor hver utvidelse er med.

Votes-utvidelsen

ERC20Votes sporer historisk stemmerett ved å ta øyeblikksbilder av saldoene i hver blokk, slik at styring på kjeden blir mulig:

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

Innehavere kan delegere stemmene sine, og forslag kan hente frem tidligere stemmerett for å hindre manipulering med flash-lån.

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

Kort test

Test forståelsen din av tokenutvidelser.

Oppsummering

Du har lært å sette sammen tokenfunksjoner med utvidelser.

  • Utvidelser tilfører funksjonalitet gjennom multippel arv.
  • Burnable ødelegger token; Capped håndhever maksimal forsyning.
  • Pausable fryser overføringer i nødsituasjoner.
  • Permit muliggjør gebyrfrie, signaturbaserte godkjenninger.
  • Løs konflikter mellom hook-er ved å overstyre dem, for eksempel _update, og ta bare med det du trenger.
Gratis å komme i gang

Lær deg Grunnleggende om Web3- og DApp-utvikling med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
29
Leksjoner
105

Ofte stilte spørsmål

Er leksjonen «Token-utvidelser» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om Web3- og DApp-utvikling, inkludert «Token-utvidelser», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.

Hva lærer jeg i «Token-utvidelser»?

Pausable, Burnable Du øver på Grunnleggende om Web3- og DApp-utvikling med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Grunnleggende om Web3- og DApp-utvikling?

Ingen tidligere erfaring er nødvendig. Grunnleggende om Web3- og DApp-utvikling på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Token-utvidelser»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Grunnleggende om Web3- og DApp-utvikling-leksjonen?

Ja. Alle Grunnleggende om Web3- og DApp-utvikling-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hvorfor OpenZeppelin
  2. Tilgangskontroll
  3. Token-utvidelser
  4. Oppgraderbare kontrakter
← Tilbake til Grunnleggende om Web3- og DApp-utvikling