Wat is Solidity in blockchain? De programmeertaal van Ethereum
Solidity is de belangrijkste programmeertaal voor het schrijven van smart contracts op Ethereum en andere blockchains die de Ethereum Virtual Machine (EVM) gebruiken. De meeste tokens, decentrale exchanges en DeFi-apps die je vanuit een cryptowallet kunt gebruiken, zijn in Solidity geschreven.
Je hoeft Solidity niet te leren om crypto te kopen of aan te houden. Maar het verklaart waarom iedereen de code van een smart contract kan controleren, waarom bugs in die code gebruikers geld kunnen kosten, en waar je op moet letten voordat je een token vertrouwt.
Wat is Solidity in blockchain?
Solidity is een programmeertaal van hoog niveau, ontworpen voor het schrijven van smart contracts: programma’s die permanent op een blockchain zijn opgeslagen en precies draaien zoals ze geschreven zijn. Het is de belangrijkste taal van Ethereum en van de vele netwerken die het ontwerp van Ethereum kopiëren.
Het idee kwam in 2014 van Gavin Wood, een van de medeoprichters van Ethereum, en daarna werd de taal door het Ethereum-team ontwikkeld. Solidity is open source en verandert nog regelmatig: er komen nieuwe functies bij en oudere patronen verdwijnen. Heb je JavaScript, C++ of Python gebruikt, dan ziet Solidity-code er bekend uit: de taal gebruikt accolades, functies en variabelen, en ondersteunt overerving, zodat het ene contract op andere kan voortbouwen.
Drie kenmerken maken de programmeertaal Solidity anders dan talen voor algemeen gebruik:
- Contractgeoriënteerd. De basisbouwsteen is een contract, geen app. Een contract heeft zijn eigen data en geld, en andere contracten of wallets werken ermee via zijn adres.
- Statisch getypeerd. Elke variabele heeft een vast datatype, zoals een getal, een adres of een tekststring, en de Solidity-compiler controleert dat vóór het uitrollen.
- Gebouwd rond geld en gas. Ether versturen zit in de taal zelf, en elke bewerking kost gas, dus efficiënte code is goedkoper voor gebruikers.
Hoe Solidity-code draait op de Ethereum Virtual Machine
Solidity-code draait niet op één server. Een ontwikkelaar schrijft de code, de Solidity-compiler zet die om in bytecode, en die bytecode wordt op de blockchain opgeslagen, waar elke node in het peer-to-peernetwerk hem kan draaien in de Ethereum Virtual Machine (EVM).
De EVM is de runtime-omgeving die alle Ethereum-nodes delen. Als je een transactie naar een contract stuurt, voert elke node dezelfde functieaanroep uit met dezelfde invoer en moet die tot hetzelfde resultaat komen. Daarom zijn smart contracts voorspelbaar, en daarom kunnen ze ook geen website ophalen of een bestand lezen: alles wat ze gebruiken, moet op de chain staan of in de transactie worden meegestuurd.
Contracten uitrollen werkt als een speciale transactie. De maker van het contract stuurt de gecompileerde code naar het netwerk, betaalt kosten op basis van de gasprijs, en het contract krijgt een eigen, permanent adres. Nieuw uitgerolde contracten kunnen normaal gesproken niet worden aangepast. Ontwikkelaars die later wijzigingen willen doen, moeten daar vooraf rekening mee houden, bijvoorbeeld met een upgrademechanisme dat naar een nieuwe versie verwijst.
Waar data in Solidity staat
Solidity heeft regels voor waar data wordt bewaard, de data location. Waarden in de opslag van het contract worden naar de blockchain geschreven en blijven daar; waarden in het geheugen bestaan alleen zolang een functie draait. Schrijven naar de opslag kost veel meer gas, en dat is een van de redenen waarom zorgvuldige Solidity-code de opgeslagen data tot een minimum beperkt.
Een eenvoudig smart contract in Solidity
De meeste introducties beginnen met een eenvoudig smart contract dat één getal opslaat. Het bestand begint met twee standaardregels: een commentaar SPDX-License-Identifier dat de opensourcelicentie vermeldt, en een regel pragma solidity die aangeeft welke compilerversie de code nodig heeft.
Het contract zelf, vaak SimpleStorage genoemd, bevat dan:
- Een toestandsvariabele (state variable) zoals
uint256 storedNumber, een geheel getal dat in de opslag van het contract wordt bewaard. - Een functie
setdie iedereen kan aanroepen om dat getal te wijzigen. Die aanroep is een transactie, dus hij kost gas. - Een functie
get, gemarkeerd alspublic view returns (uint256), die het getal leest zonder iets te veranderen. Lezen is gratis als je het vanaf je eigen node of wallet-app doet.
Een iets groter klassiek voorbeeld is een eenvoudige munt. Die houdt een mapping bij van adressen naar openbare saldi, een address owner of minter die door de constructorcode wordt ingesteld als het contract wordt aangemaakt, een mintfunctie die alleen het adres van de maker mag aanroepen om nieuwe munten aan te maken, en een verzendfunctie voor een overdracht van munten tussen bestaande accounts. Elke ERC-20-token werkt met een uitgebreidere versie van hetzelfde idee.
Ontwikkeltools en frameworks
Solidity-ontwikkelaars werken zelden in een gewone teksteditor. Veelgebruikte ontwikkeltools zijn:
- Remix, een IDE in de browser waarin je Solidity smart contracts kunt schrijven, compileren en testen zonder iets te installeren.
- Ontwikkelframeworks zoals Hardhat en Foundry, waarmee ontwikkelaars contracten testen, de blockchain simuleren en smart contracts met scripts uitrollen. Hardhat gebruikt JavaScript-code voor tests; met Foundry schrijven ontwikkelaars tests in Solidity zelf.
- Gedeelde bibliotheken met geauditeerde bouwstenen, zoals standaardcontracten voor tokens, zodat teams code die met geld omgaat niet opnieuw hoeven uit te vinden.
Er bestaan ook andere talen. Vyper is een eenvoudigere taal voor de EVM die op Python lijkt, en andere blockchains gebruiken heel andere talen, zoals Rust op Solana. Maar voor smart contracts op Ethereum is Solidity veruit de meest gebruikte keuze.
Waarom Solidity voor jou telt
Solidity telt voor jou omdat de code bepaalt wat een token of DeFi-app met je geld kan doen, wat de website ook zegt. Op Ethereum kun je die code meestal lezen: blockexplorers tonen voor veel contractadressen de geverifieerde broncode.
Je hoeft die niet regel voor regel te lezen om een deel van die informatie te gebruiken:
- Wie kan minten? Als een owner-adres onbeperkt nieuwe tokens kan aanmaken, kan jouw aandeel op elk moment verwateren.
- Kunnen overdrachten worden geblokkeerd? Bij sommige contracten kan de eigenaar adressen bevriezen of de handel pauzeren. Dat is normaal bij gereguleerde stablecoins, maar een alarmsignaal bij een nieuwe memetoken.
- Is de code geverifieerd en geauditeerd? Niet-geverifieerde code is een waarschuwingssignaal. Een audit haalt het risico niet weg, maar betekent wel dat iemand de code op bekende fouten heeft gecontroleerd.
In de EU moet wie een nieuwe token aan het publiek aanbiedt onder MiCA in de regel een whitepaper publiceren. Dat document beschrijft het project, maar alleen het Solidity-contract laat zien wat er echt met de tokens gebeurt. Als die twee niet overeenkomen, wint de code.
Bugs in Solidity hebben tot enkele van de grootste verliezen in crypto geleid, van reentrancy-aanvallen, waarbij een contract wordt misleid om in dezelfde transactie twee keer uit te betalen, tot simpele rekenfouten. Dat is de belangrijkste reden om grotere bedragen in bekende contracten te houden die al lang draaien. Zie onze pagina over smart contracts voor de bredere risico’s, en die over ERC-20-tokens voor hoe de meeste tokens zijn gebouwd.
Solidity leren
Wil je Solidity leren, begin dan met de officiële documentatie en de voorbeeldcontracten daarin, die alles behandelen van een eenvoudig opslagcontract tot stemmen en blinde veilingen. Schrijf en test kleine contracten in Remix op een testnetwerk, waar de ether geen waarde heeft, voordat je iets met echt geld uitrolt. Als je eerst Ethereum en gas fees begrijpt, is de taal veel makkelijker te volgen.
Conclusie: Solidity in het kort
Solidity is de taal achter de meeste smart contracts op Ethereum en EVM-compatibele blockchains. De taal zet regels over geld om in code die elke node op dezelfde manier draait. Je hoeft het niet te schrijven, maar als je weet wat het kan, helpt dat je om de juiste vragen te stellen over een token of app voordat je die je crypto toevertrouwt.
Verwante begrippen
Veelgestelde vragen
Waarvoor wordt Solidity gebruikt?
Solidity wordt gebruikt om smart contracts te schrijven: tokens, decentrale exchanges, apps voor lending, NFT-collecties en DAO's op Ethereum en andere EVM-compatibele blockchains.
Is Solidity moeilijk te leren?
De basis is goed te doen als je JavaScript, Python of C++ kent, omdat de syntaxis er bekend uitziet. Goed beveiligde contracten schrijven is moeilijker, omdat fouten openbaar zijn, echt geld kosten en na het uitrollen meestal niet meer te herstellen zijn.
Lijkt Solidity op C++?
Deels. Solidity leent ideeën van C++, Python en JavaScript, zoals de syntaxis met accolades en overerving, maar heeft eigen regels voor gas, opslag en het omgaan met geld die talen voor algemeen gebruik niet hebben.
Moet ik Solidity kennen om in crypto te beleggen?
Nee. Maar als je weet wat het is, begrijp je beter waarom smart-contractrisico bestaat, en waarom functies die in de code van een token verstopt zitten, zoals wie nieuwe tokens kan aanmaken, voor jou als houder belangrijk zijn.