Inleiding tot smart contracts
Laatst bewerkt: @wackerow(opens in a new tab), 22 april 2024
Wat is een smart contract?
Een "smart contract" is eenvoudigweg een programma dat wordt uitgevoerd op de Ethereum-blockchain. Het is een verzameling code (de functies) en gegevens (de status) die zich op een specifiek adres op de Ethereum-blockchain bevindt.
Smart contracts zijn een soort Ethereum-account. Dit betekent dat ze een saldo hebben en het doel kunnen zijn van transacties. Ze worden echter niet aangestuurd door een gebruiker, maar worden ingezet op het netwerk en werken zoals geprogrammeerd. Gebruikersaccounts kunnen dan interactie hebben met een smart contract door transacties in te dienen die een functie uitvoeren die op het smart contract is gedefinieerd. Smart contracts kunnen regels definiëren, zoals een normaal contract, en deze automatisch afdwingen via de code. Smart contracts kunnen standaard niet worden verwijderd en interacties ermee zijn onomkeerbaar.
Vereisten
Als u nog maar net begint of op zoek bent naar een minder technische inleiding, raden we u onze inleiding tot smart contracts aan.
Zorg ervoor dat u alles heeft gelezen over accounts, transacties en de Ethereum virtual machine voordat u in de wereld van smart contracts stapt.
Een digitale verkoopautomaat
Misschien is de beste metafoor voor een smart contract wel een verkoopautomaat, zoals beschreven door Nick Szabo(opens in a new tab). Met de juiste input is een bepaalde output gegarandeerd.
Om een snack uit een verkoopautomaat te halen:
1money + snack selection = snack dispensed
Deze logica zit in de verkoopautomaat geprogrammeerd.
Een smart contract heeft, net als een verkoopautomaat, logica in zich geprogrammeerd. Hier is een eenvoudig voorbeeld van hoe deze verkoopautomaat eruit zou kunnen zien als het een smart contract was dat in Solidity is geschreven:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Declare state variables of the contract6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // When 'VendingMachine' contract is deployed:10 // 1. set the deploying address as the owner of the contract11 // 2. set the deployed smart contract's cupcake balance to 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Allow the owner to increase the smart contract's cupcake balance18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Allow anyone to purchase cupcakes24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}Toon alleKopiëren
Net zoals een verkoopautomaat de behoefte aan een fysieke verkoper wegneemt, kunnen smart contracts tussenpersonen in veel industrieën vervangen.
Toestemmingsvrij
Iedereen kan een smart contract schrijven en het inzetten op het netwerk. U hoeft alleen maar te leren programmeren in een smart contract-taal en genoeg ETH te hebben om uw contract in te zetten. Een smart contract inzetten is technisch gezien een transactie, dus moet u gas betalen op dezelfde manier als u gas moet betalen voor een eenvoudige ETH-overdracht. De gaskosten voor het inzetten van een contract liggen echter veel hoger.
Ethereum heeft ontwikkelaarsvriendelijke talen om smart contracts te schrijven:
- Solidity
- Vyper
Ze moeten echter worden gecompileerd voordat ze kunnen worden ingezet, zodat de virtual machine van Ethereum het contract kan interpreteren en opslaan. Meer over compilatie
Composbiliteit
Slimme contracten zijn openbaar op Ethereum en kunnen worden gezien als open API's. Dit betekent dat u andere smart contracts kunt oproepen in uw eigen smart contract om de mogelijkheden enorm uit te breiden. Contracten kunnen zelfs andere contracten inzetten.
Ontdek meer over componeerbaarheid van smart contracts.
Beperkingen
Enkel smart contracts kunnen geen informatie krijgen over gebeurtenissen in de "echte wereld" omdat ze geen gegevens kunnen ophalen uit bronnen buiten de chain. Dit betekent dat ze niet kunnen reageren op gebeurtenissen in de echte wereld. Dit is zo bedoeld. Vertrouwen op externe informatie kan de consensus ondermijnen, wat belangrijk is voor veiligheid en decentralisatie.
Het is echter belangrijk voor blockchain-applicaties om gegevens buiten de chain om te kunnen gebruiken. De oplossing is oracles, wat tools zijn die buiten de chain om gegevens opnemen en beschikbaar maken voor smart contracts.
Een andere beperking van smart contracts is de maximale contractgrootte. Een smart contract kan maximaal 24 KB groot zijn, anders geraakt het gas op. Dit kan omzeild worden door het ruitpatroon(opens in a new tab) te gebruiken.
Multisig-contracten
Multisig (multiple-signature) contracten zijn smart contract-accounts die verschillende geldige handtekeningen vereisen om een transactie uit te voeren. Dit is erg handig om single points of failure te vermijden voor contracten die aanzienlijke hoeveelheden ether of andere tokens bevatten. Multisigs verdelen ook de verantwoordelijkheid voor contractuitvoering en sleutelbeheer tussen verschillende partijen en voorkomen dat het verlies van een enkele persoonlijke sleutel leidt tot onomkeerbaar verlies van middelen. Om deze redenen kunnen multisig-contracten worden gebruikt voor eenvoudig DAO-bestuur. Multisigs vereisen N handtekeningen van de M mogelijke aanvaardbare handtekeningen (waarbij N ≤ M, en M > 1) om uitgevoerd te kunnen worden. N = 3, M = 5
en N = 4, M = 7
worden vaak gebruikt. Een 4/7 multisig vereist vier van de zeven mogelijke geldige handtekeningen. Dit betekent dat de middelen nog steeds opvraagbaar zijn, zelfs als er drie handtekeningen verloren gaan. In dit geval betekent het ook dat de meerderheid van de sleutelhouders moet instemmen en ondertekenen om het contract uit te voeren.
Bronnen smart contract
OpenZeppelin Contracts - Bibliotheek voor veilige ontwikkeling van smart contracts
- openzeppelin.com/contracts/(opens in a new tab)
- Github(opens in a new tab)
- Community-forum(opens in a new tab)