Die wichtigsten Punkte
- Ein Smart Contract setzt Bewegungen von On-Chain-Vermögenswerten durch, mehr nicht. Er kann nichts in der physischen Welt erzwingen.
- Code ist Gesetz im wörtlichen Sinn: Ein Bug wird getreu ausgeführt, und wegen der Unveränderlichkeit kann er dauerhaft sein.
- Die meisten Verluste gehen auf Entwurfs- und Zugriffskontrollfehler oder auf fehlerhafte externe Daten zurück, nicht auf gebrochene Kryptografie.
- Upgradefähigkeit löst das Bug-Problem, indem sie eine vertrauenswürdige Partei wieder einführt – das ist ein Zielkonflikt und keine echte Lösung.
Der Begriff Smart Contract leistet viel unverdiente Arbeit. Er suggeriert etwas Rechtliches, etwas Intelligentes, etwas, das über eine Vereinbarung wacht. Tatsächlich ausgerollt wird ein Programm, das auf einer Blockchain gespeichert ist, bei Auslösung läuft und Vermögenswerte nach seinem eigenen Code bewegt. Wer die Lücke zwischen Name und Mechanismus versteht, versteht den Großteil des Risikos.
Was tatsächlich ausgerollt wird
Ein Smart Contract ist Code samt gespeicherten Daten, die unter einer Adresse auf einer Chain liegen. Jeder kann ihm eine Transaktion senden, die eine seiner Funktionen aufruft. Jeder Node führt denselben Code gegen denselben Zustand aus und kommt zum selben Ergebnis – das macht das Resultat überprüfbar statt vertrauensabhängig.
Die Ausführung kostet eine Gebühr, die in der Regel proportional zur geleisteten Rechenarbeit ist. Diese Gebühr ist kein buchhalterisches Detail: Sie begrenzt, wie komplex On-Chain-Logik praktisch sein kann, und drängt Entwickler zu minimalen Contracts, bei denen möglichst viel off-chain abgewickelt wird. Sie bedeutet auch, dass ein Contract schlicht deshalb scheitern kann, weil ihm mitten in der Ausführung das Budget ausgegangen ist.
Daraus folgen zwei Eigenschaften. Die Ausführung ist deterministisch, dieselben Eingaben liefern also immer dieselben Ausgaben. Und auf den meisten Chains ist der ausgerollte Code unveränderlich – was Sie ausrollen, läuft für immer.
Was ein Smart Contract tatsächlich durchsetzt
Innerhalb seiner eigenen Chain ist die Durchsetzungskraft eines Contracts sehr stark. Er kann Vermögenswerte halten und sie nur freigeben, wenn festgelegte Bedingungen erfüllt sind. Er kann Reihenfolgen durchsetzen, sodass Schritt zwei nicht vor Schritt eins erfolgen kann. Er kann arithmetische Regeln wie Angebotsobergrenzen oder Emissionspläne durchsetzen. Er kann Zugriffskontrolle durchsetzen und Funktionen auf bestimmte Adressen beschränken. Und er kann all das ohne einen Betreiber tun, der es sich anders überlegen könnte.
Das ist eine reale Fähigkeit. Treuhand, die kein Intermediär plündern kann, ein Token-Angebot, das niemand still und leise ausweiten kann, und automatisiertes Market Making, das ohne Orderbuch funktioniert, sind allesamt echte Leistungen dieses Modells. Der Wert entsteht dadurch, dass Ermessen entfällt, nicht dadurch, dass Intelligenz hinzukommt.
Was er nicht kann
Ein Contract hat keine Sinne. Er kann nicht sehen, dass eine Lieferung eintrifft, eine Sendung den Zoll passiert oder eine Leistung erbracht wird. Er weiß nur, was in den Zustand seiner Chain geschrieben ist. Jede Interaktion mit der physischen Welt erfordert, dass jemand sie bezeugt – und ab diesem Punkt vertrauen Sie dem Bezeugenden.
Ein Contract hat auch keinen Zugriff nach außen. Er kann kein Eigentum pfänden, keinen Lohn einbehalten und kein Verhalten erzwingen. Wenn eine Vereinbarung gegenüber einer Person durchgesetzt werden muss und nicht gegenüber einem Topf von On-Chain-Vermögenswerten, leistet Code das nicht. In der Praxis heißt das: Smart Contracts funktionieren gut, wenn der gesamte Gegenstand der Vereinbarung bereits on-chain ist, und umso schlechter, je weiter man sich davon entfernt.
Ein Contract kann auch kein Urteilsvermögen ausüben. Er kann nicht erkennen, dass eine Gegenpartei innerhalb des Wortlauts der Bedingungen treuwidrig gehandelt hat oder dass sich die Umstände auf eine Weise geändert haben, die niemand vorhergesehen hat. Menschliche Verträge leben von Auslegung. Code hat keine.
Wo sich das Risiko tatsächlich konzentriert
Die zugrunde liegende Kryptografie ist selten das Problem. Fehler häufen sich an einigen wenigen wiedererkennbaren Stellen.
Logik, die tut, was dasteht, und nicht, was gemeint war
Der klassische Fall ist eine Funktion, die erneut betreten werden kann, bevor sie ihre eigene Buchführung fertig aktualisiert hat, sodass ein Aufrufer wiederholt gegen ein Guthaben abheben kann, das noch nicht verringert wurde. Der Code lief korrekt. Der Entwurf war falsch. Die Unveränderlichkeit macht den Fehler dann dauerhaft, sofern kein Rettungspfad eingebaut ist.
Zugriffskontrolle
Viele Vorfälle laufen auf eine privilegierte Funktion hinaus, die nicht ordentlich beschränkt war, oder auf einen Administrationsschlüssel, der mächtiger oder schlechter geschützt war, als die Nutzer annahmen. Ein Contract kann in seiner Kernlogik fehlerfrei sein, während eine Eigentümeradresse still und leise die Macht behält, ihn leerzuräumen.
Fehlerhafte Eingaben
Contracts, die auf Preise, Zinssätze oder Ergebnisse Bezug nehmen, hängen von Orakeln ab. Wird ein Preis aus einer Quelle gelesen, die sich billig manipulieren lässt, kann ein Angreifer die Eingabe verzerren und den Contract den Schaden für sich anrichten lassen. Der Contract verhält sich dabei durchgehend korrekt.
Komposition
Protokolle bauen aufeinander auf, und ein Contract, der für sich genommen sicher ist, kann unsicher sein, wenn ein anderer Contract ihn in einer unerwarteten Reihenfolge innerhalb einer einzigen Transaktion aufrufen kann. Emergentes Verhalten über für sich genommen solide Komponenten hinweg gehört zu den schwerer durchschaubaren Risikoklassen.
Unveränderlichkeit als zweischneidige Eigenschaft
Unveränderlichkeit ist der Grund, warum man einem Smart Contract vertrauen kann, ohne seinem Autor zu vertrauen. Sie ist auch der Grund, warum sich ein Bug als nicht behebbar erweisen kann. Teams reagieren mit upgradefähigen Mustern, mit Timelocks, die Änderungen verzögern, damit Nutzer aussteigen können, und mit Multi-Signature-Kontrolle über Administrationsschlüssel. Jede dieser Abmilderungen führt bewusst ein Stück Vertrauen wieder ein.
Es gibt keine Konfiguration, die diesen Zielkonflikt aufhebt. Vollständig unveränderlich heißt vollständig festgelegt auf das, was ausgerollt wurde. Upgradefähig heißt, jemand kann die Regeln ändern. Die ehrliche Haltung besteht darin, zu wissen, welches Modell ein bestimmtes Protokoll verwendet, wer die Schlüssel hält und welche Verzögerung besteht, bevor Änderungen wirksam werden.
Wo dies Mining und Konsens berührt
Contracts werden innerhalb von Blöcken ausgeführt, das heißt, ihre Garantien sind nur so stark wie die Abwicklungsgarantien der darunterliegenden Chain. Auf einer Chain, auf der Reorganisationen billig sind, kann eine Transaktion, die endgültig aussah, rückgängig gemacht werden – und jeder Contract-Zustand, der von ihr abhing, verschwindet mit ihr. Die Sicherheit der Chain, ob aus akkumulierter Proof-of-Work-Arbeit oder aus gebundenem Stake, ist daher Teil des Sicherheitsmodells eines Contracts und kein separates Thema. Der Zusammenhang wird in unserer Berichterstattung zur Blockchain-Technologie weiter ausgeführt.
Ein praktischer Weg, einen zu beurteilen
Bevor Sie mit einem Contract interagieren, leisten einige wenige Fragen den größten Teil der Arbeit. Ist der Quellcode verifiziert und lesbar oder nur ein kompiliertes Binärpaket? Ist er upgradefähig, und wenn ja, wer kann ihn aktualisieren und wie schnell? Von welchen externen Daten hängt er ab, und woher stammen diese Daten? Wurde er geprüft, in welcher Version, und wurden die Feststellungen behoben? Wie viel Wert hat er gehalten, und wie lange?
Nichts davon garantiert Sicherheit. Es bringt Sie dahin, statt einer Beschreibung zu vertrauen einen Mechanismus zu beurteilen – mehr ist redlicherweise nicht zu haben. Die zugehörige Terminologie finden Sie im Glossar, und wie wir an dieses Material grundsätzlich herangehen, steht in unserer Methodik. Nichts hiervon ist eine Finanzberatung.
Häufig gestellte Fragen
Sind Smart Contracts rechtlich bindende Verträge?
Meist nicht in dem Sinn, den der Name nahelegt. Ein Rechtsvertrag ist eine Vereinbarung zwischen Parteien, die ein Gericht auslegen kann, und Gerichte betrachten regelmäßig Absicht, Fairness und Kontext. Ein Smart Contract ist ein Programm, das Vermögenswerte bewegt, wenn die Bedingungen in seinem Code erfüllt sind – ohne Auslegung und ohne Rechtsmittel. Beide können nebeneinander bestehen, und manche Konstruktionen kombinieren bewusst eine schriftliche Vereinbarung mit On-Chain-Ausführung. Aber den Code einen Vertrag zu nennen, verleiht ihm für sich genommen keine Rechtskraft, und das Etikett als rechtliche Garantie zu behandeln, ist ein verbreitetes und teures Missverständnis.
Warum lässt sich ein fehlerhafter Smart Contract nicht einfach patchen?
Auf den meisten Chains kann ausgerollter Contract-Code nicht geändert werden. Das ist Absicht: Die Garantie, dass sich die Regeln nicht unter Ihnen verschieben, macht einen großen Teil des Werts aus. Teams umgehen das mit Proxy-Mustern, bei denen ein kleiner dauerhafter Contract Aufrufe an eine austauschbare Implementierung weiterleitet. Das stellt die Möglichkeit wieder her, Bugs zu beheben, bedeutet aber auch, dass derjenige, der den Upgrade-Schlüssel kontrolliert, die Regeln ändern kann. Sie haben das Risiko eines nicht behebbaren Bugs gegen das Risiko eines vertrauenswürdigen Administrators getauscht. Keine der beiden Optionen ist kostenlos, und Nutzer sollten wissen, welche sie in Kauf nehmen.
Was ist ein Orakel, und warum ist es so wichtig?
Ein Orakel ist jeder Mechanismus, der externe Informationen auf die Chain bringt, etwa einen Preis, ein Spielergebnis oder eine Lieferbestätigung. Contracts können nicht über ihre eigene Chain hinaussehen, daher hängt alles, was sich auf die reale Welt bezieht, von einem Orakel ab. Damit wird das Orakel zu einer tragenden Vertrauensannahme. Meldet es einen falschen oder manipulierten Wert, handelt der Contract korrekt und unumkehrbar danach. Ein erheblicher Teil der Verluste im Bereich Decentralised Finance ging auf manipulierte oder aus dünnen Quellen bezogene Preisdaten zurück und nicht auf Fehler in der Contract-Logik selbst.
Bedeutet ein Audit, dass ein Contract sicher ist?
Es bedeutet, dass qualifizierte Prüfer innerhalb eines definierten Umfangs und Zeitbudgets nach Problemen gesucht und berichtet haben, was sie gefunden haben. Das ist etwas wert, aber es ist keine Garantie. Audits können Probleme übersehen, der Prüfumfang kann genau die Komponente ausklammern, die später versagt, und Contracts ändern sich nach der Prüfung häufig. Ökonomische und spieltheoretische Fehler, bei denen jede Funktion sich wie geschrieben verhält, die Anreize aber ungünstig zusammenwirken, sind besonders schwer zu erkennen. Lesen Sie den Bericht statt des Siegels: Was wurde geprüft, bei welchem Commit, was wurde gefunden, und wurden die Feststellungen tatsächlich behoben?
Exploring blockchain, crypto, and DeFi innovation. Ex-fintech analyst turned journalist, spotlighting real-world use cases of blockchain. Writer at Cryptocurrency Miners.