Bijgewerkt op 14 september 2026. Een audit van een smart contract kan nuttig bewijsmateriaal opleveren, maar het is geen veiligheidscertificaat. De belangrijkste vraag is niet: "Is dit project gecontroleerd?", maar: "Wat is er precies gecontroleerd, welke versie is beoordeeld, wat is er nog niet opgelost en komt de geïmplementeerde code nog steeds overeen met het gecontroleerde systeem?"
De beveiligingsrichtlijnen van Ethereum waarschuwen expliciet dat audits geen wondermiddel zijn en niet elke bug kunnen opsporen. De auditworkflow van OpenZeppelin behandelt de reikwijdte, bevindingen, ernst, herstelstatus en beoordeling van de oplossingen eveneens als afzonderlijke onderdelen van het beveiligingsbeeld. Het praktische doel voor een koper is daarom om het rapport te lezen als een risicoanalyse – niet als een marketinginstrument.
Snelle checklist met waarschuwingssignalen
| Wat te controleren |
Signaal voor een lager risico |
Rode vlag |
| Domein |
De exacte opslagplaatsen, bestanden, contracten, netwerken en uitsluitingen worden vermeld. |
Er wordt beweerd dat er een audit heeft plaatsgevonden, zonder dat de reikwijdte daarvan duidelijk is. |
| Versie |
De commit-hash, tag of exacte codeversie is geïdentificeerd. |
Er zijn geen wijzigingen aangebracht in de commits of de geïmplementeerde code na de audit. |
| Kritieke / belangrijke bevindingen |
Opgelost en onafhankelijk opnieuw gecontroleerd. |
Openstaande kwestie, gedeeltelijk opgeloste kwestie, geaccepteerd zonder overtuigende verzachtende omstandigheden, of beoordeling zonder oplossing. |
| Beheerdersbevoegdheden |
Rollen worden gedocumenteerd en waar nodig beveiligd met multisig/timelock. |
Met één wallet kunt u direct munten aanmaken, pauzeren, geld opnemen, upgraden of parameters wijzigen. |
| Upgradebaarheid |
Het proxy-model en de upgradebevoegdheid vallen binnen de scope en zijn duidelijk gedocumenteerd. |
De gecontroleerde implementatie kan na de audit zonder noemenswaardige vertraging of herziening worden vervangen. |
| Afhankelijkheden en orakels |
Vertrouwensveronderstellingen en externe systemen worden geïdentificeerd. |
Het rapport sluit een onderdeel uit dat de prijsstelling, het beheer, de overbruggingen of het gedrag van het kernprotocol regelt. |
| Auditleeftijd |
Recent genoeg voor de huidige codebase, met vervolgbeoordelingen na grote wijzigingen. |
Een oude audit is hergebruikt als bewijs voor een wezenlijk ander product. |
Stap 1: Controleer of het rapport echt is en van de accountant afkomstig is.
Omschrijving: Begin met het rapportnummer, de datum, de auditor en de samenvatting van de ernst van de situatie voordat u de afzonderlijke bevindingen leest.
Geverifieerd: betrouwbare auditrapporten vermelden doorgaans het project, de beoordelingsperiode, de auditor en de gecontroleerde code. De gepubliceerde rapporten van OpenZeppelin en Consensys Diligence bevatten vaak een sectie over de reikwijdte en de codeversie. Zo vermeldt het USDKG-rapport van Consensys de exacte commit-hash die is gecontroleerd, terwijl OpenZeppelin-rapporten standaard de repository en de betreffende commit of pull request specificeren.
Misvatting: een door het project geüploade PDF is automatisch betrouwbaar omdat deze het logo van een auditor bevat. Dat is niet voldoende. Bestanden kunnen verouderd, gewijzigd of losgekoppeld zijn van hun oorspronkelijke context.
Actie: zoek het rapport indien mogelijk op de website of in de archiefrepository van de auditor. Vergelijk de projectnaam, rapportdatum, URL en versiegegevens met het exemplaar dat door het tokenteam is gedeeld.
Primaire referenties: Auditdocumentatie van OpenZeppelin en USDKG-audit van Consensys Diligence .
Stap 2: Lees de projectomschrijving voordat u de bevindingen bekijkt.
Omschrijving: Het auditkeurmerk is minder belangrijk dan de reikwijdte: geef precies aan welke contracten en onderdelen zijn beoordeeld.
Een audit omvat alleen datgene wat binnen de scope valt. Een rapport kan een tokencontract beoordelen, maar staking, bridges, vaults, governance, front-end infrastructuur, externe afhankelijkheden of een latere upgrade uitsluiten.
Geverifieerd: De Panoptic-audit van OpenZeppelin beschrijft de reikwijdte en vermeldt ook dat de oplossingen over verschillende repositories zijn verspreid. Een ander rapport van OpenZeppelin over een EVM-emulator stelt expliciet dat alleen wijzigingen in een specifieke pull request zijn gecontroleerd, niet de volledige bestanden in hun geheel. Deze voorbeelden laten zien waarom de conclusie "het project is gecontroleerd" te algemeen kan zijn.
Misvatting: als één contract in het ecosysteem gecontroleerd wordt, is het hele protocol gedekt. Dat is niet het geval.
Actie: noteer alle componenten die geld kunnen beheren, geld kunnen overmaken, prijzen kunnen vaststellen, machtigingen kunnen wijzigen, tokens kunnen aanmaken of contracten kunnen upgraden. Geef vervolgens aan of elk component binnen de auditscope valt. Elke belangrijke lege plek is een vervolgvraag.
Voorbeeldreferenties: OpenZeppelin Panoptic audit en OpenZeppelin EVM Emulator audit .
Stap 3: Koppel de commit-hash aan de code die daadwerkelijk is geïmplementeerd.
Omschrijving: Een rapport is gekoppeld aan een coderevisie; controleer of de gecontroleerde revisie nog steeds overeenkomt met de geïmplementeerde contracten.
Dit is een van de meest over het hoofd geziene controles. Een audit kan uitstekend zijn geweest, maar het project kan de code daarna toch hebben gewijzigd.
Geverifieerd: De documentatie van OpenZeppelin's Code Inspector geeft aan dat rapporten gekoppeld zijn aan een specifieke commit, en de richtlijnen voor contractverificatie van Ethereum leggen uit dat geverifieerde broncode gebruikers helpt vast te stellen dat de gepubliceerde broncode overeenkomt met de geïmplementeerde bytecode.
Misvatting: "gecontroleerd vorige maand" betekent dat het contract dat vandaag is geïmplementeerd, ook het gecontroleerde contract is. De tijdsduur alleen bewijst dat niet.
Actie: zoek de commit-hash, tag of pull-request in het rapport. Controleer vervolgens de implementatiedocumentatie van het project en de geverifieerde broncode in de relevante block explorer. Als de geïmplementeerde versie nieuwer is, zoek dan naar een vervolgaudit of een gedocumenteerde diff-review.
Primaire referenties: OpenZeppelin Code Inspector-documentatie en de contractverificatiehandleiding van Ethereum.org .
Stap 4: Beschouw de status van de vondst net zo serieus als de ernst ervan.
Omschrijving: "Kritiek", "Hoog" of "Gemiddeld" vertelt slechts de helft van het verhaal; controleer of elk probleem is opgelost, gedeeltelijk opgelost of nog openstaat.
De ernstgraad geeft aan hoe belangrijk een bevinding mogelijk is. De status geeft aan wat er daarna is gebeurd. De audittools van OpenZeppelin onderscheiden statussen zoals opgelost, gedeeltelijk opgelost, erkend maar niet opgelost, en geen reactie.
Misvatting: de uitdrukking "audit voltooid" betekent dat het project alle problemen heeft opgelost. Dat is niet het geval. De audit kan voltooid zijn, terwijl er nog steeds openstaande bevindingen zijn.
Actie: maak een korte lijst van alle kritieke en ernstige problemen en noteer de uiteindelijke status en het bewijs van de evaluatie van de oplossing. Besteed bij problemen van gemiddelde ernst extra aandacht aan situaties waarin meerdere problemen wijzen op dezelfde ontwerpfout, zoals toegangscontrole, prijsmanipulatie of boekhoudkundige fouten.
Negeer ook bevindingen met een lagere ernstgraad niet automatisch. Hun betekenis hangt af van de systeemcontext, de combinatie met andere problemen en hoe bevoegde gebruikers de betreffende functionaliteit kunnen gebruiken.
Stap 5: Lees de bevindingen, de gevolgen, de randvoorwaarden en de oplossing – niet alleen de titel.
Omschrijving: Ernstlabels zijn een uitgangspunt; begrijp de exploitatieomstandigheden, de getroffen activa en de redenering van de auditor.
Een nuttige bevinding legt doorgaans uit wat er mis kan gaan, waarom het belangrijk is, het relevante codepad, de randvoorwaarden en een aanbeveling. Een bevinding met de status "Hoog" die een gecompromitteerde beheerder vereist, kan een ander praktisch risico inhouden dan een exploit zonder toestemming die elke gebruiker kan uitvoeren.
Geverifieerd: OpenZeppelin beschrijft de ernst van een probleem als een weerspiegeling van factoren zoals impact, waarschijnlijkheid en moeilijkheidsgraad van de exploitatie. De analyse van Trail of Bits van 246 bevindingen in smart contracts toonde ook aan dat ernstige problemen zich voordoen in meerdere categorieën – niet alleen in bekende bugklassen zoals re-entrancy. Hun dataset wees op toegangscontrole, authenticatie, timing, numerieke waarden, validatie en andere categorieën als belangrijke risicobronnen.
Misvatting: re-entrancy is de enige bug in smart contracts waar je je zorgen over hoeft te maken. Dat is niet zo. Bedrijfslogica, toegangscontrole, validatie, oracle-ontwerp en accounting kunnen net zo belangrijk zijn.
Actie: beantwoord voor elke ernstige bevinding vier vragen: Wie kan het veroorzaken? Wat kunnen ze ermee winnen of wat kunnen ze ermee verliezen? Welke aannames zijn nodig? Is de exacte oplossing beoordeeld?
Primaire referenties: OpenZeppelin auditprobleemmodel , Trail of Bits-analyse van auditbevindingen en Solidity-beveiligingsaspecten .
Stap 6: Controleer de rechten voor bevoorrechte rollen, beheerderssleutels, pauzeren, minten en upgraden.
Omschrijving: Bevoorrechte functies verdienen speciale aandacht, omdat een beveiligd codepad nog steeds risico's met zich mee kan brengen op het gebied van governance of sleutelbeheer.
Veel protocollen bevatten bewust bevoorrechte rollen. Dat maakt ze niet automatisch onveilig, maar het verandert wel het vertrouwensmodel.
Geverifieerd: De beveiligingsrichtlijnen van Ethereum voor smart contracts waarschuwen dat één enkele eigenaar een centraal punt van falen kan worden. Ze beschrijven op rollen gebaseerde toegangscontrole en multisignature-controle als manieren om dat risico te verminderen. De timelock-documentatie van OpenZeppelin legt uit dat uitgestelde uitvoering gebruikers de tijd kan geven om onderhoudsacties te beoordelen en af te sluiten wanneer dat gepast is.
Misvatting: "geen kritieke kwetsbaarheden" betekent dat beheerders gebruikers geen schade kunnen berokkenen. De ernst van audits en de bevoegdheden van beheerders zijn twee verschillende zaken.
Actie: zoek in het rapport naar termen zoals owner, admin, role, multisig, timelock, pause, mint, upgrade, blacklist, en withdraw. Identificeer vervolgens wie momenteel elke rol vervult en hoe snel die rol kan handelen.
Primaire referenties: Ethereum smart-contract security guidelines en OpenZeppelin access-control documentation .
Stap 7: Controleer de upgradebaarheid, orakels, bruggen en andere externe vertrouwensveronderstellingen.
Omschrijving: Controleer de vertrouwensgrens, niet alleen de Solidity-bestanden: proxy's, oracles, bridges en externe afhankelijkheden kunnen het werkelijke risico beïnvloeden.
Een upgradebare proxy kan hetzelfde publieke adres behouden terwijl de implementatielogica verandert. Oracles kunnen prijzen leveren die liquidaties bepalen. Bridges kunnen aparte bewaar- of validatorveronderstellingen introduceren. Externe bibliotheken en protocollen kunnen onafhankelijk van elkaar falen.
Geverifieerd: OpenZeppelin documenteert dat proxy-gebaseerde systemen een stabiel proxy-adres scheiden van veranderlijke implementatiecode. De documentatie waarschuwt ook dat upgrades zorgvuldige autorisatie vereisen. De beveiligingshandleiding van Ethereum legt het risico van oracle-manipulatie uit en merkt op dat onjuiste prijsinvoer ertoe kan leiden dat contracten worden uitgevoerd op basis van onjuiste gegevens.
Misvatting: geverifieerde broncode op het proxy-adres bewijst dat toekomstig gedrag niet kan veranderen. Voor upgradebare systemen is dat niet per se waar.
Actie: bepaal of het contract kan worden geüpgraded, wie upgrades autoriseert, of upgrades worden uitgesteld en of de huidige implementatie is geverifieerd. Maak vervolgens een lijst van alle externe systemen waarvan een storing gevolgen kan hebben voor de gebruikerstegoeden.
Primaire referenties: OpenZeppelin proxy-documentatie en Ethereum smart-contract beveiligingsrichtlijnen .
Stap 8: Neem een koop-/vermijdings-/onderzoeksbeslissing op basis van het resterende risico.
Omschrijving: De uiteindelijke beslissing moet de risico's weerspiegelen die na de oplossingen overblijven, niet het bestaan van een auditbadge.
Zelfs na het oplossen van problemen blijft het risico bestaan. OpenZeppelin heeft in gepubliceerde audits expliciet aangegeven dat tijdsgebonden reviews niet kunnen garanderen dat elke bug of elk risico is gevonden. In de Audius-audit adviseerden de auditors bijvoorbeeld bètatesten, een bug bounty-programma en toekomstige heraudits na een groot aantal ernstige bevindingen. In de Panoptic-audit adviseerden ze extra monitoring en een nieuwe audit na significante codewijzigingen.
Misvatting: meerdere audits reduceren het risico van smart contracts tot nul. Dat is niet het geval. Ze verbeteren de zekerheid, maar de veiligheid hangt ook af van de nauwkeurigheid van de implementatie, de werking, de beveiliging van beheerderssleutels, monitoring, incidentrespons, economische aannames en toekomstige upgrades.
Actie: deel het project in in een van de drie categorieën:
- Kopen / onderzoek voortzetten: de huidige geïmplementeerde code komt overeen met de beoordeelde scope; ernstige bevindingen zijn opgelost en opnieuw gecontroleerd; bevoegdheden zijn acceptabel en transparant; externe afhankelijkheden zijn duidelijk.
- Nader onderzoek is nodig: belangrijke informatie ontbreekt, de audit dateert van vóór grote upgrades, of sommige problemen van gemiddelde/hoge ernst zijn slechts gedeeltelijk opgelost of erkend.
- Vermijd deze investering voorlopig: Er zijn nog steeds kritieke/ernstige problemen onopgelost, de implementatie komt niet overeen met de gecontroleerde versie, kerncontracten vallen buiten de scope, of beheerders hebben onvoldoende openbaar gemaakt dat ze eenzijdig controle uitoefenen over gebruikersgelden.
Hoe interpreteer je veelvoorkomende audittermen?
| Zin |
Wat het gewoonlijk betekent |
Uw volgende actie |
| “Geen kritieke problemen gevonden” |
Het onderzoek heeft binnen de gestelde reikwijdte en tijdsperiode geen kritieke bevindingen opgeleverd. |
Lees nog steeds de volgende punten: Hoog, Gemiddeld, vertrouwensveronderstellingen, uitsluitingen en beheerdersbevoegdheden. |
| "Opgelost" |
Het project heeft de code aangepast en de auditor heeft de herstelmaatregelen geaccepteerd in de beoordeelde set met correcties. |
Controleer of de oplossing onderdeel is van de geïmplementeerde code. |
| “Erkend” |
Het team erkent het probleem, maar heeft de code mogelijk niet aangepast. |
Lees de toelichting; beschouw dit niet als een vaste waarde. |
| “Gedeeltelijk opgelost” |
De beperkende maatregelen verminderen het risico, maar elimineren de bevinding niet volledig. |
Begrijp het resterende exploitatiepad of de aanname. |
| “Buiten het toepassingsgebied” |
De accountant heeft dat onderdeel niet beoordeeld. |
Leid op basis van het rapport voor dat onderdeel geen conclusies over de beveiliging af. |
| “Verondersteld betrouwbaar te zijn” |
Het auditmodel is ervan afhankelijk dat de betreffende actor of afhankelijkheid zich correct gedraagt. |
Bepaal of je bereid bent die vertrouwensveronderstelling te accepteren. |
Vijf waarschuwingssignalen die onmiddellijke actie vereisen
- Het project kan het originele, door de auditor opgestelde rapport niet tonen. Een schermafbeelding of logo is niet voldoende.
- Het rapport mist een reproduceerbare reikwijdte of versie. Zonder commit, tag of exacte bestanden is het moeilijk te weten wat er is beoordeeld.
- Kritieke of belangrijke kwesties blijven onopgelost zonder een sterke, gedocumenteerde onderbouwing.
- Het protocol is te upgraden, maar het rapport bespreekt nauwelijks de bevoegdheid tot upgraden of bevoorrechte rollen.
- De implementatie is na de audit wezenlijk veranderd en er is geen vervolgonderzoek beschikbaar.
Als een van deze situaties zich voordoet, is het het veiligst om deze niet weg te rationaliseren. Stel de investeringsbeslissing uit en vraag om actueel bewijsmateriaal.
Een routinecontrole en -rapportage vóór aankoop van 10 minuten
- Open het rapport op de officiële website van de auditor.
- Noteer de rapportdatum, de repository, het bereik en de commit-hash.
- Bevestig de geïmplementeerde contracten en implementatieadressen.
- Lees alle kritische en belangrijke bevindingen.
- Controleer de eindstatus van alle ernstige problemen.
- Zoek naar bevoorrechte functies en noodbevoegdheden.
- Identificeer proxy-upgrades en wie deze beheert.
- Identificeer orakels, bruggen, bewaarsystemen en externe afhankelijkheden.
- Zoek naar wijzigingen die zijn aangebracht na de gecontroleerde commit.
- Bepaal welk resterend risico u bereid bent te accepteren voordat u tot aankoop overgaat.
Kortom
Een audit van een smart contract is een bewijs van beoordeling, geen bewijs van veiligheid. Het sterkste signaal is niet het logo van de auditor, maar de bewijsketen die een duidelijk omschreven scope, een exacte coderevisie, serieuze bevindingen, geverifieerde oplossingen, geïmplementeerde bytecode en transparante operationele controles met elkaar verbindt.
De gevaarlijkste leesfout is om te stoppen bij "gecontroleerd". De nuttigere vraag is: Wat kan er na deze controle nog misgaan? Als u daar een duidelijk antwoord op kunt geven – en u zich comfortabel voelt met de resterende risico's – neemt u een beter onderbouwde beslissing. Als de reikwijdte, de status van de oplossingen, de beheerdersrechten of de geïmplementeerde versie onduidelijk zijn, is het verstandig om onderzoek te doen voordat u tot aankoop overgaat.
Primaire bronnen
Dit artikel dient uitsluitend ter informatie en is geen financieel advies. Een audit kan risico's met betrekking tot smart contracts, governance, oracles, economie, bedrijfsvoering of de markt niet uitsluiten.