Token-utvidelser
Pausable, Burnable
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.
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
- Hvorfor OpenZeppelin
- Tilgangskontroll
- Token-utvidelser
- Oppgraderbare kontrakter