“De meeste wallets voelen aan alsof ze gemaakt zijn voor ontwikkelaars. Dat wordt een groter probleem, zowel wat betreft praktische bruikbaarheid als veiligheid, naarmate het gebruik van crypto toeneemt.”
Na de langverwachte Merge van Ethereum is het een ideaal moment om na te denken over hoe we ook smart contracts kunnen verbeteren. Smart contracts zijn in wezen apps die draaien op blockchains en een essentieel onderdeel van onze Web3-toepassingen. Maar interactie met hen blijft vrij gevaarlijk, vooral voor niet-ontwikkelaars. Veel van de incidenten waarbij gebruikers hun crypto-activa verliezen, worden veroorzaakt door buggy of kwaadaardige smart contracts.
Om een smart contract volledig te kunnen vertrouwen, moet een consument precies weten wat hij gaat doen als hij een transactie verricht – want anders dan in de Web2-wereld is er geen hotline voor klantenondersteuning die hij kan bellen om geld terug te vorderen als er iets misgaat. Momenteel is het echter bijna onmogelijk om te weten of een smart contract veilig of betrouwbaar is.
Één oplossing is om wallets slimmer te maken. Als deze ons bijvoorbeeld zouden kunnen vertellen of een smart contract veilig is om mee te werken? Het is waarschijnlijk onmogelijk om dat met 100% zekerheid te weten, maar wallets zouden op zijn minst veel van de signalen waar ontwikkelaars al naar zoeken kunnen samenvoegen en weergeven. Dat zou het proces eenvoudiger en veiliger maken, vooral voor niet-ontwikkelaars.
Hier wordt dieper ingegaan op de voor- en nadelen van smart contracts, waarom ze nu het Wilde Westen lijken, en hoe we de UX voor het gebruik ervan zouden kunnen verbeteren.
De belofte en het gevaar van smart contracts
Voor ontwikkelaars heeft het gebruik van een smart contract als backend voor hun app een enorm potentieel. Het vergroot daarentegen ook het potentieel voor bugs en exploits. Het is geweldig dat smart contracts door ontwikkelaars kunnen worden gemaakt zonder iemand om toestemming te vragen, maar dat kan gebruikers ook blootstellen aan aanzienlijke risico’s. We hebben nu apps die honderden miljoenen dollars verhandelen zonder veiligheidsgaranties. Nu moeten we er maar op vertrouwen dat deze apps vrij zijn van bugs en doen wat ze beloven.
Veel niet-ontwikkelaars zijn zich niet eens bewust van de veiligheidsproblematiek en nemen niet de juiste voorzorgsmaatregelen bij de interactie met op blockchain gebaseerde apps. De gemiddelde gebruiker kan een transactie ondertekenen en denken dat die één ding zal doen, om vervolgens te ontdekken dat het smart contract iets heel anders doet. Daarom zijn kwaadaardige smart contracts een primaire aanvalsvector voor slechte actoren.
Smart contracts momenteel net het Wilde Westen
Wanneer een Web3 app een smart contract aanroept, weet u niet precies wat de transactie zal doen tot u hem daadwerkelijk uitvoert. Zal het uw nonfungible token (NFT) slaan, of zal het uw geld en tokens naar een hacker sturen? Deze onvoorspelbaarheid geldt natuurlijk voor elke online toepassing, niet alleen voor Web3-apps; voorspellen wat code zal doen is erg moeilijk. Maar het is een groter probleem in de Web3-wereld omdat de meeste van deze apps inherent een hoge inzet hebben (ze zijn gemaakt om met uw geld om te gaan), en er zo weinig bescherming is voor consumenten.
De App Store is grotendeels veilig dankzij het beoordelingsproces van Apple, maar dat bestaat niet in Web3. Als een iOS-app geld van gebruikers begint te stelen, zal Apple hem meteen neerhalen om de verliezen te beperken en de account van de maker intrekken.
Kwaadaardige smart contracts daarentegen kunnen door niemand worden neergehaald. Er is ook geen manier om gestolen activa terug te krijgen. Als een kwaadaardig contract uw wallet leeghaalt, kunt u de transactie niet gewoon betwisten bij uw kredietkaartmaatschappij. Als de ontwikkelaar anoniem is, zoals meestal het geval is bij kwaadaardige contracten, is er vaak zelfs geen mogelijkheid om juridische stappen te ondernemen.
Vanuit het oogpunt van een ontwikkelaar is het veel beter als de code voor een smart contract open source is. Populaire slimme contracten publiceren doorgaans hun broncode – een enorme verbetering ten opzichte van Web2-apps. Maar zelfs dan is het gemakkelijk om te missen wat er werkelijk aan de hand is. Het kan ook heel moeilijk zijn om te voorspellen hoe de code in alle scenario’s zal werken.
Deze problemen worden nog verergerd doordat mensen vaak onder druk worden gezet om snel te handelen bij de interactie met smart contracts. Denk aan een NFT-daling die door influencers wordt gepromoot: Consumenten zullen zich zorgen maken dat de collectie snel uitverkocht raakt, dus zullen ze vaak proberen zo snel mogelijk een transactie te doen, waarbij ze alle rode vlaggen die ze onderweg tegenkomen negeren.
Kortom, dezelfde kenmerken die smart contracts krachtig maken voor ontwikkelaars – zoals het publiceren zonder toestemming en programmeerbaar geld – maken ze behoorlijk gevaarlijk voor consumenten. Ik denk niet dat dit systeem fundamenteel gebrekkig is. Maar er zijn heel wat mogelijkheden voor Web3-ontwikkelaars zoals ik om betere vangrails te voorzien voor consumenten die vandaag wallets en smart contracts gebruiken.
De UX van wallets en smart contracts
In veel opzichten voelen wallets zoals MetaMask aan alsof ze gemaakt zijn voor ontwikkelaars. Ze tonen veel diepe technische details en blockchain minutiae die nuttig zijn bij het bouwen van apps.
Het probleem daarmee is dat ook niet-ontwikkelaars MetaMask gebruiken – zonder te begrijpen wat alles betekent. Niemand had verwacht dat Web3 zo snel mainstream zou gaan, en wallets hebben de behoeften van hun nieuwe gebruikersgroep nog niet helemaal bijgehaald.
MetaMask heeft al goed werk verricht met de rebranding van de “geheugensteunzin” naar “geheime zin” om te voorkomen dat consumenten deze ongewild delen met hackers. Er is echter nog genoeg ruimte voor verbetering.
Laten we eens kijken naar de gebruikersinterface (UI) van MetaMask, gevolgd door een paar mock-ups die zijn gemaakt en die enkele potentiële verbeteringen aangeven die consumenten naar de “put van het succes” kunnen leiden. (Tussen haakjes, MetaMask dient hier als referentie omdat het veel gebruikt wordt in de Web3-wereld, maar deze UI-ideeën zouden ook van toepassing moeten zijn op vrijwel elke wallet-app). Sommige van deze ontwerpaanpassingen kunnen vandaag worden uitgevoerd, terwijl andere technische vooruitgang vereisen aan de kant van het smart contract.
De afbeelding hieronder laat zien hoe het huidige MetaMask smart contract transactievenster eruit ziet:

