Zum Hauptinhalt springen
Change page

Smart-Contract-Bibliotheken

Du musst nicht jeden Smart Contract in deinem Projekt von Grund auf neu schreiben. Es gibt viele Open-Source-Smart-Contract-Bibliotheken, die wiederverwendbare Bausteine für dein Projekt bereitstellen und dir ersparen, das Rad neu erfinden zu müssen.

Voraussetzungen

Bevor du dich in Smart-Contract-Bibliotheken stürzt, ist es eine gute Idee, ein solides Verständnis der Struktur eines Smart Contracts zu haben. Schau dir die Anatomie von Smart Contracts an, falls du das noch nicht getan hast.

Was in einer Bibliothek steckt

In Smart-Contract-Bibliotheken findest du normalerweise zwei Arten von Bausteinen: wiederverwendbare Verhaltensweisen, die du zu deinen Verträgen hinzufügen kannst, und Implementierungen verschiedener Standards.

Verhaltensweisen

Beim Schreiben von Smart Contracts ist die Wahrscheinlichkeit groß, dass du immer wieder ähnliche Muster schreibst, wie z. B. die Zuweisung einer Admin-Adresse zur Ausführung geschützter Operationen in einem Vertrag oder das Hinzufügen einer Notfall-Pause-Schaltfläche für den Fall eines unerwarteten Problems.

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

Als Beispiel folgt eine vereinfachte Version des Ownable-Vertrags (opens in a new tab) aus der OpenZeppelin Contracts-Bibliothek (opens in a new tab), die eine Adresse als Eigentümer eines Vertrags festlegt und einen Modifikator bereitstellt, um den Zugriff auf eine Methode nur auf diesen Eigentümer zu beschränken.

Um einen solchen Baustein in deinem Vertrag zu verwenden, müsstest du ihn zunächst importieren und dann in deinen eigenen Verträgen davon erben. Dies ermöglicht es dir, den vom Basisvertrag Ownable bereitgestellten Modifikator zu verwenden, um deine eigenen Funktionen abzusichern.

import ".../Ownable.sol"; // Pfad zur importierten Bibliothek

contract MyContract is Ownable {
    // Die folgende Funktion kann nur vom Besitzer aufgerufen werden
    function secured() onlyOwner public {
        msg.sender.transfer(1 ether);
    }
}

Ein weiteres beliebtes Beispiel ist SafeMath (opens in a new tab) oder DsMath (opens in a new tab). Dies sind Bibliotheken (im Gegensatz zu Basisverträgen), die arithmetische Funktionen mit Überlauf-Prüfungen bereitstellen, welche von der Sprache selbst nicht angeboten werden. Es ist eine gute Praxis, eine dieser Bibliotheken anstelle nativer arithmetischer Operationen zu verwenden, um deinen Vertrag vor Überläufen zu schützen, die katastrophale Folgen haben können!

Standards

Um Komponierbarkeit und Interoperabilität zu erleichtern, hat die Ethereum-Community mehrere Standards in Form von ERCs definiert. Du kannst mehr darüber im Abschnitt Standards lesen.

Wenn du einen ERC als Teil deiner Verträge einbindest, ist es eine gute Idee, nach Standardimplementierungen zu suchen, anstatt zu versuchen, deine eigenen zu entwickeln. Viele Smart-Contract-Bibliotheken enthalten Implementierungen für die beliebtesten ERCs. Zum Beispiel ist der allgegenwärtige ERC-20-Standard für fungible Token in HQ20 (opens in a new tab), DappSys (opens in a new tab) und OpenZeppelin (opens in a new tab) zu finden. Darüber hinaus bieten einige ERCs auch kanonische Implementierungen als Teil des ERCs selbst an.

Es ist erwähnenswert, dass einige ERCs nicht eigenständig sind, sondern Ergänzungen zu anderen ERCs darstellen. Zum Beispiel fügt ERC-2612 (opens in a new tab) dem ERC-20 eine Erweiterung hinzu, um dessen Benutzerfreundlichkeit zu verbessern.

Wie man eine Bibliothek hinzufügt

Beziehe dich immer auf die Dokumentation der Bibliothek, die du einbindest, für spezifische Anweisungen, wie du sie in dein Projekt integrierst. Mehrere Solidity-Vertragsbibliotheken sind mit npm verpackt, sodass du sie einfach mit npm install installieren kannst. Die meisten Tools zur Kompilierung von Verträgen suchen in deinen node_modules nach Smart-Contract-Bibliotheken, sodass du Folgendes tun kannst:

// Dies wird die Bibliothek @openzeppelin/contracts aus deinen node_modules laden
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyNFT is ERC721 {
    constructor() ERC721("MyNFT", "MNFT") public { }
}

Unabhängig von der verwendeten Methode solltest du beim Einbinden einer Bibliothek immer die Sprachversion im Auge behalten. Du kannst beispielsweise keine Bibliothek für Solidity 0.6 verwenden, wenn du deine Verträge in Solidity 0.5 schreibst.

Wann man sie verwendet

Die Verwendung einer Smart-Contract-Bibliothek für dein Projekt hat mehrere Vorteile. In erster Linie spart es dir Zeit, da dir sofort einsatzbereite Bausteine zur Verfügung gestellt werden, die du in dein System integrieren kannst, anstatt sie selbst programmieren zu müssen.

Sicherheit ist ebenfalls ein großer Pluspunkt. Open-Source-Smart-Contract-Bibliotheken werden oft streng geprüft. Da viele Projekte von ihnen abhängen, gibt es einen starken Anreiz für die Community, sie ständig zu überprüfen. Es ist viel häufiger, Fehler im Anwendungscode zu finden als in wiederverwendbaren Vertragsbibliotheken. Einige Bibliotheken durchlaufen auch externe Audits (opens in a new tab) für zusätzliche Sicherheit.

Die Verwendung von Smart-Contract-Bibliotheken birgt jedoch das Risiko, Code in dein Projekt aufzunehmen, mit dem du nicht vertraut bist. Es ist verlockend, einen Vertrag zu importieren und ihn direkt in dein Projekt einzubinden, aber ohne ein gutes Verständnis dafür, was dieser Vertrag tut, könntest du aufgrund eines unerwarteten Verhaltens versehentlich ein Problem in dein System einführen. Stelle immer sicher, dass du die Dokumentation des Codes liest, den du importierst, und überprüfe dann den Code selbst, bevor du ihn zu einem Teil deines Projekts machst!

Zu guter Letzt solltest du bei der Entscheidung, ob du eine Bibliothek einbindest, deren allgemeine Nutzung berücksichtigen. Eine weit verbreitete Bibliothek hat den Vorteil einer größeren Community und mehr Augen, die nach Problemen suchen. Sicherheit sollte dein Hauptaugenmerk sein, wenn du mit Smart Contracts baust!

OpenZeppelin Contracts – Die beliebteste 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, das dir hilft, voll funktionsfähige verteilte Anwendungen für die reale Welt zu erstellen.

thirdweb Solidity SDK – Bietet die Werkzeuge, die benötigt werden, um benutzerdefinierte Smart Contracts effizient zu erstellen.

Weiterführende Literatur

Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!