Blockchain-smart contracts met Solidity · Les

Statevariabelen en opslagindeling

Krijg inzicht in het verschil tussen storage, memory en calldata en in hoe statevariabelen op de blockchain behouden blijven.

Les 1 van 412 stappen

Statevariabelen en opslagindeling is een gratis Blockchain-smart contracts met Solidity-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Blockchain-smart contracts met Solidity. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Blockchain-smart contracts met Solidity bevat in totaal 4 lessen.

Wat zijn toestandsvariabelen?

Welkom bij de uitleg over hoe gegevens op de blockchain worden opgeslagen! In Solidity zijn toestandsvariabelen speciale variabelen waarvan de waarden permanent worden opgeslagen in de opslag van het contract op de blockchain.

Zie ze als het permanente geheugen van je smart contract. Hun waarden blijven bewaard nadat een functie is uitgevoerd en tijdens verschillende transacties.

Gegevenslocaties in Solidity

Solidity gebruikt verschillende gegevenslocaties om te bepalen waar informatie tijdens de uitvoering van een contract wordt opgeslagen. Deze locaties hebben grote gevolgen voor de gaskosten en voor de manier waarop je variabelen zich gedragen.

  • storage: Permanente toestand op de blockchain.
  • memory: Tijdelijke gegevens voor de uitvoering van functies.
  • calldata: Alleen-lezengegevens voor argumenten van externe functies.

Diepgaande uitleg van `storage`

Variabelen die op contractniveau worden gedeclareerd (buiten elke functie) krijgen automatisch de locatie storage. Dit zijn de toestandsvariabelen van je contract.

Gegevens in storage zijn duur om te wijzigen, omdat elke wijziging naar de blockchain wordt geschreven. Daardoor zijn ze permanent en onveranderlijk (wat hun geschiedenis betreft).

`storage` in actie

Dit contract slaat een getal op in een toestandsvariabele. Let erop hoe myNumber zijn waarde behoudt tussen aanroepen van setNumber en getNumber.

pragma solidity ^0.8.0;

contract StorageExample {
    uint public myNumber; // This is a state variable, lives in storage

    function setNumber(uint _num) public {
        myNumber = _num;
    }

    function getNumber() public view returns (uint) {
        return myNumber;
    }
}

`memory` begrijpen

memory is een tijdelijke gegevenslocatie. Deze wordt gebruikt voor variabelen die alleen tijdens een functieaanroep bestaan en worden verwijderd zodra de uitvoering van de functie is voltooid.

Voor tijdelijke gegevens is dit goedkoper dan storage, waardoor het ideaal is voor arrays, tekenreeksen of structs die binnen één functie worden aangemaakt en gebruikt.

`memory` in actie

Deze functie maakt een tekenreeks aan in memory, wijzigt deze en retourneert hem. De tekenreeks bestaat alleen zolang de functieaanroep duurt.

pragma solidity ^0.8.0;

contract MemoryExample {
    function greet(string memory _name) public pure returns (string memory) {
        string memory greeting = "Hello, ";
        // Use abi.encodePacked for simple string concatenation
        return string(abi.encodePacked(greeting, _name, "!"));
    }
}

Introductie van `calldata`

calldata is een speciale alleen-lezengegevenslocatie die uitsluitend wordt gebruikt voor parameters van externe functies. Deze is zelfs goedkoper dan memory, omdat de gegevens niet naar het geheugen worden gekopieerd, maar alleen worden doorverwezen.

Je kunt calldata niet wijzigen. Deze wordt doorgaans gebruikt voor grote hoeveelheden gegevens die aan externe functies worden doorgegeven, omdat je gas bespaart door kopieën te vermijden.

`calldata` in actie

Deze externe functie gebruikt een tekenreeks als calldata. Let op dat deze alleen-lezen en efficiënt is voor externe aanroepen.

pragma solidity ^0.8.0;

contract CalldataExample {
    // This function can only be called externally
    function processData(bytes calldata _data) external pure returns (uint) {
        // You cannot modify _data directly, but can read its properties
        return _data.length; // Returns the byte length of the data
    }

    // Another example returning calldata directly
    function echoString(string calldata _message) external pure returns (string calldata) {
        return _message;
    }
}

Gegevenslocaties vergelijken

De juiste gegevenslocatie kiezen is cruciaal voor gasoptimalisatie en correct contractgedrag:

  • Storage: Permanente, dure contractstatus.
  • Memory: Tijdelijke, goedkopere variabelen binnen een functie.
  • Calldata: Alleen-lezen, goedkoopste optie voor argumenten van externe functies.

Gebruik altijd de meest beperkte en goedkoopste optie die mogelijk is.

Hoe storage is georganiseerd

Solidity verpakt statusvariabelen in storage-slots van 256 bits (32 bytes) om ruimte en gas te besparen. Kleinere typen (zoals uint8 en bool) kunnen samen in één slot worden geplaatst.

Deze verpakking kan echter complex zijn en hangt af van de volgorde waarin variabelen worden gedeclareerd. Als je dit begrijpt, kun je gaskosten optimaliseren, vooral bij structs en arrays.

Quiz over gegevenslocaties

Welke gegevenslocatie wordt gebruikt voor permanente opslag van de statusvariabelen van een contract op de blockchain?

Samenvatting van gegevenslocaties

Goed gedaan! Je hebt de fundamentele gegevenslocaties in Solidity geleerd: storage, memory en calldata.

  • Statusvariabelen staan in storage, waardoor ze persistent zijn.
  • memory is bedoeld voor tijdelijke gegevens tijdens de uitvoering van een functie.
  • calldata is bedoeld voor efficiënte, alleen-lezenargumenten van externe functies.

Als je deze locaties begrijpt, kun je efficiëntere en correctere smart contracts schrijven. Vervolgens bekijken we complexe gegevensstructuren, zoals Mappings en Dynamic Arrays!

Gratis beginnen

Leer Blockchain-smart contracts met Solidity met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Statevariabelen en opslagindeling” gratis?

Ja — de volledige tekst van “Statevariabelen en opslagindeling” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Blockchain-smart contracts met Solidity wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Blockchain-smart contracts met Solidity bevat in totaal 4 lessen.

Wat leer ik in “Statevariabelen en opslagindeling”?

Krijg inzicht in het verschil tussen storage, memory en calldata en in hoe statevariabelen op de blockchain behouden blijven. Je oefent met Blockchain-smart contracts met Solidity door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Blockchain-smart contracts met Solidity te beginnen?

Ervaring vooraf is niet nodig. Blockchain-smart contracts met Solidity op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Statevariabelen en opslagindeling”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Blockchain-smart contracts met Solidity?

Ja. Elke les over Blockchain-smart contracts met Solidity bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Statevariabelen en opslagindeling
  2. Mappings en dynamische arrays
  3. Events en logging van gegevens
  4. Storage slots en gasoptimalisatie
← Terug naar Blockchain-smart contracts met Solidity