We zien het adres van het smart contracts waarmee we interageren, de website die de transactie initieerde, en dan een heleboel details over de fondsen die we naar het contract sturen. Echter geeft dit geen indicatie van wat dit contract doet of dat het veilig is om mee te communiceren.
Mogelijke oplossingen om smart contracts te verbeteren
Wat we hier echt zouden willen zien zijn signalen die ons als eindgebruikers helpen om te bepalen of we deze smart contract transactie vertrouwen of niet. Denk als analogie aan het groene of rode slotje in de adresbalk van moderne webbrowsers, dat aangeeft of de verbinding al dan niet versleuteld is. Deze kleurgecodeerde indicator helpt onervaren gebruikers weg te leiden van potentiële gevaren, terwijl krachtige gebruikers het gemakkelijk kunnen negeren als ze dat willen.
Als visueel voorbeeld zijn hier twee snelle mock-ups van MetaMask-transacties voor gebruikerservaring (UX) – één die waarschijnlijk veilig is en één die minder zeker is.

Hier zijn een paar van voorbeelden van mock-ups:
- Wordt de broncode van het contract gepubliceerd? Open-source contracten zijn over het algemeen betrouwbaarder omdat elke ontwikkelaar ze kan lezen om bugs en kwaadaardige code te vinden. MetaMask bevat al verschillende links naar Etherscan, dus dit zou een eenvoudig en handig signaal zijn om toe te voegen.
- Audit score. Een audit door een derde partij is een ander signaal dat de betrouwbaarheid kan bepalen. De belangrijkste implementatievraag hier is hoe deze score te bepalen. Bestaan hier al geaccepteerde normen voor? Zo niet, dan zou een eenvoudige manier kunnen zijn om Etherscan te gebruiken, die het uploaden van audits ondersteunt. In dit voorbeeld zou MetaMask ook zijn eigen lijst van auditors kunnen bijhouden, of vertrouwen op een lijst van derden. (Van wat ik kan vertellen, doet MetaMask dit al voor NFT API’s en token detectie). In de toekomst kan men zich gemakkelijk een gedecentraliseerde autonome organisatie voorstellen voor het bepalen van auditscores.
- Wat kan deze transactie doen? Kan het externe contracten aanroepen, en zo ja, welke? Dit zou heel moeilijk perfect te bepalen zijn, maar ik vraag me af of een eenvoudige versie voor open-source contracten haalbaar zou zijn. Er zijn al genoeg geautomatiseerde smart-contract vulnerability scanners. Als dit niet mogelijk is voor Solidity, vraag ik me af of we een programmeertaal voor slimme contracten kunnen ontwerpen die dit niveau van statische analyse mogelijk maakt. Misschien kunnen individuele functies de permissies aangeven die ze nodig hebben, en kan de compiler conformiteit garanderen.
- Beveiligingstips en onderwijs. Als een smart contract niet veel signalen van betrouwbaarheid heeft (zie de mock-up rechtsboven), zou de UI een aantal passende voorzorgsmaatregelen kunnen aanbevelen, zoals controleren of het contractadres correct is en een andere account gebruiken. Dit zijn suggesties in de oranje tekst, in tegenstelling tot rode, omdat een gebrek aan signalen niet noodzakelijk gevaarlijk is; hier raden we gebruikers gewoon aan wat voorzichtiger te zijn met hun volgende stappen.
Zoals vele bestaande functies in MetaMask, kunnen deze voorgestelde functies worden uitgeschakeld in de instellingen.
Op weg naar een veiligere toekomst
In de toekomst zullen er waarschijnlijk veel op veiligheid gerichte tools komen die gebouwd zijn op de primitieve componenten die blockchains bieden. Het is bijvoorbeeld waarschijnlijk dat verzekeringsprotocollen die gebruikers beschermen tegen buggy smart contracts gemeengoed zullen worden. (Deze bestaan al, maar zijn nog steeds vrij niche).
Consumenten gebruiken echter al Web3-apps, zelfs in deze begindagen, dus ik zou graag zien dat de ontwikkelaars nu meer bescherming voor hen toevoegen. Enkele eenvoudige verbeteringen aan portemonnees zouden een heel eind kunnen komen. Sommige van de bovengenoemde ideeën zouden onervaren gebruikers helpen beschermen en tegelijkertijd het transactieproces voor Web3-veteranen stroomlijnen.
Vanuit mijn perspectief is alles buiten de handel in crypto-activa op Bitvavo (of andere grote bedrijven) nog steeds veel te riskant voor de gemiddelde consument. Wanneer vrienden en familie vragen naar het opzetten van een self-custody crypto wallet om Web3 apps te gebruiken (laten we eerlijk zijn – meestal, om NFT’s te kopen), begin dan altijd met hen te waarschuwen voor de risico’s. Dit schrikt sommigen van hen af, maar de meer vastberaden mensen willen ze toch gebruiken. Wanneer onze wallets slimmer zijn, zullen we veel beter in staat zijn om de volgende golf nieuwe gebruikers aan te trekken voor Web3.
Word lid van de Bitcoin/Cryptocurrency Facebook groep om geen enkel nieuwsbericht te missen en kom naar de Telegram om mee te discussiëren.