Weiter zum Hauptinhalt
Change page

Smart Contract-Bibliotheken

Letzte Änderung: @EthBasti(opens in a new tab), 15. November 2023

Sie müssen in Ihrem Projekt nicht jeden Smart Contract von Grund auf neu erstellen. Es gibt viele Open-Source-Smart-Contract-Bibliotheken, die wiederverwendbare Bausteine für Ihr Projekt bereitstellen. Damit müssen Sie das Rad nicht neu erfinden.

Voraussetzungen

Bevor wir in die Smart-Contract-Bibliothek einsteigen, ist es ratsam, sich mit den Grundlagen der Smart-Contract-Struktur vertraut zu machen. Falls noch nicht geschehen, sehen Sie sich die Smart-Contract-Anatomie an.

Was beinhaltet eine Bibliothek

Normalerweise finden Sie zwei Arten von Erstellungsblöcken in einer Smart Contract Bibliothek: wiederverwendbare Verhaltensweisen, die Sie Ihren Verträgen hinzufügen können, und die Implementierungen verschiedener Standards.

Verhaltensweisen

Wenn Sie einen Smart Contract schreiben, ist es wahrscheinlich das Sie immer wieder dieselben Muster erstellen, zum Beispiel das Zuweisen einer Admin-Adresse, um geschützte Vorgänge in einem Vertrag auszuführen, oder das Hinzufügen einer Notfall-Unterbrechungs-Schaltfläche, falls ein unvorhergesehenes Problem auftritt.

Smart-Contract-Bibliotheken bieten in der Regel wiederverwendbare Implementierungen dieser Vorgehensweisen als Bibliotheken(opens in a new tab) oder über eine Vererbung(opens in a new tab) an.

Als Beispiel eine vereinfachte Version des Eigentümer Vertrags(opens in a new tab) aus der OpenZeppelin-Vertragsbibliothek(opens in a new tab), erstellt wird darin eine Adresse des Inhabers eines Vertrags und zugleich ein Modifizierer, um den Zugriff nur dem Eigentümer zu ermöglichen.

1contract Ownable {
2 address public owner;
3
4 constructor() internal {
5 owner = msg.sender;
6 }
7
8 modifier onlyOwner() {
9 require(owner == msg.sender, "Ownable: caller is not the owner");
10 _;
11 }
12}
Alles anzeigen
Kopieren

Um einen solchen Baustein in Ihrem Vertrag zu verwenden, müssen Sie ihn zuerst importieren und dann in Ihren eigenen Verträgen erweitern. Das erlaubt Ihnen die Nutzung des Modifikators, der über den Ownable-Vertrag (Vertrag mit Eigentümer) bereitgestellt wird, um Ihre eigenen Funktionen abzusichern.

1import ".../Ownable.sol"; // Path to the imported library
2
3contract MyContract is Ownable {
4 // The following function can only be called by the owner
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}
Kopieren

Ein weiteres gängiges Beispiel ist SafeMath(opens in a new tab) oder DsMath(opens in a new tab). Das sind Bibliotheken (im Gegensatz zu Basisverträgen), die arithmetische Funktionen mit Überlaufprüfungen bereitstellen, die von der Sprache nicht bereitgestellt werden. Es empfiehlt sich, eine dieser Bibliotheken anstelle von nativen arithmetischen Operationen zu verwenden, um Ihren Vertrag vor Überläufen zu schützen, die katastrophale Folgen haben können!

Standards

Um die Komponierbarkeit und Interoperabilität zu erleichtern, hat die Ethereum-Community mehrere Standards in Form von ERCs definiert. Weitere Informationen hierzu finden Sie im Abschnitt Standards.

Wenn Sie einen ERC in Ihre Verträge aufnehmen, sollten Sie nach Standardimplementierungen suchen, anstatt Ihre eigenen einzuführen. Viele Smart-Contract-Bibliotheken enthalten Implementierungen für die gängigsten ERCs. Den allgegenwärtigen ERC20-Standard für fungible Token finden Sie in HQ20(opens in a new tab), DappSys(opens in a new tab) und OpenZeppelin(opens in a new tab). Darüber hinaus bieten einige ERCs auch kanonische Implementierungen als Teil des ERC selbst.

