Grunderna i Web3- och DApp-utveckling · Lektion

Tokenutökningar

Pausable, Burnable

Lektion 3 av 413 steg

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.
Gratis att börja

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

  1. Varför OpenZeppelin
  2. Åtkomstkontroll
  3. Tokenutökningar
  4. Uppgraderbara kontrakt
← Tillbaka till Grunderna i Web3- och DApp-utveckling