Blokkjede-smartkontrakter med Solidity · leksjon

Modifikatorer og mønsteret Checks-Effects-Interactions

Bruk funksjonsmodifikatorer til å håndheve forhåndsbetingelser på en ryddig måte, og anvend mønsteret checks-effects-interactions for å skrive sikrere kontrakter.

Leksjon 4 av 413 trinn

Modifikatorer og mønsteret Checks-Effects-Interactions er en gratis leksjon i Blokkjede-smartkontrakter med Solidity på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Blokkjede-smartkontrakter med Solidity, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Blokkjede-smartkontrakter med Solidity inneholder totalt 4 leksjoner.

Hva er modifiers?

En modifier er gjenbrukbar kode som kjøres før eller rundt en funksjonskropp. Den egner seg godt til å håndheve forhåndsbetingelser, for eksempel tilgangskontroll, uten at de samme kontrollene må gjentas overalt.

Deklarere en modifier

Plassholderen _; markerer stedet der funksjonskroppen kjøres. Kode før den kjøres først, og kode etter den kjøres når funksjonen returnerer.

modifier onlyOwner() {
    require(msg.sender == owner, "Not owner");
    _;
}

Bruke en modifier

Knytt en modifier til en funksjonsdeklarasjon. Kontrollen kjøres automatisk ved hvert kall, slik at funksjonskroppen kan konsentrere seg om logikken.

function withdraw() public onlyOwner {
    payable(owner).transfer(address(this).balance);
}

Modifierer med parametere

Modifierer kan ta argumenter, noe som gjør dem fleksible for validering av dynamiske betingelser, for eksempel minimumsverdier.

modifier costs(uint price) {
    require(msg.value >= price, "Not enough");
    _;
}

Kombinere flere modifierer

Du kan bruke flere modifierer på én funksjon; de kjøres fra venstre mot høyre. Hold dem små og avgrenset til én oppgave, slik at kombinasjonene forblir forutsigbare.

function buy() public payable onlyWhenOpen costs(1 ether) {
    // ...
}

Faren ved reentrancy

Når en kontrakt kaller en ekstern adresse, kan adressen kalle tilbake inn i kontrakten før det første kallet er ferdig. Denne reentrancy kan tømme midler hvis tilstanden oppdateres for sent.

Checks-Effects-Interactions

Mønsteret checks-effects-interactions deler funksjonen inn i tre faser: valider inndata (checks), oppdater tilstanden (effects), og kall deretter eksterne kontrakter (interactions). Eksterne kall kommer sist.

En sårbar uttaksfunksjon

Dette sender ETH før saldoen settes til null, og etterlater et vindu for reentrancy.

// VULNERABLE
function withdraw() public {
    uint amt = balances[msg.sender];
    payable(msg.sender).call{value: amt}("");
    balances[msg.sender] = 0; // too late!
}

Den sikre versjonen

Oppdater tilstanden før det eksterne kallet, slik at et reentrant kall ser en saldo på null.

// SAFE
function withdraw() public {
    uint amt = balances[msg.sender];
    balances[msg.sender] = 0;   // effects first
    payable(msg.sender).call{value: amt}(""); // interaction last
}

Beskyttelse mot reentrancy

For ekstra sikkerhet kan du legge til en reentrancy guard-modifier som setter et låseflagg under kjøringen og avviser nestede kall. Biblioteker som OpenZeppelin tilbyr nonReentrant.

Kombinere mønstrene

Bruk modifierer i checks-fasen (tilgang og validering), strukturer kroppen som effects etterfulgt av interactions, og legg til en guard på funksjoner som flytter verdier. Til sammen utgjør de et solid grunnlag for beskyttelse.

Hurtigsjekk

Test kunnskapene dine om sikre kontraktsmønstre.

Oppsummering

Du har lært defensive Solidity-mønstre:

  • Modifierer sentraliserer forhåndsbetingelser som tilgangskontroll
  • De kan ta parametere og kombineres
  • Checks-effects-interactions setter funksjoner i en rekkefølge som hindrer reentrancy
  • Legg til en reentrancy guard på funksjoner som flytter verdier

Disse mønstrene er grunnleggende for å skrive sikre kontrakter.

Gratis å komme i gang

Lær deg Blokkjede-smartkontrakter med Solidity 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
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Modifikatorer og mønsteret Checks-Effects-Interactions» gratis?

Ja – hele teksten i «Modifikatorer og mønsteret Checks-Effects-Interactions» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Blokkjede-smartkontrakter med Solidity-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Blokkjede-smartkontrakter med Solidity inneholder totalt 4 leksjoner.

Hva lærer jeg i «Modifikatorer og mønsteret Checks-Effects-Interactions»?

Bruk funksjonsmodifikatorer til å håndheve forhåndsbetingelser på en ryddig måte, og anvend mønsteret checks-effects-interactions for å skrive sikrere kontrakter. Du øver på Blokkjede-smartkontrakter med Solidity 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 Blokkjede-smartkontrakter med Solidity?

Ingen tidligere erfaring er nødvendig. Blokkjede-smartkontrakter med Solidity 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 4 av 4.

Hvor lang tid tar leksjonen «Modifikatorer og mønsteret Checks-Effects-Interactions»?

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 Blokkjede-smartkontrakter med Solidity-leksjonen?

Ja. Alle Blokkjede-smartkontrakter med Solidity-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. Arv og grensesnitt
  2. Biblioteker og abstrakte kontrakter
  3. Feilhåndtering med Revert/Require
  4. Modifikatorer og mønsteret Checks-Effects-Interactions
← Tilbake til Blokkjede-smartkontrakter med Solidity