Smart contracts: zelfdenkende software die buiten de greep van één partij automatisch voorwaarden checkt en afgesproken handelingen uitvoert. Daarover schreef ik een paar columns geleden. Het onderwerp blijft tot de verbeelding spreken, want zeg nou zelf wie wil er geen slim contract dat zonder tussenkomst van een advocaat of rechter netjes nagekomen wordt? En het klinkt ook zo logisch, dat je contractuele afspraken niet opschrijft in juridische woordenwolken maar als duidelijke, stap-voor-stap instructies waar een computer gewoon mee aan de gang gaat.
Een smart contract heet ‘smart’ omdat de verbintenissen en de wijze van nakoming niet in gewone taal zijn opgeschreven maar in uitvoerbare instructies. In principe komt dat neer op een heleboel beslisregels. Is de leverdatum bereikt, zet het vermogensrecht dan op naam van ontvanger. Is er een betaling ontvangen, verreken dan eerst de nog verschuldigde rente op oude vorderingen en pas daarna boek je op de openstaande vorderingen zelf. Staat er in het faillissementsregister de naam van de leverancier, zet dan de betaling stop.
Dit klinkt redelijk basaal en dat is het ook. Maar praktisch is het wel, want veel van dit soort afspraken zijn dingen die gewoon automatisch bijgehouden en gecheckt kunnen worden. En het kan bijdragen aan vertrouwen wanneer partijen elkaar niet kennen en elkaar niet voor de rechter kunnen slepen. Als dan het contract, pardon het computerprogramma gewoon doet wat er is afgesproken en niemand kan dat halverwege beïnvloeden of omkopen, dan is zo’n risicovolle transactie misschien toch het ondernemen waard.
Maar zodra je dergelijke basale afspraken overstijgt, wordt het erg ingewikkeld. Je krijgt dan te maken met subjectieve toetsen, en hoe kan een computerprogramma – hoe slim ook – daarop verifiëren? Dat een website opgeleverd is, kun je automatisch nog wel nagaan. Maar of ‘ie mooi is, schrijf daar maar eens een statement voor. Daar kom je niet uit, vrees ik. Dan moet je ‘mooi’ kwantificeren tot objectieve technische eisen en ik weet niet hoe gelukkig je daarvan wordt (kleur A en kleur B verschillen minstens 30 tinten in de Pantone waaier, zoiets?)
Verder is er nog een vrij fundamenteel probleem: de redelijkheid (en billijkheid) is ver te zoeken in smart contracts. Het zijn immers computerprogramma’s, en die staan erom bekend rechtlijnig en compromisloos te opereren. Staat er een fout in, dan wordt die fout netjes uitgevoerd. Dit terwijl een fout in een ‘dom’ contract – stel, een nul vergeten in de verkoopprijs – altijd nog rechtgezet kan worden bij de rechtbank.
Punt is natuurlijk hoe je aantoont dat iets een foutje is. Die vergeten nul krijg je waarschijnlijk nog wel erbij gepraat met de eerdere contractconcepten of het spreekwoordelijke bierviltje. Een verkeerde rechtskeuze die niemand opviel in het proces is alweer wat lastiger recht te trekken. Maar een goed pleidooi kan alsnog de redding bieden.
Een belangrijke factor daarbij voor mij is dat een traditioneel contract (dat klinkt toch mooier dan ‘dom’) opgezet is met uitspraken over de gewenste uitkomst. “A verkoopt aan B het goed C”. Bij smart contracts wordt met programmeertaal gewerkt, en dat betekent instructies die de uitkomst moeten opleveren. Maar daar zit een subtiel verschil tussen. Hoe weet je of een verkeerde instructie fout is, als je niet weet wat de gewenste uitkomst is? Als je zegt, het smart contract is de afspraak, dan is die instructie dus niet fout. Misschien ongewenst, achteraf gezien, maar er staat dat het goed naar X moet dus gaat het naar X.
Een berucht voorbeeld is de zogeheten DAO-hack uit 2016. The DAO is een gedecentraliseerd investeringsvehikel dat opgezet is middels een berg van die slimme contracten, gebruik makend van de Ethereum-blockchainimplementatie. In een van die contracten stond een foutje, althans een onbedoelde feature, waardoor een bijdehantje in staat was om gratis geld te krijgen. Legaal. Hoewel het namelijk evident is dat The DAO dit niet heeft gewild, zijn er geen illegale hacks of dergelijke uitgevoerd. Het stelsel van smart contracts had namelijk een gaatje: iemand die een bepaalde onvoorziene aanvraag indiende en daarna introk, kreeg als een soort afrondingsfoutje meer geld terug dan hij betaald had bij die aanvraag.
Wie dit zou doen bij een papieren contract, zou meteen weten dat dit niet gaat werken. De stap naar de rechter zou waarschijnlijk niet eens nodig zijn. Maar in dit smart contract geval is dat lang zo evident niet. Als je namelijk zegt, de afspraak is wat het smart contract doet, en het smart contract doet iets anders dan jij had beoogd, wat is dan de legale uitkomst? Precies. Ook als dat in strijd met de redelijkheid is.
Het wordt dus tijd die redelijkheid in te gaan bouwen in software. Maar daar moet eerst een nieuwe programmeertaal voor komen vermoed ik.
Arnoud