Das Konzept sogenannter Smart Contracts gibt es seit 1994. Nick Szabo verglich sie damals mit digitalen Verkaufsautomaten. Im Grunde sind Smart Contracts einfach Programme – Code und Daten auf einer Blockchain. Sie werden ausgeführt, wenn vorher definierte Bedingungen erfüllt sind. Sie werden typischerweise eingesetzt, um die Ausführung einer Vereinbarung zu automatisieren, sodass alle Beteiligten sofort über das Ergebnis Bescheid wissen, ohne dass es zu Verzögerungen kommt oder ein Mittelsmann nötig wäre. Auch ganze Abläufe können mithilfe von Smart Contracts automatisiert werden. Werden die in einem Smart Contract definierten Bedingungen erfüllt, wird dann die nächste Aktion getriggert.
Zum Beispiel könnte Anna mit Johannes einen Vertrag abschließen, dass er gegen einen Betrag von 0.2 Eth auf ihrer Hochzeit die Rolle des Fotografen übernimmt. Sie halten die Bedingungen des Vertrags in einem in Solidity geschriebenen Smart Contract auf der Blockchain fest:
pragma solidity ^0.8.10;
contract WeddingPhotos {
address payable public seller;
address payable public buyer;
event PurchaseConfirmed();
event ItemReceived();
function confirmPurchase() public {
// ...
}
}
Ein Smart Contract wird nicht von Menschen kontrolliert, sondern hat seinen eigenen internen Code. Weil er sich auf der Blockchain befindet, kann er nicht manipuliert werden, und es gibt keinen Interpretationsspielraum. Wenn Johannes seinen Auftrag, Fotos auf Annas Hochzeit zu machen, ordnungsgemäß erledigt, wird der Vertrag ausgeführt und Geld an Johannes überwiesen. Es gibt viele andere potenzielle Anwendungsfälle wie dezentrale Web3-Apps, dezentrale Finanzprodukte oder den Handel mit digitalen Vermögenswerten in Form von sogenannten Non-Fungible-Token, kurz NFT.
Was ist Solidity?
Solidity wurde 2014 ins Leben gerufen. Es ist eine sogenannte High-Level-Programmiersprache zum Schreiben von Smart Contracts mit einer Syntax, die Sprachen wie C++ oder auch TypeScript und JavaScript ähnelt. Solidity ist kompiliert, statisch typisiert und macht Anleihen bei Strukturen aus der objektorientierten Programmierung. Solidity wird meistens in einem Atemzug mit Ethereum genannt, wird jedoch auch von anderen EVM-kompatiblen Plattformen, zum Beispiel Tron, Tendermint oder Kin, unterstützt.
Der erste Smart Contract in Solidity
Um einen ersten Smart Contract zu schreiben, müsst ihr eine Datei mit der Endung .sol im Editor eurer Wahl erstellen. Das Solidity-Projekt auf GitHub empfiehlt Remix, eine browserbasierte IDE für den Start. Hier könnt ihr eure ersten Smart Contracts mit Solidity ohne lokale Installation schreiben und verwalten.
Das pragma
-Keyword signalisiert dem Compiler, welche Version von Solidity verwendet werden soll.
pragma solidity ^0.8.10;
contract MyContract {
string public greeting = "Moini Friends";
address payable public seller;
address payable public buyer;
struct Order {
string description;
bool completed;
}
function confirmOrder() public {
buyer = payable(msg.sender);
}
constructor(string memory _text) {
greeting = _text;
}
}
Das Keyword contract
legt die Details eures Smart Contracts fest. Das contract
-Keyword ist vergleichbar mit einer Klasse in JavaScript, TypeScript oder Python. Innerhalb der geschwungenen Klammern werden Variablen oder ein sogenannter State definiert. Deren Wert kann sich während des Lebenszyklus des Vertrags ändern. Solidity verfügt über einen speziellen Datentypen namens address
, der dazu dient, eine Ethereum-Adresse zu speichern. Mithilfe des struct
-Keywords könnt ihr komplexere Datentypen definieren und so die verschiedenen Entitäten eures Smart Contracts darstellen. Mithilfe des function
-Keywords könnt ihr Funktionen definieren, über die der State des Smart Contracts verändert werden kann.
Jeder in Solidity programmierte Smart Contract verfügt zudem über einen constructor
. Ein constructor
ist eine spezielle, optional zu definierende Funktion, die sogenannte State-Variablen eines Smart Contracts initialisiert. Wird dieser nicht explizit definiert, verfügt der Smart Contract dennoch über einen Default Constructor. Nachdem die constructor
-Funktion ausgeführt wurde, wird der finale Code auf der Blockchain deployed.
Für das Management von Smart Contracts gibt es verschiedene API
Nachdem ihr den Smart Contract definiert habt, muss er kompiliert werden, damit ihr ihn programmatisch mit einer API eurer Wahl verwenden könnt. Wer seine Smart Contracts in JavaScript instantiieren und verwalten will, kann hierfür beispielsweise auf ether.js oder Web3.js zurückgreifen.
Wer nach diesem kurzen Überblick tiefer in die Thematik einsteigen will, findet im Projekt auf GitHub weitere Informationen und auf der zugehörigen Website ein ausführliches Tutorial.