Trends Cryptos

Hoe programmeer ik slimme contracten met Ethereum en Webassembly?

Ethereum staat aan de basis van een van de populairste cryptocurrencies – en toch is het veel meer dan dat. Dankzij algoritmes kan de cryptocurrency volledig autonoom worden beheerd. Maar hoe werken “slimme contracten” en hoe ver zijn we al op deze weg?

Hoe werken slimme contracten in Ethereum?
Om het principe van slimme contracten in Ethereum te begrijpen, moeten we eerst een uitstapje maken naar de wereld van programmeertalen. De huidige programmeertalen zijn in wezen verdeeld in twee groepen: geïnterpreteerde talen en gecompileerde talen. In de eerste groep worden programma’s geschreven in een high-level taal en vervolgens uitgevoerd door een interpreter. Twee populaire voorbeelden zijn Python en JavaScript. Geïnterpreteerde talen zijn gebruikelijk in veel toepassingsgebieden (zoals het web) omdat je er meteen mee aan de slag kunt. Ze zijn ook erg universeel en kunnen op verschillende platformen worden gebruikt zonder dat er extra tooling nodig is.

Daarentegen zijn er gecompileerde talen, waarbij een compiler eerst de programmatekst omzet in een andere taal – vaak binaire machinecode. Deze binaire code is afhankelijk van het platform en wordt direct uitgevoerd op een processor. De compiler kan (en moet) aangepaste code produceren voor de instructieset van de processor, bijvoorbeeld voor ARM- of Intel-compatibele CPU’s. Bekende vertegenwoordigers van dit type zijn C en Rust.

De realiteit is echter, zoals altijd, complexer dan deze eenvoudige categorieën suggereren. Er zijn al enige tijd hybride vormen, zoals Java. De Java compiler vertaalt Java code niet direct naar ‘echte’ machinecode, maar naar een speciaal tussenformaat. Dit tussenformaat wordt dan weer uitgevoerd door een interpreter – de Java virtuele machine – op de concrete architectuur van de processor.

De slimme contracten van Ethereum werken ook op een vergelijkbare manier. Alle knooppunten die transacties valideren en nieuwe valuta extraheren in Ethereum bevatten een instantie van de Ethereum Virtual Machine (EVM). Het Yellow Paper, de technische specificatie van Ethereum, definieert in detail de instructies die de EVM ondersteunen – en hoe ze moeten worden uitgevoerd.

Dit is een eigen ontwikkeling met een aantal speciale kenmerken:

Interactie met de buitenwereld is niet mogelijk: alle algoritmische beslissingen moeten voortkomen uit de blockchain en zijn transacties.
De rekenkunde is gebaseerd op 256-bits waarden om grotere adressen en bedragen gemakkelijker te kunnen verwerken.
Speciale bewerkingen zoals hashfuncties zijn geïntegreerd om de prestaties te verhogen.
Aan alle instructies wordt een kostenfunctie (fuel) toegewezen, die ongeveer overeenkomt met de benodigde uitvoeringstijd en de benodigde hoeveelheid geheugen. De term metering wordt vaak gebruikt in het Engels.
Programmeren op de EVM
Net als bij het Java ecosysteem zijn er verschillende programmeertalen waarvoor EVM compilers beschikbaar zijn. De meest gebruikte taal is Solidity, die oppervlakkig (syntactisch) lijkt op JavaScript. Eind 2020 noemt de documentatie van Ethereum twee extra talen: Vyper, dat gebaseerd is op Python, en Yul Plus, een volledig onafhankelijke ontwikkeling.

Wat al deze talen gemeen hebben, is dat ze domeinspecifiek zijn omdat ze, in tegenstelling tot universele talen, een niche bezetten met specifieke kenmerken en, in het bijzonder, een speciale executie-engine: EVM. Natuurlijk zijn deze domeinspecifieke talen (DSL’s) in principe een goed idee om de complexiteit van applicaties te verminderen.

Maar in het geval van EVM lijkt dit weinig zin te hebben. Het kan immers – ongeacht het gebrek aan mogelijkheid tot interactie met de wereld buiten de blockchain – willekeurige algoritmen uitvoeren, dus het is (om het simpel te zeggen) Turing-compleet.

Waarom geen gebruik maken van een bestaande taal en uitvoeringsomgeving?
Indien nodig zouden sommige functionaliteiten verwijderd moeten worden, maar we zouden kunnen putten uit langere ervaring, stabielere tools en – veel belangrijker – een bredere basis van programmeurs. Het is algemeen bekend dat de populariteit van een programmeertaal tegenwoordig niet alleen wordt bepaald door het feit of deze bijzonder beknopt, typeveilig of dynamisch is, maar ook door hoe gemakkelijk het is om toegang te krijgen tot de vele bestaande bibliotheken en pakketten. Deze verandering van tijdperk wordt het best geïllustreerd door JavaScript, dat vaak wordt bekritiseerd om zijn grove semantiek, maar dat op zijn laatst sinds het miljoenste NPM-pakket als de populairste programmeertaal moet worden beschouwd.

Webassembly, een universele tussentaal
De mensen achter de Ethereum-specificatie kwamen tot de conclusie dat bepaalde problemen konden worden opgelost door af te zien van aangepaste ontwikkeling ten gunste van een universele taal. Hoe handig dat er op het web wordt gewerkt aan een alternatief voor de grote hond JavaScript: Webassembly (WASM). Dit is zowel een universele intermediaire taal als een binair formaat, gecombineerd met een specificatie voor tolken. Zoals de naam al aangeeft, is deze open standaard oorspronkelijk ontworpen voor het web. Intussen zijn ook andere toepassingsgebieden (bijv. smartphonetoepassingen) onderzocht.

De ontwikkeling van WASM wordt geleid door industriereuzen zoals Microsoft, Google en Apple. Een belangrijk kenmerk van de taal is dat deze vanaf het begin is ontworpen met het oog op portabiliteit. Dit blijkt uit het feit dat veel bestaande programmeertalen zoals Rust, C++ of Go al kunnen compileren voor webassemblage.

Sommaire

Sois au courant des dernières actus !

Inscris-toi à notre newsletter pour recevoir toute l’actu crypto directement dans ta boîte mail

Envie d’écrire un article ?

Rédigez votre article et soumettez-le à l’équipe coinaute. On prendra le temps de le lire et peut-être même de le publier !

Articles similaires