Es ist erwähnenswert, dass einige ERCs nicht eigenständig sind, sondern Ergänzungen zu anderen ERCs sind. Zum Beispiel fügt ERC2612(opens in a new tab) eine Erweiterung zu ERC20 hinzu, um die Benutzerfreundlichkeit zu verbessern.

So fügen Sie eine Bibliothek hinzu

Beziehen Sie sich immer auf die Dokumentation der Bibliothek, die Sie einbinden, um genaue Anweisungen zur Einbindung in Ihr Projekt zu bekommen. Viele Solidity-Vertragsbibliotheken werden mit npm gepackt, sodass Sie sie einfach npm install benutzen können. Die meisten Anwendungen zum Kompilieren von Verträgen prüfen Ihre node_modules für Smart-Contract-Bibliotheken, sodass Sie Folgendes tun können:

1// Dadurch wird die @openzeppelin/contracts-Bibliothek von Ihren node_modules geladen
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}
Kopieren

Unabhängig von der verwendeten Methode sollten Sie beim Einbinden einer Bibliothek immer die Sprachversion im Auge behalten. Sie können beispielsweise keine Bibliothek für Solidity 0.6 verwenden, wenn Sie Ihre Verträge in Solidity 0.5 schreiben.

Wann verwendet man eine Bibliothek?

Wenn Sie eine Smart-Contract-Bibliothek für Ihr Projekt nutzen, bietet das gleich mehrere Vorteile. In erster Linie sparen Sie Zeit, denn die Bibliothek stellt fertige Bausteine zur Verfügung stellt, die Sie einfach in Ihr System integrieren können, anstatt sie selbst schreiben zu müssen.

Sicherheit ist ein großes Plus. Auch Open-Source-Smart-Contract-Bibliotheken werden oft intensiv untersucht. Da viele Projekte von der Bibliothek abhängen, besteht ein starker Anreiz vonseiten der Communty, sie ständig zu überprüfen. Fehler finden sich viel häufiger im Anwendungscode als in wiederverwendbaren Vertragsbibliotheken. Einige Bibliotheken werden auch externen Audits(opens in a new tab) unterzogen, um deren Sicherheit zu erhöhen.

Die Verwendung von Smart-Contract-Bibliotheken birgt jedoch das Risiko, dass Sie Code in Ihr Projekt integreiren, mit dem Sie nicht vertraut sind. Es ist verlockend, einen Vertrag zu importieren und direkt in Ihr Projekt aufzunehmen, doch ohne ein gutes Verständnis dessen, was dieser Vertrag bewirkt, können Sie aufgrund eines unerwarteten Verhaltens versehentlich ein Problem in Ihrem System einführen. Lesen Sie immer die Dokumentation des Codes, den Sie importieren, und überprüfen Sie dann den Code selbst, bevor Sie ihn in Ihr Projekt aufnehmen.

Schließlich sollten Sie bei der Entscheidung, ob Sie eine Bibliothek integrieren möchten, ihren Gesamtnutzen berücksichtigen. Eine weit verbreitete Version hat den Vorteil, dass sie eine größere Community hat und Fehler schneller erkannt werden. Beim Erstellen von Smart Contracts sollte Sicherheit sollte Ihr Hauptaugenmerk sein.

OpenZeppelin Contracts – Gängigste Bibliothek für die sichere Entwicklung von Smart Contracts

DappSys – Sichere, einfache und flexible Bausteine für Smart Contracts

HQ20 – Ein Solidity-Projekt mit Verträgen, Bibliotheken und Beispielen, die Ihnen helfen, voll funktionsfähige, verteilte Anwendungen für die reale Welt zu erstellen

thirdweb Solidity SDK - Bietet die Tools, die zum effizienten Erstellen von benutzerdefinierten Smart Contracts erforderlich sind

Weiterführende Informationen

Sie kennen Community-Resourcen die Ihnen geholfen haben? Bearbeiten Sie diese Seite und fügen Sie sie hinzu!

War dieser Artikel hilfreich?