Was ist ein Smart Contract?
Ein Smart Contract ist ein Programm, das auf der Ethereum-Blockchain läuft statt auf einem einzelnen Server. Es wird im Netzwerk bereitgestellt und dort ausgeführt. Nutzer oder andere Programme interagieren mit ihm, indem sie seine Funktionen aufrufen, etwa um Guthaben zu senden, abzufragen oder zu verleihen.
Anders als klassische Software ist ein Smart Contract nicht löschbar und irreversibel: Was einmal veröffentlicht ist, bleibt so. Änderungen sind nur möglich, wenn der Vertrag von Anfang an dafür gebaut wurde, etwa über ein sogenanntes Proxy-Muster, das auf eine neue Version verweist. Darauf beruht sein Wert, denn niemand kann die Regeln nachträglich heimlich ändern. Aus demselben Grund tragen alle, die ihn entwickeln, eine große Verantwortung.
- 01SchreibenSolidity-Code mit Lizenz, Pragma & Imports
- 02Testenin der Entwicklungsumgebung, z. B. Remix oder Hardhat
- 03Bereitstellenim Netzwerk veröffentlichen
- Unveränderlichnicht mehr löschbar oder umkehrbar
Solidity: die Sprache der Smart Contracts
Die meisten Smart Contracts auf Ethereum werden in Solidity geschrieben, einer statisch typisierten Sprache mit geschweiften Klammern, die speziell für diesen Zweck entworfen wurde. Sie wurde im November 2014 auf der Entwicklerkonferenz Devcon erstmals vorgestellt, ist Open Source und wird heute vom unabhängigen Argot Collective weiterentwickelt, finanziert unter anderem von der Ethereum Foundation.
Wer schon mit Sprachen wie Java oder TypeScript gearbeitet hat, findet sich schnell zurecht, denn viele Konstrukte kennt man aus herkömmlichen imperativen Sprachen. Neu sind vor allem drei Dinge:
- Der Dateikopf: Ein SPDX-Lizenzbezeichner (Software Package Data Exchange, ein Standard für Lizenzangaben) legt die Lizenzrechte fest, etwa „MIT“ für Open Source oder „UNLICENSED“ für Closed Source. Dazu kommen das
pragma-Schlüsselwort für die Compiler-Version und Import-Anweisungen. - Spezielle Variablen und Funktionen für Adressen, Blöcke und Transaktionen: Ein Contract kann zum Beispiel den Kontostand einer Adresse abfragen, Ether senden und auslesen, wer eine Funktion gerade aufruft (
msg.sender), und wie viel Ether dabei mitgeschickt wurde (msg.value, in Wei). - Sichtbarkeiten und Modifikatoren: Funktionen sind
public,private,externaloderinternal; Zusätze wieview,pureoderpayablelegen fest, ob eine Funktion Daten liest, verändert oder Ether annehmen darf.
Vieles muss man nicht selbst schreiben: Bewährte Bibliotheken wie OpenZeppelin liefern geprüfte Bausteine, etwa eine fertige Umsetzung des ERC20-Standards für eigene Token, also digitale Wertmarken. ERC20 ist die gängige Vorlage dafür (ERC steht für Ethereum Request for Comments, ein Verfahren für gemeinsame Standards).
Validierung: die eingebaute Sicherheitsleine
Weil sich nichts zurückdrehen lässt, prüft ein guter Smart Contract jede Eingabe, bevor er handelt. Solidity bringt dafür eigene Mittel mit: require stellt Bedingungen auf (etwa „der Betrag muss größer als 0 sein“ oder „das Guthaben muss reichen“) und bricht den Aufruf mit einer verständlichen Fehlermeldung ab, wenn sie nicht erfüllt sind. revert beendet eine Ausführung gezielt, zum Beispiel wenn jemand Ether an sich selbst schicken will. Das Senden selbst ist ein Sonderfall: Die im Beispiel genutzte Funktion send bricht bei einem Fehlschlag nicht ab, sondern meldet nur false. Neuere Solidity-Versionen führen sie als veraltet; empfohlen wird heute call mit geprüftem Rückgabewert oder ein Muster, bei dem der Empfänger sein Guthaben selbst abholt.
Gas: Jeder Aufruf hat einen Preis
Jede Transaktion, die Daten auf der Blockchain verändert, verbraucht Gas, das Maß für den Rechenaufwand. Daraus ergibt sich die Gebühr, die die Nutzer bezahlen. Abgerechnet wird in sehr kleinen Ether-Einheiten: Die kleinste heißt Wei, eine Milliarde Wei ergeben ein Gwei, und 1018 Wei ergeben einen Ether. Unnötig aufwendiger Code macht also jede Nutzung teurer. Auf die Gebühren zu achten, gehört deshalb schon zum Entwurf.
Werkzeuge: entwickeln und testen
Zu den bekanntesten Werkzeugen gehören die Browser-Umgebung Remix und die Frameworks Hardhat und Foundry; geschrieben wird oft in Editoren wie VS Code. Das früher verbreitete Truffle wird nicht mehr weiterentwickelt. Diese Werkzeuge erleichtern vor allem das Testen. Bei Smart Contracts zählt das besonders, weil sich ein Fehler, der erst nach der Bereitstellung auffällt, nicht einfach mit einem Update beheben lässt.
Was das für Unternehmen bedeutet
Aus diesen Eigenschaften ergeben sich ein paar einfache Faustregeln, wenn Du über einen Smart Contract nachdenkst:
- Feste Regeln müssen vorher durchdacht sein. Die Unveränderlichkeit schafft Vertrauen, lässt nachträgliche Korrekturen aber nur zu, wenn sie von Anfang an eingeplant sind.
- Gebühren gehören ins Konzept. Jede schreibende Transaktion kostet Gas. Wie oft eine Funktion genutzt wird, beeinflusst also direkt die Kosten für Deine Nutzer.
- Testen vor dem Veröffentlichen ist Pflicht. Werkzeuge wie Remix, Hardhat oder Foundry machen das möglich, bevor etwas Unumkehrbares passiert.
- Bewährtes nutzen. Etablierte Bibliotheken und Standards wie ERC20 sind oft die sicherere Wahl, als alles selbst zu bauen.
