Tokenutökningar
Pausable, Burnable
Tokenutökningar är en gratis lektion i Grunderna i Web3- och DApp-utveckling på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i Web3- och DApp-utveckling, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.
Utöka tokens
En grundläggande ERC-20 hanterar endast överföringar och godkännanden. OpenZeppelin tillhandahåller utökningar som lägger till funktioner genom arv:
- Pausable — frys överföringar i nödsituationer.
- Burnable — låt innehavare förstöra tokens.
- Capped — upprätthåll ett maximalt utbud.
- Permit — godkännanden utan gasavgift via signaturer.
Kombinera genom arv
Ni kombinerar utökningar genom att ange flera baskontrakt:
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-tokens
ERC20Burnable lägger till två funktioner:
burn(amount)— förstör anroparens egna tokens.burnFrom(account, amount)— bränner tokens från ett konto som har godkänt Er.
Att bränna tokens minskar totalSupply, vilket kan användas för deflationära mekanismer.
// holder destroys their tokens
token.burn(ethers.parseEther("100"));Pausbara tokens
ERC20Pausable låter ett auktoriserat konto stoppa alla överföringar – användbart vid en säkerhetsincident:
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(); }
}Så fungerar pausning
När tokenet är pausat misslyckas överföringar med EnforcedPause. Tillägget Pausable kopplar in sig i tokenets interna överföringslogik, så transfer, transferFrom, mintning och bränning blockeras tills unpause anropas.
Använd pausning sparsamt – den centraliserar kontrollen.
Lösa funktionskonflikter
När två baskontrakt definierar samma interna hook kräver Solidity att ni skriver över den och anger ordningen:
function _update(address from, address to, uint256 value)
internal override(ERC20, ERC20Pausable) {
super._update(from, to, value);
}Detta talar om för kompilatorn hur arvet ska linjäriseras.
function _update(address from, address to, uint256 value)
internal override(ERC20, ERC20Pausable) {
super._update(from, to, value);
}Begränsad total mängd
ERC20Capped verkställer en fast maximal mängd som anges vid distributionen:
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol";
contract MyToken is ERC20Capped {
constructor()
ERC20("MyToken", "MTK")
ERC20Capped(1000000 * 10 ** 18) {}
}All mintning som skulle överskrida gränsen misslyckas.
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol";
contract MyToken is ERC20Capped {
constructor()
ERC20("MyToken", "MTK")
ERC20Capped(1000000 * 10 ** 18) {}
}Gasfria godkännanden med Permit
ERC20Permit låter användare godkänna spendering med en signatur utanför blockkedjan i stället för en approve-transaktion på blockkedjan:
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
contract MyToken is ERC20, ERC20Permit {
constructor()
ERC20("MyToken", "MTK")
ERC20Permit("MyToken") {}
}Det förbättrar användarupplevelsen genom att ta bort en transaktion.
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
contract MyToken is ERC20, ERC20Permit {
constructor()
ERC20("MyToken", "MTK")
ERC20Permit("MyToken") {}
}Tillägg även för NFT:er
ERC-721 har motsvarande tillägg:
- ERC721Enumerable – iterera över alla token.
- ERC721URIStorage – metadata-URI:er per token.
- ERC721Burnable / ERC721Pausable – samma idéer som för ERC-20.
Mönstret med att komponera genom arv är detsamma.
Komponera bara det ni behöver
Varje tillägg ökar kodmängden, gaskostnaden och attackytan. Ta bara med de funktioner som tokenet faktiskt behöver:
- Färre tillägg innebär billigare distribution och en mindre attackyta.
- Dokumentera varför varje tillägg finns med.
Votes-tillägget
ERC20Votes spårar historisk rösträtt genom att ta en ögonblicksbild av saldon vid varje block, vilket möjliggör styrning på blockkedjan:
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";Innehavare kan delegera sina röster, och förslag kan hämta tidigare rösträtt för att förhindra manipulation med flashlån.
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";Snabbtest
Testa er förståelse av token-tillägg.
Sammanfattning
Ni har lärt er att komponera tokenfunktioner med tillägg.
- Tillägg lägger till beteende genom multipelt arv.
- Burnable förstör token; Capped verkställer en maximal mängd.
- Pausable fryser överföringar i nödsituationer.
- Permit möjliggör gasfria, signaturbaserade godkännanden.
- Lös hook-konflikter genom att skriva över dem, till exempel
_update, och ta bara med det ni behöver.
Lär dig Grunderna i Web3- och DApp-utveckling med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 29
- Lektioner
- 105
Vanliga frågor
Är lektionen ”Tokenutökningar” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i Web3- och DApp-utveckling, inklusive ”Tokenutökningar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.
Vad lär jag mig i ”Tokenutökningar”?
Pausable, Burnable Ni övar på Grunderna i Web3- och DApp-utveckling med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Grunderna i Web3- och DApp-utveckling?
Du behöver inga förkunskaper. Utbildningen i Grunderna i Web3- och DApp-utveckling på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Tokenutökningar”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Grunderna i Web3- och DApp-utveckling-lektionen?
Ja. Varje Grunderna i Web3- och DApp-utveckling-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Varför OpenZeppelin
- Åtkomstkontroll
- Tokenutökningar
- Uppgraderbara kontrakt