Geld voor niets met slimme contracten

september 24, 2019

Bent u geïnteresseerd in slimme contracten? Weet u wat integer overflow inhoudt? Integer overflow is in feite een probleem dat uit de wereld van het programmeren komt, maar een slim contract is in principe een programma, dus het is wellicht goed om te begrijpen wat dit allemaal betekent.

In simpele bewoordingen: als een niet-ondertekende integer is opgeslagen in een enkele geheugencel van 1 byte lang, kan het alleen waarden aannemen tussen 0 tot 225. Dat betekent, als er geen verdere voorwaarden gespecificeerd zijn, dat 255 +1 = 0. Meer zorgen, 0 – 1 = 255. Dit is hoe de modernste processors deze data verwerken.

In veel moderne programmeertalen controleert het programma zelf of er een overflow heeft plaatsgevonden tijdens rekenkundige verrichtingen. Als dat het geval is, bestaat de kans dat dit niet was wat de programmeur in gedachten had, dus het is dan het beste om het programma stop te zetten en ervoor te zorgen dat het later geen bugs zal veroorzaken.

Wat hebben slimme contracten hier mee te maken?

Dit soort controle is niet aanwezig in slimme contracten voor Ethereum bij het verwerken van geld. In andere woorden: als u nul tokens hebt en er één naar een vriend stuurt, krijgt u plotseling een triljoen tokens. Het programma zou dan natuurlijk meteen onderbroken moeten worden, en de incorrecte transactie geannuleerd.

Waarom Ethereum-ontwikkelaars hun rekenkunde op deze manier implementeren is een raadsel. Maar om ervoor te zorgen dat de universele, menselijke wiskundige regels van toepassing zijn op slimme contracten, moet elke programmeur van slimme contracten meer dan 100 regels aan code toevoegen die de normale functies voor optelling, vermenigvuldiging, enzovoorts bevatten.

Anders is er geen houden meer aan met een triljoen op hun account. Een oplichter zou een cryptocurrency-uitwisseling kunnen uitvoeren en alle bitcoins of ether kopen die ze maar willen. Tegen elke prijs.

Dat scenario is niet puur theoretisch: het is daadwerkelijk een aantal keer gebeurd met verschillende soorten valuta. Normaal gesproken leren we meer over het code-probleem nadat de dader zijn slag heeft geslagen  en met volle zakken is verdwenen. Maar zelfs daarna kan er niets worden gedaan: slimme contracten staan in steen geschreven en kunnen niet worden gewijzigd of hersteld.

Overflow en Bitcoin

De waarheid is dat het probleem van integer overflow niet beperkt is tot Ethereum. Lang daarvoor had Bitcoin al hetzelfde probleem.

Integer overflow was er de oorzaak van dat twee Bitcoin-portemonnees een inhoud kregen van 184 miljard bitcoins op 15 augustus 2010. Dit was uiteraard geen welkome ontwikkeling voor de oprichters. Ze (Satoshi Nakamoto) wijzigden de code snel, verhielpen de bug, draaiden de financiële geschiedenis terug en deden alsof er niets was gebeurd.

Maar wat betekent dit terugdraaien van de geschiedenis? Een voorbeeld: Als ik voor $ 10.000 aan bitcoins koop op een bepaalde dag, zou het terugdraaien van de geschiedenis ervoor zorgen dat die bitcoins teruggaan naar de verkoper — in tegenstelling tot mijn dollars, die ik niet terug zou krijgen. En als er nu een terugdraaiing wordt uitgevoerd in plaats van in 2010, zouden de gevolgen daarvan enorm zijn, want nu vinden er elke dag bitcoin-transacties plaats voor een totale waarde van $ 5 miljard.

Het voorgaande, evenals andere gevallen, toont aan dat blockchain alleen onveranderlijk is als alles volgens plan verloopt. Anders kunnen zowel het plan als blockchain worden gewijzigd.

Terug naar slimme contracten

Het besluit van de Ethereum-ontwikkelaars leek nogal vreemd. Het lijkt net alsof ze vallen hebben gemaakt voor programmeurs van slimme contracten. Je moet erg ervaren of gefocust (of beide) zijn om jezelf of je investeerders te beschermen tegen het potentiële verlies van al je geld in één nacht. En dat is opnieuw een reden waarom de code van slimme contracten een zorgvuldige controle vereist. Als deel van Kaspersky Token Offering Security analyseren onze experts de code van slimme contacten om zwakke plekken of niet-gedocumenteerde features te vinden. U kunt er meer over lezen op onze Token Offering Security-pagina.