Oppgraderbare kontrakter
Forstå utfordringen med at kontrakter er uforanderlige, og lær mønstre som proxy-kontrakter for å muliggjøre oppgradering av distribuerte smartkontrakter.
Oppgraderbare kontrakter er en gratis leksjon i Grunnleggende om Web3- og DApp-utvikling på CoddyKit. Dette er leksjon 3 av 3. 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 3 leksjoner.
Kontraktenes uforanderlige natur
Når smartkontrakter først er rullet ut på en blokkjede, kan de ikke endres. Denne uforanderligheten er en viktig sikkerhetsfunksjon som sikrer at reglene ikke kan endres uventet.
Tenk på det som å hugge regler inn i stein – de ligger fast for all tid, noe som skaper tillit og forutsigbarhet i desentraliserte applikasjoner.
Hvorfor uforanderlighet kan være utfordrende
Selv om uforanderlighet gir sterk sikkerhet, skaper det også betydelige utfordringer for utviklere:
- Feilretting: Hva om det oppdages en kritisk feil etter utrullingen?
- Funksjonsoppdateringer: Hvordan legger De til ny funksjonalitet eller tilpasser løsningen til standarder i utvikling?
- Datamigrering: Uten en plan innebærer feilretting at De må rulle ut en helt ny kontrakt og migrere alle brukerdata, noe som ofte er komplekst og kostbart.
Introduksjon til oppgraderbare kontrakter
For å overvinne begrensningene ved uforanderlighet bruker utviklere mønstre for oppgraderbare kontrakter. Disse mønstrene gjør det mulig å oppdatere logikken i en smartkontrakt over tid.
Den vanligste fremgangsmåten innebærer en proxy-kontrakt som fungerer som et stabilt inngangspunkt, mens den faktiske forretningslogikken kan byttes ut.
Proxy-mønsteret: En oversikt
Se for Dem en stabil adresse (proxyen) som brukerne alltid samhandler med. Denne proxyen inneholder ikke hovedlogikken selv.
I stedet peker den på en annen kontrakt (logikkontrakten) som inneholder alle forretningsreglene. Når De vil oppgradere, oppdaterer De ganske enkelt proxyen slik at den peker på en ny logikkontrakt.
Hjernen: Logikkontrakten
Logikkontrakten (også kalt implementasjonskontrakten) inneholder alle funksjonene og tilstandsvariablene som definerer hvordan applikasjonen oppfører seg. Den rulles ut separat.
Her er et enkelt eksempel på en logikkontrakt. Legg merke til at den ser ut som en vanlig Solidity-kontrakt.
pragma solidity ^0.8.0;
contract MyLogicV1 {
uint public value;
function initialize(uint _initialValue) public {
value = _initialValue;
}
function increment() public {
value++;
}
function getVersion() public pure returns (string memory) {
return "Version 1.0";
}
}Ruteren: Proxy-kontrakten
Proxy-kontrakten er en enkel kontrakt som ikke endres. Hovedoppgaven er å motta alle kall fra brukerne og deretter «delegere» dem til den gjeldende logikkontrakten.
Brukerne samhandler bare med proxyens faste adresse. Det betyr at brukerens samhandlingspunkt aldri endres, selv når den underliggende logikken oppdateres.
Magien bak kulissene: delegatecall
Proxyen bruker en spesiell funksjon på lavt nivå kalt delegatecall. Denne funksjonen er nøkkelen til oppgraderbarhet.
delegatecall kjører kode fra logikkontrakten som om den var en del av proxy-kontrakten. Viktigst av alt bevarer den msg.sender, msg.value og storage i proxyen.
Sikre tilstanden: Lagringshåndtering
Med delegatecall ligger alle faktiske data (tilstanden) i proxy-kontraktens lagring. Logikkontrakten leverer ganske enkelt koden som brukes til å samhandle med lagringen.
Når De oppgraderer, samhandler den nye logikkontrakten med den samme proxy-lagringen. Dette sikrer at alle applikasjonens data bevares på tvers av oppgraderinger uten behov for migrering.
Hvorfor oppgradere? Viktige fordeler
Oppgraderbare kontrakter gir betydelige fordeler for langsiktige prosjekter og desentraliserte applikasjoner i utvikling:
- Feilretting: Rett raskt sikkerhetssårbarheter eller funksjonelle feil.
- Nye funksjoner: Introduser ny funksjonalitet uten en fullstendig ny utrulling.
- Tilpasning til standarder: Utvikle løsningen i takt med nye blokkjede-standarder eller beste praksis.
- Kostnadsbesparelser: Unngå kostbar datamigrering til nye kontrakter.
Oppgraderbarhet: Håndteres med forsiktighet
Selv om oppgraderbare kontrakter er kraftige, er de ikke uten risiko:
- Sentralisering: Muligheten til å oppgradere innebærer ofte at en sentral aktør (eller en multisignatur-lommebok) kontrollerer oppgraderingsnøkkelen.
- Kompleksitet: Proxy-mønsteret gjør kontraktarkitekturen mer kompleks.
- Sikkerhet: Feil implementasjon kan introdusere nye angrepsvektorer, noe som gjør grundige sikkerhetsrevisjoner avgjørende.
Det er avgjørende å bruke reviderte proxy-mønstre (som de fra OpenZeppelin) og sikre oppgraderingsmekanismer.
Test kunnskapene Deres
Hvilket av følgende beskriver best hovedårsaken til å bruke et mønster for oppgraderbare kontrakter?
Oppgraderbare kontrakter: Oppsummering
I denne leksjonen utforsket vi utfordringen med smartkontrakters uforanderlighet, og hvordan oppgraderbare mønstre gir en løsning.
De lærte om proxy-mønsteret, der en fast proxy-kontrakt delegerer kall til en endringsbar logikkontrakt ved hjelp av delegatecall, slik at tilstanden kan bevares på tvers av oppgraderinger.
Selv om oppgraderbare kontrakter gir stor fleksibilitet for vedlikehold og videreutvikling, må De huske å vurdere den økte kompleksiteten og den potensielle risikoen for sentralisering nøye.
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 «Oppgraderbare kontrakter» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om Web3- og DApp-utvikling, inkludert «Oppgraderbare kontrakter», 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 3 leksjoner.
Hva lærer jeg i «Oppgraderbare kontrakter»?
Forstå utfordringen med at kontrakter er uforanderlige, og lær mønstre som proxy-kontrakter for å muliggjøre oppgradering av distribuerte smartkontrakter. 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 3.
Hvor lang tid tar leksjonen «Oppgraderbare kontrakter»?
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
- ERC-standarder (ERC-20, ERC-721)
- Beste praksis for kontraktsikkerhet
- Oppgraderbare kontrakter