Verständnis von Smart Contracts: Lesen, Schreiben und Überprüfen

Erweitert11/26/2023, 12:41:25 PM
Dieser Artikel behandelt Smart-Vertragsprogrammiertechniken, einschließlich Richtlinien zum Lesen, Schreiben und Auditieren. Das Verständnis der Struktur und Codeblöcke von Smart Contracts ist der erste Schritt zu ihrer Programmierung in Solidity oder anderen Sprachen. Da Smart Contracts zentral für Decentralized Finance (DeFi) und dezentralisierte Anwendungen (DApps) sind, ist es entscheidend, ihre Sicherheit und Fehlerfreiheit sicherzustellen, wobei Smart-Contract-Audits eine Schlüsselrolle spielen.

Lesen von Smart Contracts

Smart Contracts sind programmierbare Codefragmente, die nur dann ausgeführt werden, wenn eine Reihe von Bedingungen erfüllt sind. Sie sind gleichbedeutend mit rechtlich bindenden realen Verträgen; nur in diesem Fall ist der Code das Gesetz. Da sich Smart Contracts auf der Blockchain befinden, sind sie unveränderlich — sie können nicht manipuliert werden. Gerade diese Unveränderlichkeit macht Smart Contracts unter anderem besonders.

Verständnis von Smart Contracts: Grundlagen und Zweck

Smart Contractssollen blockchain-spezifische Transaktionen automatisieren. Da es sich um bedingungsspezifische Verträge handelt, benötigen sie keine Vermittler. Was smarte Verträge nützlich macht, ist ihre Kompatibilität mit einer Vielzahl von Anwendungsfällen, einschließlich Finanzdienstleistungen, Lieferkettenmanagement und mehr. Und im Gegensatz zu traditionellen Codeblöcken, die auf einmal programmiert werden, erfordern smarte Verträge äußerst sichere und zeitaufwändige Strategien.

Wie Smart Contracts mit Blockchain-Technologie in Einklang stehen: BeInCrypto

"Das Schlagwort "Web3" suggeriert die laxen, sicherheitsarmen Programmiergewohnheiten des Webs. Wenn Krypto oder Smart Contracts wie eine Webseite programmiert werden, sind sie dem Untergang geweiht. Nachhaltig erfolgreiche Blockchains und ihre Apps basieren auf weitaus sichereren, sorgfältigeren und langsameren Programmiermethoden."

Nick Szabo, Kryptograph und Informatiker: Twitter

Smart Contracts können mit blockchain-spezifischen Tokens arbeiten, sagen ERC-20 für die Ethereum-Blockchain, um Bemühungen zu belohnen und Transaktionen zu erleichtern. Da Code, Bedingungen und Kosten beteiligt sind, sollten Sie beim Lesen, Schreiben und Prüfen vorsichtig sein.

Smart Contracts und ihre Bedeutung

Die eigentliche Bedeutung von Smart Contracts betrifft ihre Natur und Positionierung. Für ein bestimmtes Szenario - sagen wir, eine Person A bewegt Mittel zu Person B, wenn B einen Dienst abschließt - wird eine Kopie des Smart Contracts gespeichert und von den Blockchain-Nodes ausgeführt. Smart Contracts werden als Vertragscodes innerhalb der Kette gespeichert. Diese Mehrwegevalidierung ist ein blockchain-zentrisches Merkmal und hält die Dinge sicher.

Darüber hinaus gibt es sequenzielle oder synchrone Smart Contracts und asynchrone Smart Contractswo Aufgaben parallel ausgeführt werden. Daher bestimmt der Typ und Zweck eines Smart Contracts, wie er geschrieben, gelesen oder sogar überprüft wird.

Traditionelle Verträge, Grundbucheinträge, Testamente usw. gehören zum Privatrecht, das „von Privatpersonen und nicht von Politikern oder Regierungsbeamten verfasst wird.“ Smart Contracts sind eine neue Form einer solchen dezentralen Regelsetzung.https://t.co/EU2Y28FznK
— Nick Szabo (@NickSzabo4) 15. März 2018

Betrachten wir einen standardmäßigen Smart-Contract-gesteuerten Liquiditätspool.

Stellen Sie sich vor, dass der Pool von Token zum Handel verwendet werden kann, und jedes Mal, wenn ein erfolgreicher Handel stattfindet, werden 0,3% des Gesamthandelswerts an den Liquiditätsanbieter gesendet, der diesen Handel ermöglicht hat oder Liquidität für dieses handelbare Asset hinzugefügt hat. Alle Bedingungen, die die Handelsszenarien, Handelsgebühren und die Bedingungen für Nichterfüllung und Handelsfehler hervorheben, sind als Smart Contract codiert.Smart Contract, das als Vertragscode in der Kette gespeichert ist.

Eigenschaften von Smart Contracts

Wir können nicht tief in das Lesen, Schreiben und Prüfen von Verträgen eintauchen, wenn wir uns nicht ihrer Eigenschaften bewusst sind. Hier sind die standardmäßigen Smart Contract Merkmale, die man kennen sollte:

Ein paar Merkmale eines Standard-Smart-Vertrags: BeInCrypto

Programmierbare Verträge

Smart Contracts sind einfach Code-Stücke. Sie können Smart Contracts schreiben, um Befehle und Szenarien basierend auf spezifischen Bedingungen auszuführen. Aus diesem Grund sind Smart Contract-Entwickler und Programmierer derzeit gefragt, da die meisten der DeFiDer Weltraum verlässt sich bereits auf Smart Contracts, um komplexe Fälle wie die Abwicklung von Handelsgebühren in Liquiditätspools zu bearbeiten, aufrechtzuerhaltenAPYVerhältnisse und mehr.

Vertrauenslos

Smart Contracts, die auf der Blockchain liegen, eliminieren menschliches Eingreifen. Dies macht sie vollständig vertrauenswürdig. Zum Beispiel, wenn ein spezifischer DeFiProtokoll, das von Smart Contract(s) gesteuert wird, sich darauf einigt, Ihre Vermögenswerte zu liquidieren, sobald der Wert unter einen Schwellenwert fällt, keine menschliche Intervention kann oder sollte dies stoppen. Der Code regelt Zahlungen, Leistung, Management und Regelvollstreckung und macht den gesamten Raum vollständig vertrauenswürdig.

Autonom

Wie bereits erwähnt, sind Smart Contracts mit selbstausführenden Befehlssätzen ausgestattet. In Bezug auf die Codierung bedeutet dies, dass Iterationen und Schleifen in den Textbaustein eingebaut sind. Dadurch wird sichergestellt, dass Aufgaben wie Zahlungen, Auszahlungen, Einzahlungen, die Bestrafung von Validatoren durch Slashing und verschiedene andere Aufgaben autonom erledigt werden.

Gesichert

Und schließlich sind Smart Contracts durch Kryptographie gesichert, so dass es wahnsinnig schwierig ist, sie zu verletzen. Ohne eine eingebaute Schwachstelle würde das Umgehen eines Smart Contracts bedeuten, dass man versucht, ihn im offenen, vor der gesamten Blockchain zu verletzen.

Überprüfbar

Transaktionen, die über Smart Contracts abgewickelt werden, sind selbstüberprüfbar. Das bedeutet, dass die Ausführung allein der Beweis dafür ist, dass die Transaktion überhaupt stattgefunden hat, da kein menschliches Element beteiligt ist. Der selbstüberprüfbare Mechanismus gibt Smart Contracts einen Vorteil gegenüber traditionellen Verträgen, die die Regelung von Legacy-Bankensystemen regeln.

Also das nächste Mal, wenn Sie planen, einen Smart Contract zu lesen, stellen Sie sicher, dass das Boilerplate oder die Dokumentation alle genannten Merkmale enthält.


Eine vereinfachte Version von Smart Contracts: Reddit

Lesen von Smart Contracts basierend auf den Eigenschaften

Hier ist ein einfacher, intelligenter Vertrag, der ein Treuhandkonto darstellt. Benutzer zahlen ihre Gelder auf das Treuhandkonto ein, das sie dann nach einem bestimmten Zeitraum an den Empfänger überweist.

/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// State variablesaddress public depositor; // Konto hinterlegt etheraddress zahlbar öffentlicher Begünstigter; // Konto, das etheruint256 public releaseTime erhält; // Zeitstempel für die Freigabe von Ether// Ereignisse zur Überprüfung der Vertragsaktivitätevent Deposited(Adresse indiziert _from, uint256 _value); event Released(Adresse indiziert _to, uint256 _value);// Der Vertragskonstruktor initialisiert den Smart Contractconstructor(Adresse zahlbar _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, "Der Freigabezeitpunkt muss in der Zukunft liegen");    Sicher und vertrauenslos: Vertrag bindet Einleger und begünstigten Einleger = msg.sender;    Begünstigter = _beneficiary;    releaseTime = _releaseTime;}Einzahlungsfunktion – autonome Ausführung (Fallback-Funktion)receive() external payable { emit Deposited(msg.sender, msg.value);}Geben Sie den Ether an den Empfänger freiFunktion release() public { // Programmierbar: Kann nur nach releaseTime ausgeführt werden require(block.timestamp >= releaseTime, "Zu früh zum Freigeben");    Autonom: Wird automatisch basierend auf der Bedingung uint256 amount = address(this).balance ausgeführt;    Begünstigter.transfer(Betrag);    edie Freigegeben(Begünstigter, Betrag);}}

Während wir diesen Smart Contract im Detail entschlüsseln und lesen werden, lassen Sie uns zunächst überprüfen, ob er den genannten Vertragsmerkmalen entspricht.

Der "programmierbare" Teil

Schauen Sie sich den Vertrag genau für dieses Stück Code an:

require(block.timestamp >= releaseTime, "Zu früh zum Freigeben");

uint256 betrag = address(this).balance;

begünstigter.transfer(betrag);

Die Gelder sollen nur freigegeben werden, wenn eine bestimmte Freigabezeit-Bedingung erfüllt ist, was diese programmierbaren Verträge betrifft.

Der „trustless“ Teil

Hier ist ein schnelles Code-Snippet aus dem obigen:

Einzahler = msg.sender;

begünstigter = _begünstigter;

releaseTime = _releaseTime;

Im Vertrag ist jeder vom Einzahler bis zur Person, die die Gelder erhält, codegebunden. Niemand muss mit dem anderen interagieren oder ihm vertrauen, da die Funktion der Geldüberweisung durch releaseTime gebunden ist - ein codebasierter Parameter.

Der „autonome“ Teil

Hier ist der "Fund Release"-Teil des Codes:

 function release() public {require(block.timestamp >= releaseTime, "Zu früh zum Freigeben"); uint256 amount = address(this).balance; Begünstigter.transfer(Betrag); edie Freigegeben(Begünstigter, Betrag);}

Der gesamte Prozess ist autonom, da Mittel nur freigegeben werden, wenn die Freigabezeit ein bestimmtes Kriterium erfüllt. Beachten Sie, dass der Code nicht teilweise programmierbar, sondern vollständig autonom ist.

Andere Elemente des Smart Contract-Codes, einschließlich der Einzahlungsfunktion, können ebenfalls vollständig autonom gemacht werden, je nach den Funktionen, die Sie einbeziehen möchten. Sie können beispielsweise einen wiederkehrenden Einzahlungsplan starten, jedes Mal, wenn der Benutzer Brieftascheüberschreitet 100 $, wobei der überschüssige Betrag an den Begünstigten überwiesen wird.

Der „gesicherte“ Teil

Besorgt, welches Element verleiht Sicherheitzum Vertrag? Schauen Sie sich diesen Teil des Codes an:

constructor(address payable _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, “Release time must be in the future”);depositor = msg.sender;beneficiary = _beneficiary;releaseTime = _releaseTime;}

Beachten Sie, wie es eine festgelegte Priorität der releaseTime-Funktion in Bezug auf den Zeitstempel gibt. Nichts geschieht zufällig, und Bedingungen müssen erfüllt sein.

Der „überprüfbare“ Teil

Jede Transaktion, die mit dem Smart Contract verbunden ist, wird dank separater Protokollierungsaktivitätselemente innerhalb der Kette protokolliert.

event Deposited(address indexed _from, uint256 _value);

event Released(address indexed _to, uint256 _value);

emit Deposited(msg.sender, msg.value);

emittieren Freigegeben (Begünstigter, Betrag);

Lesen anderer Teile eines Smart Contracts

Nun, da wir die Elemente identifiziert haben, die die Merkmale eines Smart Contracts definieren, sind hier die anderen Vertragsbestandteile, um Ihnen zu helfen, den Vorgang besser zu verstehen.

Pragma Solidität ^0.8.0; – Die Version der Solidität-Programmiersprache, die zum Verfassen dieses Smart Contracts benötigt wird.

// SPDX-Lizenzkennzeichnung: MIT – Dieser Kennzeichner gibt die Lizenz für die Code-Freigabe an. Es ist ratsam, dies einzuschließen, damit die Leute wissen, ob es Open Source ist und ob daran gearbeitet werden kann oder nicht.

Zeitverriegelungsvertrag { - Weist dem Smart Contract einen Namen zu, ähnlich wie ein Label.

Adresse des öffentlichen Einzahlers; - Da der Vertrag einen Einzahler und einen Begünstigten betrifft, ist dies der Punkt, an dem die öffentliche Adresse des Einzahlers erwähnt wird. Diese Variable ist dieEthereum WalletAdresse und ist öffentlich einsehbar.

Anschrift des zahlbaren öffentlichen Begünstigten; – Dies ist die öffentliche Adresse des Begünstigten, an die das Treuhandkonto Gelder überweist. Es ist auch lesbar und verleiht Blockchain-basierten Smart Contracts ein Gefühl der Transparenz.

Uint256 public releaseTime; – Da es sich um einen zeitgebundenen Vertrag handelt, weist der uint256 dem Vertrag die zeitbasierte Variable zu. Dies wird der Zeitrahmen sein, in dem die Fondsfreigaben erfolgen werden.

In Solidity ist uint (unsigned integer) der Weg, um wertebasierte Ganzzahlen zuzuweisen. Der Suffix 256 steht für eine große Speicherung von Zahlen.

Nach 5 Jahren des Schreibens von Smart Contracts erkenne ich erst heute, dass das Solidity-Logo das Ethereum-Logo entfaltet 🤯 ist pic.twitter.com/wlM369Eff9
— kaden.eth (@0xKaden) 8. Juli 2023

Du kannst in Betracht ziehen Solidity-Dokumentationmit der Syntax, Ausdrücken und anderen Codeelementen vertraut zu werden.

Sonstige Elemente

constructor(address payable _beneficiary, uint256 _releaseTime) { – Der "Konstruktor" ist eine einmalige Sonderfunktion, die aufgerufen wird, wenn der Smart Contract bereitgestellt wird. Sie setzt den Vertrag in Gang. Beachten Sie, dass an dieser Stelle alle zuvor deklarierten Adressvariablen aufgerufen und initialisiert werden.

Receive() external payable { – Dies ist eine spezielle Funktion, die aufgerufen wird, wenn Gelder von außerhalb an die Vertragsadresse verschoben werden. Extern schlägt von außen vor, und "Zahlbar" definiert die Art der Bewegung, d. h. den Erhalt von ERC-20-Token.

Funktion release() public { - Dies ist eine öffentliche Funktion, die die Bewegung von ERC-20-Token von der Vertragsadresse zum Begünstigten angibt. Diese Funktion hängt von releaseTime ab.

All diese Elemente sind Teile des hypothetischen Treuhandvertrags, über den wir gesprochen haben. Stellen Sie sicher, dass Sie die gesamte Solidity-Dokumentation durchgehen, um die Sprache besser kennenzulernen.

Kenne die Elemente, bevor du planst, Smart Contracts zu schreiben: BeInCrypto

DApps und Smart Contracts: die Beziehung

Inzwischen sollten Sie einen Vorsprung beim Lesen und Verstehen eines bereits geschriebenen Smart Contracts haben. Und viele Smart Contracts, wie die, die wir besprochen haben, bilden das Backend einer dezentralen Anwendung – ein BlockchainVersion einer Standard-Mobilanwendung.

Jedes Merkmal eines Smart Contracts, einschließlich Vertragssicherheit, autonomer und programmierbarer Ausführung, Vertrauenslosigkeit von Transaktionen und mehr, wird problemlos implementiert, während man eine dezentrale Anwendung entwickelt. Also, das nächste Mal, wenn Sie auf eine DApp stoßen, beachten Sie, dass es sich um ein Smart-Contract-betriebenes Backend handelt, das auf der Blockchain gehostet wird – und Ihnen hilft, mehrere Aufgaben ohne menschliches Eingreifen zu initiieren. Smart Contracts bilden die Logik von DApps.

Blockchains für Smart Contracts

Wir wissen, dass Sie mit Ethereum Smart Contracts entwickeln können, wie eine massive Softwarelösung. Es ist jedoch nicht das einzige Blockchain-Protokoll, das es gibt. Wenn Sie tief in die Welt der Smart-Contract-Entwicklung eintauchen möchten, sollten Sie sich andere Blockchains ansehen. Verschiedene Blockchains haben unterschiedliche Umgangsformen, wenn es darum geht, Verträge abzuschließen.

Aber zuerst wollen wir besprechen Ethereum— die Anlaufstelle für die meisten Smart-Vertragsentwickler.

Ethereum

Smart Contracts auf Ethereum werden in der Solidity-Programmiersprache geschrieben. Und die Token-Schnittstelle für diese Smart Contract-Entwicklungsplattform ist ERC-20.

Sie können zum Escrow-basierten Smart Contract zurückkehren, über den wir zuvor gesprochen haben, um zu sehen, wie ein Standard-Ethereum-basierter Smart Contract geschrieben wird.

Selbst das Starten eines ERC-20 Tokens auf der Ethereum-Blockchain ist ein Smart-Contract-intensives Feature, über das wir ausführlich sprechen werden, während wir einen Smart Contract schreiben.

Hier ist, wie eine grundlegende Code-Struktur aussieht, vorausgesetzt, wir planen, eine neue Kryptowährung BIC zu starten.

Betrachten Sie dies als ein hypothetisches Szenario. Nicht genau die Einführung einer BIC-Kryptowährung.

pragma Solidität ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";Vertrag BICToken ist ERC20 {    constructor(uint256 initialSupply) ERC20("BIC Token", "BIC") {        _mint(msg.sender, initialSupply);    }}

Wir werden jedes Element dieses Codes später besprechen, wenn wir unseren Smart Contract schreiben.

Andere Blockchains

Wie bei Ethereum können Sie sogar Smart Contracts auf Plattformen wie Solana, unter Verwendung von Rust und Cardano, unter Verwendung von Plutus, einem Teil von Haskell — einer funktionalen Programmiersprache.

"Gibt es bei Cordona überhaupt Smart Contracts?"
Witze über dich, Kumpel. #CardanoADA pic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 (@wilbot28) 9. Juli 2023

Hier ist die Struktur eines Codes in Rust (Solana) sieht aus wie:

Hinweis: Es handelt sich um einen einfachen Vertrag, bei dem ein Zähler inkrementiert wird.

use anchor_lang::prelude::*;declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter = 0;    Ok(())}pub fn increment(ctx: Context) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter += 1;    Ok(())}}

Wussten Sie schon? Während Rust die Programmiersprache zur Erstellung von Solana-basierten Smart Contracts ist, Ankerist das Smart-Contract-Entwicklungsframework, das verwendet wird. Um Smart Contracts mit Rust zu erstellen, müssen Entwickler Module aus dem Anchor-Framework ziehen - etwas, das die erste Zeile unseres Beispielscodes (use anchor_lang: enthält:prelude::*;) steht für.

Solana-DokumentationHilft Ihnen, die spezifische Rust-Smart-Contract-Sprache zu verstehen.

Ebenso verwendet Cardano Plutus als Sprachwahl, gefolgt von der Ink!-Sprache für Polkadot, TEAL für Algorand, C# für NEO und mehr. Es ist ratsam, die dokumentation für die jeweilige Blockchain im Detail zu erlernen, bevor mit der Erstellung von kompatiblen Smart Contracts fortgefahren wird.

Warum sollten Sie lernen, Smart Contracts zu lesen?

Die Fähigkeit, Smart Contracts zu schreiben, wird hoch angesehen, aber auch die Fähigkeit zu lesen bringt ihre Vorteile mit sich:

  1. Die Fähigkeit, mehr über die Automatisierungskomplexitäten im Zusammenhang mit DeFi-Apps zu erfahren.
  2. Analyse der mit dem Vermögensstandard verbundenen EigentumsstandardsTokenisierung.
  3. Das Verständnis, wie dezentralisierte autonome Organisationen (DAOs)Funktion.
  4. Verstehen und Implementieren von nutzungsfallgetriebener Logik im Zusammenhang mit Versicherungen, Inhaltsmonetarisierung, AbstimmungSystem, Lizenzgebühren und andere Bereiche.

Wie man Smart Contracts schreibt

Nun, da das Lesen von Smart Contracts erledigt ist, wollen wir uns auf das Schreiben von Smart Contracts konzentrieren. Bevor Sie tiefer eintauchen, ist es notwendig zu betonen, dass verschiedene Blockchains unterschiedliche Standards und Sprachen im Zusammenhang mit der Entwicklung von Smart Contracts haben könnten. Es ist notwendig, sich auf die von einer bestimmten Blockchain definierten Standards zu konzentrieren, um mit dem Schreiben und der Bereitstellung von Verträgen zu beginnen.

Für den Großteil unserer Diskussion werden wir uns auf Ethereum als die Kette und Solidity als die Sprache konzentrieren.

Die Rolle der Programmierung

Die Programmierung eines Smart Contracts ist leicht der wichtigste Teil des Entwicklungszyklus. Und um in die Entwicklung von Smart Contracts auf Ethereum oder einer anderen Blockchain einzusteigen, sollten Sie etwas Erfahrung mit nicht-blockchainbasierten Programmiersprachen wie Javascript haben.

Verschiedene Blockchains und die Sprache zum Schreiben von Smart Contracts: BeInCrypto

Die Möglichkeit, einen Smart Contract zu programmieren, ermöglicht es Ihnen, die Logik zu implementieren, die Sicherheitselemente desselben zu behandeln und den Code zu optimieren Gasgebühren, die gleiche anpassen und sie sogar interoperabel machen, wenn nötig.

EVM und Smart Contracts: eine Standortbestimmung

Jeder, der plant, Smart Contracts auf Ethereum zu schreiben, muss verstehen, was die Ethereum Virtual Machine (EVM) ist und wie sie mit Smart Contracts funktioniert. Zunächst einmal ist die EVM eine Ethereum-Komponente, die Programmen eine isolierte und kontrollierte Umgebung bietet, in der sie arbeiten können. Betrachten Sie dies als einen globalen Computer, der jeden einzelnen Vertragscode auf Ethereum hostet. Jeder Knotenauf dem Ethereum-Netzwerk läuft die EVM.

Wenn Sie davon träumen, ein Smart Contract-Entwickler zu werden, hier ist, was Sie über Smart Contracts und EVM wissen müssen.

Sobald Sie das Programm in Solidity geschrieben haben, das eine Hochsprache ist, müssen Sie es in Bytecode kompilieren - ein maschinenverständliches Niedrigpegel-Format. Dieser Bytecode gelangt in die Ethereum-Blockchain und verbleibt dort. Jeder, der mit dem Smart Contract interagiert, muss eine Transaktion an die Adresse des Vertrags senden.

Jeder Knoten mit installiertem EVM kann diese Transaktion sehen, und sobald die Validatoren dies genehmigen, wird der Smart Contract-Code ausgeführt. Da jeder Knoten Transaktions-Sichtbarkeit hat, kann nichts manipuliert werden, und der Code wird so ausgeführt, wie er geschrieben wurde. Und sobald der Code ausgeführt wird, ändert sich der Zustand der Blockchain, was den Prozess end-to-end und vollständig transparent macht.

Kann jemand einen Smart Contract schreiben?

Das Schreiben von Smart Contracts erfordert technisches Know-how. Aber das ist nicht alles. Sie müssen auch gründlich verstehen, wie die Blockchain-Technologie funktioniert, welche sprachspezifischen Anforderungen für die Blockchain relevant sind, die Sie anvisieren.Interoperabilität, und mehr. Darüber hinaus sollten Sie auch einiges über Smart Contract-Schwachstellen wissen - Dinge, die beim Schreiben von Code vermieden werden sollten. Und schließlich ist auch ein solides Wissen über Vertragsprüfung und Vertragsbereitstellung unerlässlich.

Das alles kann überwältigend werden. Hier ist also ein schneller Spickzettel, um loszulegen:

  1. Beginnen Sie damit, die Plattform oder Kette auszuwählen, mit der Sie arbeiten möchten.
  2. Lernen Sie die mit der Kette verbundene Programmiersprache, wie zum Beispiel Solidity für Ethereum.
  3. Erfahren Sie, wie Sie Entwicklungstools wie eine integrierte Entwicklungsumgebung wie Remix verwenden.
  4. Beginnen Sie damit, Ihren ersten Vertrag zu schreiben und ihn dann mit Testnetzen zu testen.
  5. Sobald Sie mit den Elementen des Codes zufrieden sind, können Sie ihn On-Chain bereitstellen. Denken Sie daran, dass das Bereitstellen des Vertrags On-Chain in Form von Gasgebühren anfällt.

Hier ist ein schneller Thread mit einigen Tipps zum Schreiben besserer Smart Contracts:

🥧 FREI-PI
‼️ Warum Smart Contract-Entwickler dies wissen MÜSSEN!
Funktion:
- Anforderungen
- Effekte
– Interaktionen
Protokoll
– Invarianten
Dies ist das Muster, über das Sie alle nachdenken sollten, wenn Sie Smart Contracts erstellen.
Hier ist warum 👇
— Patrick Collins (@PatrickAlphaC)6. Juli 2023

Eintauchen in die Programmierung

Es ist an der Zeit, sich mit den technischen Aspekten der Entwicklung von Smart Contracts zu befassen. Auch wenn Ketten wie Solana und Cardano es Ihnen ermöglichen, Smart Contracts zu entwickeln, bleibt Ethereum die beliebteste Plattform für die Entwicklung von Smart Contracts.

Wussten Sie schon? Im Jahr 2022 allein schafften es mehr als 100.000 dezentralisierte Anwendungen auf das Ethereum-Netzwerk.

Warum Ethereum?

Ethereum hat eine riesige Entwicklergemeinschaft. Alles, was Sie entwickeln, wird sofort Aufmerksamkeit erregen. Außerdem ist seine eigene Sprache, Solidity, relativ einfach für Personen, die sich mit Python oder JavaScript auskennen. Schließlich hilft die globale Software von Ethereum, EVM, bei reibungsloser Vertragsausführung.

Wenn Sie in der Mehrheit sind und Ethereum und Solidity bevorzugen, hier ist eine schnelle Liste von Dingen, die Sie verfolgen müssen, bevor Sie mit der Entwicklung von Smart Contracts beginnen:

  1. Pragma oder die Compiler-Version
  2. Vertragsdefinition zur Kennzeichnung
  3. Zustandsvariablen zum Speichern von Daten
  4. Ereignisse für EVM-Protokollierung
  5. Modifier, um bestimmten Institutionen spezifische Rechte zu geben
  6. Funktionen oder die Smart Contract-Aktivitäten im Spiel
  7. Vererbung für Interoperabilität
  8. Verständnis von Kontrollstrukturen wie if, else, for-Schleifen, Datentypen wie String, Integer und mehr.

Schreiben und Bereitstellen des ersten Smart Contracts

Nun, da wir wissen, wie Dinge auf der Kette ablaufen, wollen wir uns damit befassen, den ersten Smart Contract zu schreiben und zu deployen. Obwohl „Hello World“ nach wie vor der erste Schritt ist, werden wir damit beginnen, einen Smart Contract zu erstellen, um einen hypothetischen BIC-Token mit einem zu 100% freigeschalteten Vorrat von 1 Million zu starten.

Die Grundlagen

Der erste Schritt besteht darin, die neueste Version von Node.js und dem NPM oder Node Package Manager zu installieren. Dies kümmert sich um die Entwicklungswerkzeuge und die lokale Entwicklungsumgebung. Außerdem ermöglichen Ihnen Node.js und NPM, das Web-Front-End für Ihren Smart-Vertrag festzulegen.

Jetzt müssen Sie eine IDE einrichten, um den Vertragscode zu schreiben. Dafür können Sie Visual Studio Code schnell installieren. Oder Sie können den Ballast abschneiden und hopauf Alchemie - einer Blockchain-Entwicklungsplattform. Mit Alchemie können Sie etwas Testnetz-ETH erhalten. Dies wird die Gasgebühren abdecken, wenn Sie den Smart Contract auf das Goerli-Testnetz oder sogar das Sepolia-Testnetz bereitstellen.

Beachten Sie, dass Sepolia ein jüngeres Testnetz ist und daher weniger Festplattenspeicherplatz bei der Knotenbereitstellung benötigt.

Vorerst werden wir mit dem Goerli-Testnetzwerk fortbestehen, da es eine größere Anzahl von implementierten Anwendungen hat.

Mit dem Testnetz und dem gefälschten ETH bereit, gehen wir speziell zum Schreiben des Smart Contracts über. Hier ist der Code-Schnipsel zum Erstellen eines BIC-Token mit einer festen Versorgung von 1 Million.

Hinweis: Wir werden unseren Smart Contract lokal auf dem MacOS und nicht im Testnetz bereitstellen. Für die Testnet- und Mainnet-Bereitstellung von Smart Contracts werden wir einen separaten Artikel haben, der den Rahmen dieser Diskussion sprengen würde.

Schritte zum Schreiben und Bereitstellen

Hier ist der einfache Code-Schnipsel für den hypothetischen Token:

pragma Solidität ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; Vertrag BICToken ist ERC20 {    Konstruktor() ERC20("BIC Token", "BIC") {        _mint(msg.sender, 1000000 * 10 ** Nachkommastellen());    }}

Wenn Sie mit der Syntax vertraut sind, würden Sie wissen, was jeder Codebestandteil bedeutet. Was das OpenzepplinEs handelt sich um die Bibliothek zur Importierung von ERC-20 Smart Contracts. Diese Bibliothek bietet die grundlegenden Betriebsstandards für ERC-20 Tokens.

Die Münzfunktion spricht über das anfängliche Angebot, das an die Smart Contract-Adresse oder den msg.sender bereitgestellt wird.

Um diesen Code lokal einzurichten und zu testen, werden wir drei Komponenten benötigen:

  1. Node.js und NPM (bereits besprochen): Funktioniert wie ein Motor zur Unterstützung Ihrer Smart Contracts
  2. Trüffel: Funktioniert wie ein Werkzeugkasten und hilft Ihnen dabei, Code, Skripte und andere Teile eines Vertrags zu organisieren
  3. Ganache: Funktioniert wie ein virtueller, auf dem Gerät befindlicher Spielplatz. Denken Sie an es wie an eine persönliche Blockchain.

Was ist Vertragsausführung?

Wenn Sie den detaillierten Prozess des Schreibens eines Smart Contracts durchlaufen haben, ist es unerlässlich, einiges über die Vertragsausführung zu wissen. Es handelt sich um einen Prozess, bei dem der Smart Contract-Code von den Knoten auf einer Kette ausgeführt wird.

Es ist die Einheitlichkeit der Vertragsdurchführung, die Smart Contracts transparent und unveränderlich macht. Lassen Sie uns nun den schrittweisen Prozess der Vertragsdurchführung verstehen:

Schritt 1

Die Code-Schnipsel, die wir geschrieben haben, müssen irgendwo ausgeführt werden. Im Falle von Smart Contracts ist dieser Ausführungsort die Blockchain. Die Knoten oder die teilnehmenden Mitglieder der Kette helfen bei der Ausführung des Vertrags.

Schritt 2

Die Knoten übernehmen die Verantwortung für die Ausführung von Vertragscodeblöcken im Gegenzug für kettenbezogene Anreize. Jeder Befehl oder jede Aktion, die innerhalb der Kette stattfindet, wird von Smart Contracts geleitet.

Schritt 3

Jeder Smart Contract hat eine spezifische Adresse. Zur Ausführung des Vertrags werden Transaktionen an diese Vertragsadresse gesendet. Beachten Sie, dass jeder Knoten den EVM ausführt, der dann eine Kopie des Smart Contract-Codes enthält, was es einfacher macht, die Echtheit der Transaktionen zu überprüfen.

Schritt 4

Die Transaktionen, die auf den Smart Contract abzielen, werden von den Validatoren ausgewählt, die sie dann in spezifische Blöcke einbeziehen.

Schritt 5

Sobald die Transaktion durchgeführt und erfolgreich validiert wurde, wird sie Teil der Blockchain. Die mit der Transaktion verbundene Smart Contract-Funktion wird dann aufgerufen und über die Blockchain-Knoten ausgeführt.

Schritt 6

Jeder Knoten, der den Smart Contract ausführt, sollte zu einem deterministischen Schluss kommen - dem gleichen Ergebnis für den gleichen Satz von Eingaben -, was die Natur der Verträge vollständig vertrauenswürdig und transparent macht.

Hinweis: Jeder Fehler im Zusammenhang mit der Codeausführung oder Probleme im Zusammenhang mit Gasgebühren macht die Transaktionen rückgängig. Dies bedeutet, dass die Transaktion auf Basis eines bestimmten Smart-Vertragscodes nicht mehr existiert. Genau das passiert mit Flash-Kreditewenn die Unfähigkeit, sich an bestimmte Normen zu halten, die gesamte Transaktion umkehrt und scheinbar den Eindruck vermittelt, dass die Mittel überhaupt nicht bewegt wurden.

Jeder Statuswechsel, der mit Smart Contracts verbunden ist, wird innerhalb der Blockchain aufgezeichnet und wird zu einem unveränderlichen Bestandteil davon.

Smart Contract-Entwicklung und bewährte Praktiken

Nun, da Sie ziemlich viel über Smart Contracts wissen, hier sind ein paar Hinweise, um mit der Vertragsentwicklung zu beginnen:

  1. Beim Schreiben von Verträgen ist es ratsam, sich auf vertrauenswürdige Bibliotheken wie diejenigen von OpenZeppelin zu verlassen, um die gewünschten Code-Optimierungs- und Sicherheitsstandards einzuhalten.
  2. Die Idee ist, den Vertrag modular und einfacher zu halten – was das Testen und Überprüfen erleichtert.
  3. Eine gute Idee ist die Implementierung von vertragspezifischen Zugriffskontrollen. Dies bedeutet, dass Codebits deklariert werden, in denen nur eine bestimmte Person oder Entität die wesentlichen Merkmale des Vertrags ändern kann. Der Zugriffsschutz erleichtert es, die Smart Contracts sicher zu halten.
  4. Beim Verfassen eines Vertrags sollten immer Vorkehrungen für die Behandlung von Randfällen und Ausnahmen getroffen werden — und das alles bei der Erstellung mehrerer Tests.

Für die Nachhaltigkeit des Codes sorgen

Jede der oben genannten Methoden hilft bei der Codeoptimierung und sicherheitsspezifischen Implementierungen. Es gibt jedoch einige vertragsspezifische Praktiken, die Sie befolgen und implementieren müssen, um die Nachhaltigkeit des Codes zu gewährleisten. Dies zielt darauf ab, den Vertragscode leicht und nutzbar zu halten, so dass jeder Knoten, der dasselbe ausführt und ausführt, nicht viel Rechenleistung dafür aufwenden muss.

  1. Behandeln Sie den Speicher effizient, indem Sie kleinere Datensätze verwenden. Verwenden Sie beispielsweise beim Schreiben eines Vertrags uint8 als den operationellen Wert anstelle von uint256.
  2. Beim Schreiben eines Vertrags ist es ratsam, den Code zu optimieren, indem mehrere Operationen kombiniert werden. Wir werden in unserem ausführlichen Beitrag zu „Schreiben von Smart Contracts“ genauer darauf eingehen.
  3. Eine gute Idee ist es, bei der Ausführung von Smart Contracts die träge Auswertung zu verwenden. Auf diese Weise müssen Sie eine Funktion nur dann ausführen, wenn dies erforderlich ist, und nicht jedes Mal, wenn etwas an die Adresse des Smart Contracts geschoben wird.
  4. Schließlich ist es auch eine gute Möglichkeit, sich auf nachgelagerte Berechnungen zu verlassen, um sich auf Nachhaltigkeit zu konzentrieren. Dies hilft, die Anforderungen an die Gasgebühr zu senken und kann sogar die Vertragsausführung beschleunigen.

Trotz Einhaltung der besten Praktiken beim Schreiben und Entwickeln von Smart Contracts ist es notwendig, sich auf die Sicherheitslücken des Vertrags zu konzentrieren, wenn sie auf das Hauptnetz geschoben werden.

Wie überprüft man Smart Contracts?

Jeder Smart Contract, der im Mainnet präsent ist, muss auf Codeleistung, Sicherheit und andere Eigenschaften überprüft werden. Hier kommt die Prüfung - ein rigoroser Vertragsprüfungsprozess - ins Spiel, der es Ihnen ermöglicht, potenzielle Vertragslücken und Schwachstellen aufzudecken.

Hier ist eine schnelle Prüfliste, um loszulegen:
Erstaunliche Smart Contracts Audit Checkliste😈
Stellen Sie sicher, dass Sie sie bei Ihrer nächsten Prüfung überprüfen✅
Ich würde mich über einen Retweet freuen, verbreite das Wissen🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv)7. Juli 2023

Beziehung zwischen Lesen, Schreiben und Prüfen: Warum überhaupt Smart Contracts prüfen?

Während das Lesen und Schreiben von Smart Contracts miteinander verflochten sind, wenn es um die Entwicklung intelligenter Codestücke geht, nimmt das Auditing einen besonderen Platz ein und beinhaltet die Überprüfung der Logik in erster Linie. Wenn es um die Blockchain-basierte Codeausführung geht, ist alles unveränderlich, und jede Katastrophe kann irreversible Folgen für die Vertragsausführung haben. Genau aus diesem Grund ist eine gründliche Prüfung des Vertragskodex und anderer Aspekte durch Audits notwendig.

Vertragsanfälligkeiten und Fixes

Es kann eine Vielzahl von Vertragsanfälligkeitendie bei einer ausführlichen Smart Contract-Prüfung identifiziert werden können. Dazu gehören die Überprüfung auf Reentrancy-Angriffe, Überläufe oder Unterläufe, Probleme im Zusammenhang mit dem Zugriffssteuerung und mehr. Sobald die genaue Art des Problems festgestellt ist, kann der Prüfer sogar die besten Praktiken vorschlagen, um das Problem zu beheben.

Verstöße werfen Studien und Erkenntnisse

Immer noch unsicher, wie die Überprüfung von Smart Contracts helfen kann? Nun, lassen Sie uns auf den berüchtigten Fall zurückkommen DAO Hack im Jahr 2016, der ein Reentrancy-Problem ausnutzte und einen Verlust von fast 3,6 Millionen ETH verursachte. Ähnlich verhält es sich mit dem Parity-Wallet-Vertragshack im Jahr 2017, der zu einem Verlust von fast 500.000 ETH führte. Diese Probleme hätten mit den richtigen Audits vermieden werden können.


DAO Hack-Flussdiagramm: BeInCrypto

Strategien zur Überprüfung von Smart Contracts

Es gibt zahlreiche Strategien zur Überprüfung von Smart Contracts. Einige der beliebteren Methoden sind:

Prüfwerkzeuge

Diese Tools fungieren als erste Verteidigungslinie und eignen sich am besten zur Lokalisierung gängiger Sicherheitslücken. Zu den beliebteren Tools gehören Securify, Mythril und weitere, die in der Lage sind, eine statische Analyse des Codes durchzuführen, Verletzungsmuster zu erkennen und einen sicherheitsspezifischen Vorsprung zu ermöglichen.

Tools zur Überprüfung von Smart Contracts: BeInCrypto

Code-Überprüfung

Hier kommen manuelle Code-Reviewer ins Spiel, die die Codebasis durchleuchten und komplexe Sicherheitslücken identifizieren, falls vorhanden. Eine manuelle Überprüfung kann sich um die Geschäftslogik, den Kontext und die Nutzungs-muster kümmern.

So helfen Ihnen manuelle Code-Reviews dabei, Bedrohungen zu lokalisieren:

Eine kleine Wissensfrage für unsere jüngeren Wirtschaftsprüfer!
Lass uns gehen und retweeten, wenn du den Bug gefunden hast!pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles)8. Juli 2023

Automatische Scans

Werkzeuge wie Snyk und GuardRails helfen bei der automatischen Vertragsscannung - eine Sicherheitsimplementierung, die jedes Mal aufgerufen wird, wenn der Code aktualisiert wird. Diese Form der Prüfung stellt sicher, dass neue Änderungen am Code sicher und nicht invasiv sind.

Formale Überprüfung

Dies ist ein komplexer Prozess, der ausschließlich darauf beruht, die Geschäftslogik des Codes zu überprüfen. Beachten Sie, dass die formale Verifikation tatsächlich nicht dazu gedacht ist, die Syntax zu überprüfen, sondern nur die Logik zu überprüfen, um zu sehen, ob der Code wie gewünscht ausgeführt wird.

Neben den genannten Strategien kann die Auditierung von Smart Contracts auch durch Peer-Reviews, Bug-Bounty-Programme und Testabdeckungen mithilfe von Tools wie der Solidity Coverage zur Maximierung der Effektivität initiiert werden.

Ein einfacher Weg, um Smart Contracts zu überprüfen: BeInCrypto

Wie überprüft man den Code richtig?

Wenn Sie neu in der Überprüfung von Smart Contracts sind, ist es wichtig zu beachten, dass es zwei Möglichkeiten gibt, den Code umfassend zu analysieren und Probleme zu identifizieren. Dazu gehören:

Statische Analyse

Diese Art der Codeanalyse hilft bei der Identifizierung grundlegender Sicherheitslücken, Codierungsfehler und anderer Probleme gemäß den angegebenen Codierungsstandards und -konventionen. Bedrohungen wie ungeprüfte Aufrufe externer Quellen, Ganzzahlüberläufe und mehr können mithilfe der statischen Analyse hervorgehoben werden. Das Beste an der statischen Analyse ist, dass der Code nicht ausgeführt werden muss, damit er überprüft werden kann.

Dynamische Analyse

Dieser Ansatz zur Prüfung testet die Ausrichtung des Codes mit dem EVM. Anstatt nur den Code zu überprüfen, überprüft die dynamische Analyse die Reaktion von Smart Contracts auf eine Vielzahl von Eingaben. Die dynamische Analyse kann Probleme wie inkohärente Gasverbrauch und sogar fehlerhafte Vertragslogik identifizieren. Persönliche Blockchain-Umgebungen wie Ganache können als Plattformen für die dynamische Analyse fungieren, die es Entwicklern ermöglichen, Transaktionen durchzuführen, Befehle auszuführen und vieles mehr mit ihren Verträgen zu tun.

Testen eines tatsächlichen Code-Stücks

Hier ist ein Smart Contract-Schnipsel, der als Fondsspeicher fungiert und eine Abhebungsfunktion hat:

Pragma-Solidität ^0.6.1; contract VulnerableContract { mapping(address => uint256) öffentliche Salden;    function deposit() public payable { balances[msg.sender] += msg.value;    } function withdraw(uint256 _amount) public { require(balances[msg.sender] >= _amount, "Unzureichender Saldo.");        (bool success, ) = msg.sender.call{Wert: _amount}("");        require(success, "Übertragung fehlgeschlagen.");        balances[msg.sender] -= _amount;    }}

Wenn Sie den Code genau betrachten, gibt es eine Schlüsselverwundbarkeit:

In dem vorherigen Fall kann die "withdraw"-Funktion erneut aufgerufen werden, wenn der Benutzer, der die Gelder erhält, auch ein Smart Contract ist, wenn auch bösartig. Daher kann vor dem letzten Funktionsaufruf oder der Bilanzaktualisierung ein Reentrancy-Angriff gestartet werden, um zusätzliche Gelder zu transferieren. Erfahrene Prüfer identifizieren diese Art von Schwachstelle.

Hier ist der behobene Code dafür:

function withdraw(uint256 _amount) public {    require(balances[msg.sender] >= _amount, "Unzureichendes Guthaben.");    balances[msg.sender] -= _amount;    (bool success, ) = msg.sender.call{value: _amount}("");
require(success, “Transfer failed.”);}

Überprüfen Sie, wie die Aktualisierungsfunktion für das Gleichgewicht zuerst aufgerufen wird und dann der erste Schritt zum Benutzer erfolgt. Diese Änderung in der Betriebsreihenfolge ist das, was den Vertrag repariert.

Nicht-Ethereum-Ketten und Codeüberprüfung

Die Welt der dezentralen Anwendungen und Smart Contracts hat sich über Ethereum hinaus bewegt. Obwohl der Großteil des Geschehens immer noch innerhalb des Ethereum-Ökosystems stattfindet, gibt es andere Ketten wie Cardano, Solana und mehr, die Smart Contracts unterstützen und unterschiedliche Prüfungsstandards erfordern.

Warum ist jede Plattform einzigartig?

Verschiedene Blockchains verwenden verschiedene Programmiersprachen. Die Semantik, Syntax und Eigenschaften des Codes sind unterschiedlich, wodurch die Smart Contracts auf unterschiedliche Schreib- und Prüfpraktiken reagieren. Zum Beispiel verwendet Ethereum Solidity, wohingegen Polkadotverwendet Ink und Rost — was es reaktiv auf spezifische Prüfstandards macht.

Werkzeuge für den Wechsel von Ethereum

Wenn Sie über Ethereum hinausgehen möchten, gibt es einige spezialisierte Prüfungs-Tools, mit denen Sie beginnen können. Zum Beispiel gibt es bei Cardano die Marlowe-Suite für formale Verifikation und Prüfung. Wenn es um Solana geht, sind Rust-spezifische libfuzzer und cargo-fuzz für Prüfung und Vertragsprüfung gedacht. Ein Multi-Chain-Revisor muss mit diesen Konzepten vertraut sein, um Vertragsanfälligkeiten in Schach zu halten.

Welche Arten von Smart Contract-Prüfungen gibt es?

Nur zur Wiederholung: Sie können die Überprüfung von Smart Contracts in drei Arten unterteilen: manuell, automatisch und hybrid. Beachten Sie, dass Menschen hybride Prüfstrategien für komplexe Verträge mit tiefgreifender Geschäftslogik bevorzugen, da sie am umfassendsten sind.

Outsourcing Ihrer Prüfungen

Organisationen und Einzelpersonen mit minimalem Programmierwissen lagern oft ihre Schreib- und Prüfanforderungen an renommierte Unternehmen aus. Bei der Prüfung ist die Auswahl des richtigen Unternehmens umso wichtiger, da auch wenn KI-WerkzeugewieChatGPTkann beim Schreiben von Smart Contract-Code helfen, das Überprüfen erfordert manuelle Einblicke.

Außerdem sind hier die Faktoren zu beachten, während die Prüfaufgaben ausgelagert werden:

Die Wahl der richtigen Firma

Bevor Sie sich auf das richtige Outsourcing-Unternehmen konzentrieren, ist es entscheidend, vergangene Prüfungen zu überprüfen, die Erfahrung zu bewerten und sogar auf die Schlüsselmitglieder des Teams zu achten.

Verantwortlichkeiten, Kosten und Overheads verstehen

Bevor Sie eine Einstellung vornehmen, beachten Sie die Kosten und Dienstleistungen im Zusammenhang mit den Audits. Es ist unerlässlich, zunächst die Art der angebotenen Dienstleistungen zu verstehen — wie die Identifizierung von Problemen, die Lösung von Problemen und mehr. Sie müssen auch überprüfen, ob auch Nachaudits nach Implementierung der ersten Fehlerbehebungslinie vorgesehen sind. Die Kosten für eine Smart Contract-Prüfung können je nach den angebotenen Dienstleistungen variieren, und daher ist es notwendig, jede Anforderung und jedes Angebot vor dem Fortfahren zu verfolgen.

Beste Praktiken für die Überprüfung von Smart Contracts

Wenn Sie ein Unternehmen verlassen und Smart Contracts selbst prüfen möchten, sollten Sie die besten Strategien und Praktiken im Auge behalten:

  1. Konzentrieren Sie sich immer auf eine gründliche Codeüberprüfung, einschließlich der Syntax und Logik
  2. Beginnen Sie damit, häufige Sicherheitslücken mithilfe von Tools wie Slither, MythX und weiteren zu erkennen
  3. Durchsuchen Sie das Smart Contract Weakness Classification Registry oder SWC, um die bekannten Schwachstellen zu finden und diese im Voraus zu überprüfen.
  4. Testen Sie die Smart Contracts gründlich, einschließlich Integrationstests, Modultests und mehr, um den Code in einer Vielzahl von Szenarien zu überprüfen.
  5. Es ist wichtig, speziell nach den Chancen für Reentrancy-Angriffe zu suchen. Der beste Weg, dem entgegenzuwirken, besteht darin, nach rekursiven Aufrufen zu suchen, die Hacker vor der ersten Funktion des Smart Contracts aufrufen können.
  6. Konzentrieren Sie sich auf Funktionen, die zu externen Aufrufen führen. Ein Fehler in dieser Hinsicht kann den Zustand und den Kontrollfluss verändern, was nicht wünschenswert ist.
  7. Halten Sie immer ein Auge auf Codebits, die auf den Gasverbrauch hinweisen. Sie möchten nicht, dass Ihr Vertrag Interaktionen initiiert, die prohibitiv teuer sind.

Smart Contract-Entwicklung und KI: die Zukunft

Künstliche Intelligenz macht es tatsächlich einfacher, Smart Contracts zu schreiben. Unabhängig von KI-Innovationen erfordert die Fähigkeit, Smart Contracts auf bestmögliche Weise zu überprüfen, jedoch nach wie vor menschliches Eingreifen. Wenn Sie also planen, Ihr nächstes Web3-Produkt mit Schwerpunkt auf Smart Contracts und dezentralen Anwendungen zu entwickeln, ist es entscheidend, sich konsequent auf die besten Prüfressourcen für Ihre Smart Contracts zu konzentrieren. Mit Kryptowährungs-Hacks und Sicherheitsverletzungen, die jeden Tag auftauchen, und Hacker, die neue Strategien planen, um durchzubrechen, ist die Überprüfung eines Vertrags auf Perfektion sicherlich eine der wichtigeren Fähigkeiten der modernen Zeit.

Haftungsausschluss:

  1. Dieser Artikel ist eine Wiedergabe von [Beincrypto], und das Urheberrecht liegt beim Originalautor [Ananda Banerjee]. Wenn Einwände gegen die Reproduktion bestehen, wenden Sie sich bitte an das Gate Learn-Team, und das Team wird diese umgehend gemäß den relevanten Verfahren bearbeiten.
  2. Haftungsausschluss: Die in diesem Artikel geäußerten Ansichten und Meinungen stellen nur die persönlichen Ansichten des Autors dar und stellen keine Anlageberatung dar.
  3. Andere Sprachversionen des Artikels werden vom Gate Learn-Team übersetzt. Ohne die Erwähnung von Gate.io ist es nicht gestattet, die übersetzten Artikel zu kopieren, zu verbreiten oder zu plagiieren.

Share

Verständnis von Smart Contracts: Lesen, Schreiben und Überprüfen

Erweitert11/26/2023, 12:41:25 PM
Dieser Artikel behandelt Smart-Vertragsprogrammiertechniken, einschließlich Richtlinien zum Lesen, Schreiben und Auditieren. Das Verständnis der Struktur und Codeblöcke von Smart Contracts ist der erste Schritt zu ihrer Programmierung in Solidity oder anderen Sprachen. Da Smart Contracts zentral für Decentralized Finance (DeFi) und dezentralisierte Anwendungen (DApps) sind, ist es entscheidend, ihre Sicherheit und Fehlerfreiheit sicherzustellen, wobei Smart-Contract-Audits eine Schlüsselrolle spielen.

Lesen von Smart Contracts

Smart Contracts sind programmierbare Codefragmente, die nur dann ausgeführt werden, wenn eine Reihe von Bedingungen erfüllt sind. Sie sind gleichbedeutend mit rechtlich bindenden realen Verträgen; nur in diesem Fall ist der Code das Gesetz. Da sich Smart Contracts auf der Blockchain befinden, sind sie unveränderlich — sie können nicht manipuliert werden. Gerade diese Unveränderlichkeit macht Smart Contracts unter anderem besonders.

Verständnis von Smart Contracts: Grundlagen und Zweck

Smart Contractssollen blockchain-spezifische Transaktionen automatisieren. Da es sich um bedingungsspezifische Verträge handelt, benötigen sie keine Vermittler. Was smarte Verträge nützlich macht, ist ihre Kompatibilität mit einer Vielzahl von Anwendungsfällen, einschließlich Finanzdienstleistungen, Lieferkettenmanagement und mehr. Und im Gegensatz zu traditionellen Codeblöcken, die auf einmal programmiert werden, erfordern smarte Verträge äußerst sichere und zeitaufwändige Strategien.

Wie Smart Contracts mit Blockchain-Technologie in Einklang stehen: BeInCrypto

"Das Schlagwort "Web3" suggeriert die laxen, sicherheitsarmen Programmiergewohnheiten des Webs. Wenn Krypto oder Smart Contracts wie eine Webseite programmiert werden, sind sie dem Untergang geweiht. Nachhaltig erfolgreiche Blockchains und ihre Apps basieren auf weitaus sichereren, sorgfältigeren und langsameren Programmiermethoden."

Nick Szabo, Kryptograph und Informatiker: Twitter

Smart Contracts können mit blockchain-spezifischen Tokens arbeiten, sagen ERC-20 für die Ethereum-Blockchain, um Bemühungen zu belohnen und Transaktionen zu erleichtern. Da Code, Bedingungen und Kosten beteiligt sind, sollten Sie beim Lesen, Schreiben und Prüfen vorsichtig sein.

Smart Contracts und ihre Bedeutung

Die eigentliche Bedeutung von Smart Contracts betrifft ihre Natur und Positionierung. Für ein bestimmtes Szenario - sagen wir, eine Person A bewegt Mittel zu Person B, wenn B einen Dienst abschließt - wird eine Kopie des Smart Contracts gespeichert und von den Blockchain-Nodes ausgeführt. Smart Contracts werden als Vertragscodes innerhalb der Kette gespeichert. Diese Mehrwegevalidierung ist ein blockchain-zentrisches Merkmal und hält die Dinge sicher.

Darüber hinaus gibt es sequenzielle oder synchrone Smart Contracts und asynchrone Smart Contractswo Aufgaben parallel ausgeführt werden. Daher bestimmt der Typ und Zweck eines Smart Contracts, wie er geschrieben, gelesen oder sogar überprüft wird.

Traditionelle Verträge, Grundbucheinträge, Testamente usw. gehören zum Privatrecht, das „von Privatpersonen und nicht von Politikern oder Regierungsbeamten verfasst wird.“ Smart Contracts sind eine neue Form einer solchen dezentralen Regelsetzung.https://t.co/EU2Y28FznK
— Nick Szabo (@NickSzabo4) 15. März 2018

Betrachten wir einen standardmäßigen Smart-Contract-gesteuerten Liquiditätspool.

Stellen Sie sich vor, dass der Pool von Token zum Handel verwendet werden kann, und jedes Mal, wenn ein erfolgreicher Handel stattfindet, werden 0,3% des Gesamthandelswerts an den Liquiditätsanbieter gesendet, der diesen Handel ermöglicht hat oder Liquidität für dieses handelbare Asset hinzugefügt hat. Alle Bedingungen, die die Handelsszenarien, Handelsgebühren und die Bedingungen für Nichterfüllung und Handelsfehler hervorheben, sind als Smart Contract codiert.Smart Contract, das als Vertragscode in der Kette gespeichert ist.

Eigenschaften von Smart Contracts

Wir können nicht tief in das Lesen, Schreiben und Prüfen von Verträgen eintauchen, wenn wir uns nicht ihrer Eigenschaften bewusst sind. Hier sind die standardmäßigen Smart Contract Merkmale, die man kennen sollte:

Ein paar Merkmale eines Standard-Smart-Vertrags: BeInCrypto

Programmierbare Verträge

Smart Contracts sind einfach Code-Stücke. Sie können Smart Contracts schreiben, um Befehle und Szenarien basierend auf spezifischen Bedingungen auszuführen. Aus diesem Grund sind Smart Contract-Entwickler und Programmierer derzeit gefragt, da die meisten der DeFiDer Weltraum verlässt sich bereits auf Smart Contracts, um komplexe Fälle wie die Abwicklung von Handelsgebühren in Liquiditätspools zu bearbeiten, aufrechtzuerhaltenAPYVerhältnisse und mehr.

Vertrauenslos

Smart Contracts, die auf der Blockchain liegen, eliminieren menschliches Eingreifen. Dies macht sie vollständig vertrauenswürdig. Zum Beispiel, wenn ein spezifischer DeFiProtokoll, das von Smart Contract(s) gesteuert wird, sich darauf einigt, Ihre Vermögenswerte zu liquidieren, sobald der Wert unter einen Schwellenwert fällt, keine menschliche Intervention kann oder sollte dies stoppen. Der Code regelt Zahlungen, Leistung, Management und Regelvollstreckung und macht den gesamten Raum vollständig vertrauenswürdig.

Autonom

Wie bereits erwähnt, sind Smart Contracts mit selbstausführenden Befehlssätzen ausgestattet. In Bezug auf die Codierung bedeutet dies, dass Iterationen und Schleifen in den Textbaustein eingebaut sind. Dadurch wird sichergestellt, dass Aufgaben wie Zahlungen, Auszahlungen, Einzahlungen, die Bestrafung von Validatoren durch Slashing und verschiedene andere Aufgaben autonom erledigt werden.

Gesichert

Und schließlich sind Smart Contracts durch Kryptographie gesichert, so dass es wahnsinnig schwierig ist, sie zu verletzen. Ohne eine eingebaute Schwachstelle würde das Umgehen eines Smart Contracts bedeuten, dass man versucht, ihn im offenen, vor der gesamten Blockchain zu verletzen.

Überprüfbar

Transaktionen, die über Smart Contracts abgewickelt werden, sind selbstüberprüfbar. Das bedeutet, dass die Ausführung allein der Beweis dafür ist, dass die Transaktion überhaupt stattgefunden hat, da kein menschliches Element beteiligt ist. Der selbstüberprüfbare Mechanismus gibt Smart Contracts einen Vorteil gegenüber traditionellen Verträgen, die die Regelung von Legacy-Bankensystemen regeln.

Also das nächste Mal, wenn Sie planen, einen Smart Contract zu lesen, stellen Sie sicher, dass das Boilerplate oder die Dokumentation alle genannten Merkmale enthält.


Eine vereinfachte Version von Smart Contracts: Reddit

Lesen von Smart Contracts basierend auf den Eigenschaften

Hier ist ein einfacher, intelligenter Vertrag, der ein Treuhandkonto darstellt. Benutzer zahlen ihre Gelder auf das Treuhandkonto ein, das sie dann nach einem bestimmten Zeitraum an den Empfänger überweist.

/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// State variablesaddress public depositor; // Konto hinterlegt etheraddress zahlbar öffentlicher Begünstigter; // Konto, das etheruint256 public releaseTime erhält; // Zeitstempel für die Freigabe von Ether// Ereignisse zur Überprüfung der Vertragsaktivitätevent Deposited(Adresse indiziert _from, uint256 _value); event Released(Adresse indiziert _to, uint256 _value);// Der Vertragskonstruktor initialisiert den Smart Contractconstructor(Adresse zahlbar _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, "Der Freigabezeitpunkt muss in der Zukunft liegen");    Sicher und vertrauenslos: Vertrag bindet Einleger und begünstigten Einleger = msg.sender;    Begünstigter = _beneficiary;    releaseTime = _releaseTime;}Einzahlungsfunktion – autonome Ausführung (Fallback-Funktion)receive() external payable { emit Deposited(msg.sender, msg.value);}Geben Sie den Ether an den Empfänger freiFunktion release() public { // Programmierbar: Kann nur nach releaseTime ausgeführt werden require(block.timestamp >= releaseTime, "Zu früh zum Freigeben");    Autonom: Wird automatisch basierend auf der Bedingung uint256 amount = address(this).balance ausgeführt;    Begünstigter.transfer(Betrag);    edie Freigegeben(Begünstigter, Betrag);}}

Während wir diesen Smart Contract im Detail entschlüsseln und lesen werden, lassen Sie uns zunächst überprüfen, ob er den genannten Vertragsmerkmalen entspricht.

Der "programmierbare" Teil

Schauen Sie sich den Vertrag genau für dieses Stück Code an:

require(block.timestamp >= releaseTime, "Zu früh zum Freigeben");

uint256 betrag = address(this).balance;

begünstigter.transfer(betrag);

Die Gelder sollen nur freigegeben werden, wenn eine bestimmte Freigabezeit-Bedingung erfüllt ist, was diese programmierbaren Verträge betrifft.

Der „trustless“ Teil

Hier ist ein schnelles Code-Snippet aus dem obigen:

Einzahler = msg.sender;

begünstigter = _begünstigter;

releaseTime = _releaseTime;

Im Vertrag ist jeder vom Einzahler bis zur Person, die die Gelder erhält, codegebunden. Niemand muss mit dem anderen interagieren oder ihm vertrauen, da die Funktion der Geldüberweisung durch releaseTime gebunden ist - ein codebasierter Parameter.

Der „autonome“ Teil

Hier ist der "Fund Release"-Teil des Codes:

 function release() public {require(block.timestamp >= releaseTime, "Zu früh zum Freigeben"); uint256 amount = address(this).balance; Begünstigter.transfer(Betrag); edie Freigegeben(Begünstigter, Betrag);}

Der gesamte Prozess ist autonom, da Mittel nur freigegeben werden, wenn die Freigabezeit ein bestimmtes Kriterium erfüllt. Beachten Sie, dass der Code nicht teilweise programmierbar, sondern vollständig autonom ist.

Andere Elemente des Smart Contract-Codes, einschließlich der Einzahlungsfunktion, können ebenfalls vollständig autonom gemacht werden, je nach den Funktionen, die Sie einbeziehen möchten. Sie können beispielsweise einen wiederkehrenden Einzahlungsplan starten, jedes Mal, wenn der Benutzer Brieftascheüberschreitet 100 $, wobei der überschüssige Betrag an den Begünstigten überwiesen wird.

Der „gesicherte“ Teil

Besorgt, welches Element verleiht Sicherheitzum Vertrag? Schauen Sie sich diesen Teil des Codes an:

constructor(address payable _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, “Release time must be in the future”);depositor = msg.sender;beneficiary = _beneficiary;releaseTime = _releaseTime;}

Beachten Sie, wie es eine festgelegte Priorität der releaseTime-Funktion in Bezug auf den Zeitstempel gibt. Nichts geschieht zufällig, und Bedingungen müssen erfüllt sein.

Der „überprüfbare“ Teil

Jede Transaktion, die mit dem Smart Contract verbunden ist, wird dank separater Protokollierungsaktivitätselemente innerhalb der Kette protokolliert.

event Deposited(address indexed _from, uint256 _value);

event Released(address indexed _to, uint256 _value);

emit Deposited(msg.sender, msg.value);

emittieren Freigegeben (Begünstigter, Betrag);

Lesen anderer Teile eines Smart Contracts

Nun, da wir die Elemente identifiziert haben, die die Merkmale eines Smart Contracts definieren, sind hier die anderen Vertragsbestandteile, um Ihnen zu helfen, den Vorgang besser zu verstehen.

Pragma Solidität ^0.8.0; – Die Version der Solidität-Programmiersprache, die zum Verfassen dieses Smart Contracts benötigt wird.

// SPDX-Lizenzkennzeichnung: MIT – Dieser Kennzeichner gibt die Lizenz für die Code-Freigabe an. Es ist ratsam, dies einzuschließen, damit die Leute wissen, ob es Open Source ist und ob daran gearbeitet werden kann oder nicht.

Zeitverriegelungsvertrag { - Weist dem Smart Contract einen Namen zu, ähnlich wie ein Label.

Adresse des öffentlichen Einzahlers; - Da der Vertrag einen Einzahler und einen Begünstigten betrifft, ist dies der Punkt, an dem die öffentliche Adresse des Einzahlers erwähnt wird. Diese Variable ist dieEthereum WalletAdresse und ist öffentlich einsehbar.

Anschrift des zahlbaren öffentlichen Begünstigten; – Dies ist die öffentliche Adresse des Begünstigten, an die das Treuhandkonto Gelder überweist. Es ist auch lesbar und verleiht Blockchain-basierten Smart Contracts ein Gefühl der Transparenz.

Uint256 public releaseTime; – Da es sich um einen zeitgebundenen Vertrag handelt, weist der uint256 dem Vertrag die zeitbasierte Variable zu. Dies wird der Zeitrahmen sein, in dem die Fondsfreigaben erfolgen werden.

In Solidity ist uint (unsigned integer) der Weg, um wertebasierte Ganzzahlen zuzuweisen. Der Suffix 256 steht für eine große Speicherung von Zahlen.

Nach 5 Jahren des Schreibens von Smart Contracts erkenne ich erst heute, dass das Solidity-Logo das Ethereum-Logo entfaltet 🤯 ist pic.twitter.com/wlM369Eff9
— kaden.eth (@0xKaden) 8. Juli 2023

Du kannst in Betracht ziehen Solidity-Dokumentationmit der Syntax, Ausdrücken und anderen Codeelementen vertraut zu werden.

Sonstige Elemente

constructor(address payable _beneficiary, uint256 _releaseTime) { – Der "Konstruktor" ist eine einmalige Sonderfunktion, die aufgerufen wird, wenn der Smart Contract bereitgestellt wird. Sie setzt den Vertrag in Gang. Beachten Sie, dass an dieser Stelle alle zuvor deklarierten Adressvariablen aufgerufen und initialisiert werden.

Receive() external payable { – Dies ist eine spezielle Funktion, die aufgerufen wird, wenn Gelder von außerhalb an die Vertragsadresse verschoben werden. Extern schlägt von außen vor, und "Zahlbar" definiert die Art der Bewegung, d. h. den Erhalt von ERC-20-Token.

Funktion release() public { - Dies ist eine öffentliche Funktion, die die Bewegung von ERC-20-Token von der Vertragsadresse zum Begünstigten angibt. Diese Funktion hängt von releaseTime ab.

All diese Elemente sind Teile des hypothetischen Treuhandvertrags, über den wir gesprochen haben. Stellen Sie sicher, dass Sie die gesamte Solidity-Dokumentation durchgehen, um die Sprache besser kennenzulernen.

Kenne die Elemente, bevor du planst, Smart Contracts zu schreiben: BeInCrypto

DApps und Smart Contracts: die Beziehung

Inzwischen sollten Sie einen Vorsprung beim Lesen und Verstehen eines bereits geschriebenen Smart Contracts haben. Und viele Smart Contracts, wie die, die wir besprochen haben, bilden das Backend einer dezentralen Anwendung – ein BlockchainVersion einer Standard-Mobilanwendung.

Jedes Merkmal eines Smart Contracts, einschließlich Vertragssicherheit, autonomer und programmierbarer Ausführung, Vertrauenslosigkeit von Transaktionen und mehr, wird problemlos implementiert, während man eine dezentrale Anwendung entwickelt. Also, das nächste Mal, wenn Sie auf eine DApp stoßen, beachten Sie, dass es sich um ein Smart-Contract-betriebenes Backend handelt, das auf der Blockchain gehostet wird – und Ihnen hilft, mehrere Aufgaben ohne menschliches Eingreifen zu initiieren. Smart Contracts bilden die Logik von DApps.

Blockchains für Smart Contracts

Wir wissen, dass Sie mit Ethereum Smart Contracts entwickeln können, wie eine massive Softwarelösung. Es ist jedoch nicht das einzige Blockchain-Protokoll, das es gibt. Wenn Sie tief in die Welt der Smart-Contract-Entwicklung eintauchen möchten, sollten Sie sich andere Blockchains ansehen. Verschiedene Blockchains haben unterschiedliche Umgangsformen, wenn es darum geht, Verträge abzuschließen.

Aber zuerst wollen wir besprechen Ethereum— die Anlaufstelle für die meisten Smart-Vertragsentwickler.

Ethereum

Smart Contracts auf Ethereum werden in der Solidity-Programmiersprache geschrieben. Und die Token-Schnittstelle für diese Smart Contract-Entwicklungsplattform ist ERC-20.

Sie können zum Escrow-basierten Smart Contract zurückkehren, über den wir zuvor gesprochen haben, um zu sehen, wie ein Standard-Ethereum-basierter Smart Contract geschrieben wird.

Selbst das Starten eines ERC-20 Tokens auf der Ethereum-Blockchain ist ein Smart-Contract-intensives Feature, über das wir ausführlich sprechen werden, während wir einen Smart Contract schreiben.

Hier ist, wie eine grundlegende Code-Struktur aussieht, vorausgesetzt, wir planen, eine neue Kryptowährung BIC zu starten.

Betrachten Sie dies als ein hypothetisches Szenario. Nicht genau die Einführung einer BIC-Kryptowährung.

pragma Solidität ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";Vertrag BICToken ist ERC20 {    constructor(uint256 initialSupply) ERC20("BIC Token", "BIC") {        _mint(msg.sender, initialSupply);    }}

Wir werden jedes Element dieses Codes später besprechen, wenn wir unseren Smart Contract schreiben.

Andere Blockchains

Wie bei Ethereum können Sie sogar Smart Contracts auf Plattformen wie Solana, unter Verwendung von Rust und Cardano, unter Verwendung von Plutus, einem Teil von Haskell — einer funktionalen Programmiersprache.

"Gibt es bei Cordona überhaupt Smart Contracts?"
Witze über dich, Kumpel. #CardanoADA pic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 (@wilbot28) 9. Juli 2023

Hier ist die Struktur eines Codes in Rust (Solana) sieht aus wie:

Hinweis: Es handelt sich um einen einfachen Vertrag, bei dem ein Zähler inkrementiert wird.

use anchor_lang::prelude::*;declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter = 0;    Ok(())}pub fn increment(ctx: Context) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter += 1;    Ok(())}}

Wussten Sie schon? Während Rust die Programmiersprache zur Erstellung von Solana-basierten Smart Contracts ist, Ankerist das Smart-Contract-Entwicklungsframework, das verwendet wird. Um Smart Contracts mit Rust zu erstellen, müssen Entwickler Module aus dem Anchor-Framework ziehen - etwas, das die erste Zeile unseres Beispielscodes (use anchor_lang: enthält:prelude::*;) steht für.

Solana-DokumentationHilft Ihnen, die spezifische Rust-Smart-Contract-Sprache zu verstehen.

Ebenso verwendet Cardano Plutus als Sprachwahl, gefolgt von der Ink!-Sprache für Polkadot, TEAL für Algorand, C# für NEO und mehr. Es ist ratsam, die dokumentation für die jeweilige Blockchain im Detail zu erlernen, bevor mit der Erstellung von kompatiblen Smart Contracts fortgefahren wird.

Warum sollten Sie lernen, Smart Contracts zu lesen?

Die Fähigkeit, Smart Contracts zu schreiben, wird hoch angesehen, aber auch die Fähigkeit zu lesen bringt ihre Vorteile mit sich:

  1. Die Fähigkeit, mehr über die Automatisierungskomplexitäten im Zusammenhang mit DeFi-Apps zu erfahren.
  2. Analyse der mit dem Vermögensstandard verbundenen EigentumsstandardsTokenisierung.
  3. Das Verständnis, wie dezentralisierte autonome Organisationen (DAOs)Funktion.
  4. Verstehen und Implementieren von nutzungsfallgetriebener Logik im Zusammenhang mit Versicherungen, Inhaltsmonetarisierung, AbstimmungSystem, Lizenzgebühren und andere Bereiche.

Wie man Smart Contracts schreibt

Nun, da das Lesen von Smart Contracts erledigt ist, wollen wir uns auf das Schreiben von Smart Contracts konzentrieren. Bevor Sie tiefer eintauchen, ist es notwendig zu betonen, dass verschiedene Blockchains unterschiedliche Standards und Sprachen im Zusammenhang mit der Entwicklung von Smart Contracts haben könnten. Es ist notwendig, sich auf die von einer bestimmten Blockchain definierten Standards zu konzentrieren, um mit dem Schreiben und der Bereitstellung von Verträgen zu beginnen.

Für den Großteil unserer Diskussion werden wir uns auf Ethereum als die Kette und Solidity als die Sprache konzentrieren.

Die Rolle der Programmierung

Die Programmierung eines Smart Contracts ist leicht der wichtigste Teil des Entwicklungszyklus. Und um in die Entwicklung von Smart Contracts auf Ethereum oder einer anderen Blockchain einzusteigen, sollten Sie etwas Erfahrung mit nicht-blockchainbasierten Programmiersprachen wie Javascript haben.

Verschiedene Blockchains und die Sprache zum Schreiben von Smart Contracts: BeInCrypto

Die Möglichkeit, einen Smart Contract zu programmieren, ermöglicht es Ihnen, die Logik zu implementieren, die Sicherheitselemente desselben zu behandeln und den Code zu optimieren Gasgebühren, die gleiche anpassen und sie sogar interoperabel machen, wenn nötig.

EVM und Smart Contracts: eine Standortbestimmung

Jeder, der plant, Smart Contracts auf Ethereum zu schreiben, muss verstehen, was die Ethereum Virtual Machine (EVM) ist und wie sie mit Smart Contracts funktioniert. Zunächst einmal ist die EVM eine Ethereum-Komponente, die Programmen eine isolierte und kontrollierte Umgebung bietet, in der sie arbeiten können. Betrachten Sie dies als einen globalen Computer, der jeden einzelnen Vertragscode auf Ethereum hostet. Jeder Knotenauf dem Ethereum-Netzwerk läuft die EVM.

Wenn Sie davon träumen, ein Smart Contract-Entwickler zu werden, hier ist, was Sie über Smart Contracts und EVM wissen müssen.

Sobald Sie das Programm in Solidity geschrieben haben, das eine Hochsprache ist, müssen Sie es in Bytecode kompilieren - ein maschinenverständliches Niedrigpegel-Format. Dieser Bytecode gelangt in die Ethereum-Blockchain und verbleibt dort. Jeder, der mit dem Smart Contract interagiert, muss eine Transaktion an die Adresse des Vertrags senden.

Jeder Knoten mit installiertem EVM kann diese Transaktion sehen, und sobald die Validatoren dies genehmigen, wird der Smart Contract-Code ausgeführt. Da jeder Knoten Transaktions-Sichtbarkeit hat, kann nichts manipuliert werden, und der Code wird so ausgeführt, wie er geschrieben wurde. Und sobald der Code ausgeführt wird, ändert sich der Zustand der Blockchain, was den Prozess end-to-end und vollständig transparent macht.

Kann jemand einen Smart Contract schreiben?

Das Schreiben von Smart Contracts erfordert technisches Know-how. Aber das ist nicht alles. Sie müssen auch gründlich verstehen, wie die Blockchain-Technologie funktioniert, welche sprachspezifischen Anforderungen für die Blockchain relevant sind, die Sie anvisieren.Interoperabilität, und mehr. Darüber hinaus sollten Sie auch einiges über Smart Contract-Schwachstellen wissen - Dinge, die beim Schreiben von Code vermieden werden sollten. Und schließlich ist auch ein solides Wissen über Vertragsprüfung und Vertragsbereitstellung unerlässlich.

Das alles kann überwältigend werden. Hier ist also ein schneller Spickzettel, um loszulegen:

  1. Beginnen Sie damit, die Plattform oder Kette auszuwählen, mit der Sie arbeiten möchten.
  2. Lernen Sie die mit der Kette verbundene Programmiersprache, wie zum Beispiel Solidity für Ethereum.
  3. Erfahren Sie, wie Sie Entwicklungstools wie eine integrierte Entwicklungsumgebung wie Remix verwenden.
  4. Beginnen Sie damit, Ihren ersten Vertrag zu schreiben und ihn dann mit Testnetzen zu testen.
  5. Sobald Sie mit den Elementen des Codes zufrieden sind, können Sie ihn On-Chain bereitstellen. Denken Sie daran, dass das Bereitstellen des Vertrags On-Chain in Form von Gasgebühren anfällt.

Hier ist ein schneller Thread mit einigen Tipps zum Schreiben besserer Smart Contracts:

🥧 FREI-PI
‼️ Warum Smart Contract-Entwickler dies wissen MÜSSEN!
Funktion:
- Anforderungen
- Effekte
– Interaktionen
Protokoll
– Invarianten
Dies ist das Muster, über das Sie alle nachdenken sollten, wenn Sie Smart Contracts erstellen.
Hier ist warum 👇
— Patrick Collins (@PatrickAlphaC)6. Juli 2023

Eintauchen in die Programmierung

Es ist an der Zeit, sich mit den technischen Aspekten der Entwicklung von Smart Contracts zu befassen. Auch wenn Ketten wie Solana und Cardano es Ihnen ermöglichen, Smart Contracts zu entwickeln, bleibt Ethereum die beliebteste Plattform für die Entwicklung von Smart Contracts.

Wussten Sie schon? Im Jahr 2022 allein schafften es mehr als 100.000 dezentralisierte Anwendungen auf das Ethereum-Netzwerk.

Warum Ethereum?

Ethereum hat eine riesige Entwicklergemeinschaft. Alles, was Sie entwickeln, wird sofort Aufmerksamkeit erregen. Außerdem ist seine eigene Sprache, Solidity, relativ einfach für Personen, die sich mit Python oder JavaScript auskennen. Schließlich hilft die globale Software von Ethereum, EVM, bei reibungsloser Vertragsausführung.

Wenn Sie in der Mehrheit sind und Ethereum und Solidity bevorzugen, hier ist eine schnelle Liste von Dingen, die Sie verfolgen müssen, bevor Sie mit der Entwicklung von Smart Contracts beginnen:

  1. Pragma oder die Compiler-Version
  2. Vertragsdefinition zur Kennzeichnung
  3. Zustandsvariablen zum Speichern von Daten
  4. Ereignisse für EVM-Protokollierung
  5. Modifier, um bestimmten Institutionen spezifische Rechte zu geben
  6. Funktionen oder die Smart Contract-Aktivitäten im Spiel
  7. Vererbung für Interoperabilität
  8. Verständnis von Kontrollstrukturen wie if, else, for-Schleifen, Datentypen wie String, Integer und mehr.

Schreiben und Bereitstellen des ersten Smart Contracts

Nun, da wir wissen, wie Dinge auf der Kette ablaufen, wollen wir uns damit befassen, den ersten Smart Contract zu schreiben und zu deployen. Obwohl „Hello World“ nach wie vor der erste Schritt ist, werden wir damit beginnen, einen Smart Contract zu erstellen, um einen hypothetischen BIC-Token mit einem zu 100% freigeschalteten Vorrat von 1 Million zu starten.

Die Grundlagen

Der erste Schritt besteht darin, die neueste Version von Node.js und dem NPM oder Node Package Manager zu installieren. Dies kümmert sich um die Entwicklungswerkzeuge und die lokale Entwicklungsumgebung. Außerdem ermöglichen Ihnen Node.js und NPM, das Web-Front-End für Ihren Smart-Vertrag festzulegen.

Jetzt müssen Sie eine IDE einrichten, um den Vertragscode zu schreiben. Dafür können Sie Visual Studio Code schnell installieren. Oder Sie können den Ballast abschneiden und hopauf Alchemie - einer Blockchain-Entwicklungsplattform. Mit Alchemie können Sie etwas Testnetz-ETH erhalten. Dies wird die Gasgebühren abdecken, wenn Sie den Smart Contract auf das Goerli-Testnetz oder sogar das Sepolia-Testnetz bereitstellen.

Beachten Sie, dass Sepolia ein jüngeres Testnetz ist und daher weniger Festplattenspeicherplatz bei der Knotenbereitstellung benötigt.

Vorerst werden wir mit dem Goerli-Testnetzwerk fortbestehen, da es eine größere Anzahl von implementierten Anwendungen hat.

Mit dem Testnetz und dem gefälschten ETH bereit, gehen wir speziell zum Schreiben des Smart Contracts über. Hier ist der Code-Schnipsel zum Erstellen eines BIC-Token mit einer festen Versorgung von 1 Million.

Hinweis: Wir werden unseren Smart Contract lokal auf dem MacOS und nicht im Testnetz bereitstellen. Für die Testnet- und Mainnet-Bereitstellung von Smart Contracts werden wir einen separaten Artikel haben, der den Rahmen dieser Diskussion sprengen würde.

Schritte zum Schreiben und Bereitstellen

Hier ist der einfache Code-Schnipsel für den hypothetischen Token:

pragma Solidität ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; Vertrag BICToken ist ERC20 {    Konstruktor() ERC20("BIC Token", "BIC") {        _mint(msg.sender, 1000000 * 10 ** Nachkommastellen());    }}

Wenn Sie mit der Syntax vertraut sind, würden Sie wissen, was jeder Codebestandteil bedeutet. Was das OpenzepplinEs handelt sich um die Bibliothek zur Importierung von ERC-20 Smart Contracts. Diese Bibliothek bietet die grundlegenden Betriebsstandards für ERC-20 Tokens.

Die Münzfunktion spricht über das anfängliche Angebot, das an die Smart Contract-Adresse oder den msg.sender bereitgestellt wird.

Um diesen Code lokal einzurichten und zu testen, werden wir drei Komponenten benötigen:

  1. Node.js und NPM (bereits besprochen): Funktioniert wie ein Motor zur Unterstützung Ihrer Smart Contracts
  2. Trüffel: Funktioniert wie ein Werkzeugkasten und hilft Ihnen dabei, Code, Skripte und andere Teile eines Vertrags zu organisieren
  3. Ganache: Funktioniert wie ein virtueller, auf dem Gerät befindlicher Spielplatz. Denken Sie an es wie an eine persönliche Blockchain.

Was ist Vertragsausführung?

Wenn Sie den detaillierten Prozess des Schreibens eines Smart Contracts durchlaufen haben, ist es unerlässlich, einiges über die Vertragsausführung zu wissen. Es handelt sich um einen Prozess, bei dem der Smart Contract-Code von den Knoten auf einer Kette ausgeführt wird.

Es ist die Einheitlichkeit der Vertragsdurchführung, die Smart Contracts transparent und unveränderlich macht. Lassen Sie uns nun den schrittweisen Prozess der Vertragsdurchführung verstehen:

Schritt 1

Die Code-Schnipsel, die wir geschrieben haben, müssen irgendwo ausgeführt werden. Im Falle von Smart Contracts ist dieser Ausführungsort die Blockchain. Die Knoten oder die teilnehmenden Mitglieder der Kette helfen bei der Ausführung des Vertrags.

Schritt 2

Die Knoten übernehmen die Verantwortung für die Ausführung von Vertragscodeblöcken im Gegenzug für kettenbezogene Anreize. Jeder Befehl oder jede Aktion, die innerhalb der Kette stattfindet, wird von Smart Contracts geleitet.

Schritt 3

Jeder Smart Contract hat eine spezifische Adresse. Zur Ausführung des Vertrags werden Transaktionen an diese Vertragsadresse gesendet. Beachten Sie, dass jeder Knoten den EVM ausführt, der dann eine Kopie des Smart Contract-Codes enthält, was es einfacher macht, die Echtheit der Transaktionen zu überprüfen.

Schritt 4

Die Transaktionen, die auf den Smart Contract abzielen, werden von den Validatoren ausgewählt, die sie dann in spezifische Blöcke einbeziehen.

Schritt 5

Sobald die Transaktion durchgeführt und erfolgreich validiert wurde, wird sie Teil der Blockchain. Die mit der Transaktion verbundene Smart Contract-Funktion wird dann aufgerufen und über die Blockchain-Knoten ausgeführt.

Schritt 6

Jeder Knoten, der den Smart Contract ausführt, sollte zu einem deterministischen Schluss kommen - dem gleichen Ergebnis für den gleichen Satz von Eingaben -, was die Natur der Verträge vollständig vertrauenswürdig und transparent macht.

Hinweis: Jeder Fehler im Zusammenhang mit der Codeausführung oder Probleme im Zusammenhang mit Gasgebühren macht die Transaktionen rückgängig. Dies bedeutet, dass die Transaktion auf Basis eines bestimmten Smart-Vertragscodes nicht mehr existiert. Genau das passiert mit Flash-Kreditewenn die Unfähigkeit, sich an bestimmte Normen zu halten, die gesamte Transaktion umkehrt und scheinbar den Eindruck vermittelt, dass die Mittel überhaupt nicht bewegt wurden.

Jeder Statuswechsel, der mit Smart Contracts verbunden ist, wird innerhalb der Blockchain aufgezeichnet und wird zu einem unveränderlichen Bestandteil davon.

Smart Contract-Entwicklung und bewährte Praktiken

Nun, da Sie ziemlich viel über Smart Contracts wissen, hier sind ein paar Hinweise, um mit der Vertragsentwicklung zu beginnen:

  1. Beim Schreiben von Verträgen ist es ratsam, sich auf vertrauenswürdige Bibliotheken wie diejenigen von OpenZeppelin zu verlassen, um die gewünschten Code-Optimierungs- und Sicherheitsstandards einzuhalten.
  2. Die Idee ist, den Vertrag modular und einfacher zu halten – was das Testen und Überprüfen erleichtert.
  3. Eine gute Idee ist die Implementierung von vertragspezifischen Zugriffskontrollen. Dies bedeutet, dass Codebits deklariert werden, in denen nur eine bestimmte Person oder Entität die wesentlichen Merkmale des Vertrags ändern kann. Der Zugriffsschutz erleichtert es, die Smart Contracts sicher zu halten.
  4. Beim Verfassen eines Vertrags sollten immer Vorkehrungen für die Behandlung von Randfällen und Ausnahmen getroffen werden — und das alles bei der Erstellung mehrerer Tests.

Für die Nachhaltigkeit des Codes sorgen

Jede der oben genannten Methoden hilft bei der Codeoptimierung und sicherheitsspezifischen Implementierungen. Es gibt jedoch einige vertragsspezifische Praktiken, die Sie befolgen und implementieren müssen, um die Nachhaltigkeit des Codes zu gewährleisten. Dies zielt darauf ab, den Vertragscode leicht und nutzbar zu halten, so dass jeder Knoten, der dasselbe ausführt und ausführt, nicht viel Rechenleistung dafür aufwenden muss.

  1. Behandeln Sie den Speicher effizient, indem Sie kleinere Datensätze verwenden. Verwenden Sie beispielsweise beim Schreiben eines Vertrags uint8 als den operationellen Wert anstelle von uint256.
  2. Beim Schreiben eines Vertrags ist es ratsam, den Code zu optimieren, indem mehrere Operationen kombiniert werden. Wir werden in unserem ausführlichen Beitrag zu „Schreiben von Smart Contracts“ genauer darauf eingehen.
  3. Eine gute Idee ist es, bei der Ausführung von Smart Contracts die träge Auswertung zu verwenden. Auf diese Weise müssen Sie eine Funktion nur dann ausführen, wenn dies erforderlich ist, und nicht jedes Mal, wenn etwas an die Adresse des Smart Contracts geschoben wird.
  4. Schließlich ist es auch eine gute Möglichkeit, sich auf nachgelagerte Berechnungen zu verlassen, um sich auf Nachhaltigkeit zu konzentrieren. Dies hilft, die Anforderungen an die Gasgebühr zu senken und kann sogar die Vertragsausführung beschleunigen.

Trotz Einhaltung der besten Praktiken beim Schreiben und Entwickeln von Smart Contracts ist es notwendig, sich auf die Sicherheitslücken des Vertrags zu konzentrieren, wenn sie auf das Hauptnetz geschoben werden.

Wie überprüft man Smart Contracts?

Jeder Smart Contract, der im Mainnet präsent ist, muss auf Codeleistung, Sicherheit und andere Eigenschaften überprüft werden. Hier kommt die Prüfung - ein rigoroser Vertragsprüfungsprozess - ins Spiel, der es Ihnen ermöglicht, potenzielle Vertragslücken und Schwachstellen aufzudecken.

Hier ist eine schnelle Prüfliste, um loszulegen:
Erstaunliche Smart Contracts Audit Checkliste😈
Stellen Sie sicher, dass Sie sie bei Ihrer nächsten Prüfung überprüfen✅
Ich würde mich über einen Retweet freuen, verbreite das Wissen🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv)7. Juli 2023

Beziehung zwischen Lesen, Schreiben und Prüfen: Warum überhaupt Smart Contracts prüfen?

Während das Lesen und Schreiben von Smart Contracts miteinander verflochten sind, wenn es um die Entwicklung intelligenter Codestücke geht, nimmt das Auditing einen besonderen Platz ein und beinhaltet die Überprüfung der Logik in erster Linie. Wenn es um die Blockchain-basierte Codeausführung geht, ist alles unveränderlich, und jede Katastrophe kann irreversible Folgen für die Vertragsausführung haben. Genau aus diesem Grund ist eine gründliche Prüfung des Vertragskodex und anderer Aspekte durch Audits notwendig.

Vertragsanfälligkeiten und Fixes

Es kann eine Vielzahl von Vertragsanfälligkeitendie bei einer ausführlichen Smart Contract-Prüfung identifiziert werden können. Dazu gehören die Überprüfung auf Reentrancy-Angriffe, Überläufe oder Unterläufe, Probleme im Zusammenhang mit dem Zugriffssteuerung und mehr. Sobald die genaue Art des Problems festgestellt ist, kann der Prüfer sogar die besten Praktiken vorschlagen, um das Problem zu beheben.

Verstöße werfen Studien und Erkenntnisse

Immer noch unsicher, wie die Überprüfung von Smart Contracts helfen kann? Nun, lassen Sie uns auf den berüchtigten Fall zurückkommen DAO Hack im Jahr 2016, der ein Reentrancy-Problem ausnutzte und einen Verlust von fast 3,6 Millionen ETH verursachte. Ähnlich verhält es sich mit dem Parity-Wallet-Vertragshack im Jahr 2017, der zu einem Verlust von fast 500.000 ETH führte. Diese Probleme hätten mit den richtigen Audits vermieden werden können.


DAO Hack-Flussdiagramm: BeInCrypto

Strategien zur Überprüfung von Smart Contracts

Es gibt zahlreiche Strategien zur Überprüfung von Smart Contracts. Einige der beliebteren Methoden sind:

Prüfwerkzeuge

Diese Tools fungieren als erste Verteidigungslinie und eignen sich am besten zur Lokalisierung gängiger Sicherheitslücken. Zu den beliebteren Tools gehören Securify, Mythril und weitere, die in der Lage sind, eine statische Analyse des Codes durchzuführen, Verletzungsmuster zu erkennen und einen sicherheitsspezifischen Vorsprung zu ermöglichen.

Tools zur Überprüfung von Smart Contracts: BeInCrypto

Code-Überprüfung

Hier kommen manuelle Code-Reviewer ins Spiel, die die Codebasis durchleuchten und komplexe Sicherheitslücken identifizieren, falls vorhanden. Eine manuelle Überprüfung kann sich um die Geschäftslogik, den Kontext und die Nutzungs-muster kümmern.

So helfen Ihnen manuelle Code-Reviews dabei, Bedrohungen zu lokalisieren:

Eine kleine Wissensfrage für unsere jüngeren Wirtschaftsprüfer!
Lass uns gehen und retweeten, wenn du den Bug gefunden hast!pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles)8. Juli 2023

Automatische Scans

Werkzeuge wie Snyk und GuardRails helfen bei der automatischen Vertragsscannung - eine Sicherheitsimplementierung, die jedes Mal aufgerufen wird, wenn der Code aktualisiert wird. Diese Form der Prüfung stellt sicher, dass neue Änderungen am Code sicher und nicht invasiv sind.

Formale Überprüfung

Dies ist ein komplexer Prozess, der ausschließlich darauf beruht, die Geschäftslogik des Codes zu überprüfen. Beachten Sie, dass die formale Verifikation tatsächlich nicht dazu gedacht ist, die Syntax zu überprüfen, sondern nur die Logik zu überprüfen, um zu sehen, ob der Code wie gewünscht ausgeführt wird.

Neben den genannten Strategien kann die Auditierung von Smart Contracts auch durch Peer-Reviews, Bug-Bounty-Programme und Testabdeckungen mithilfe von Tools wie der Solidity Coverage zur Maximierung der Effektivität initiiert werden.

Ein einfacher Weg, um Smart Contracts zu überprüfen: BeInCrypto

Wie überprüft man den Code richtig?

Wenn Sie neu in der Überprüfung von Smart Contracts sind, ist es wichtig zu beachten, dass es zwei Möglichkeiten gibt, den Code umfassend zu analysieren und Probleme zu identifizieren. Dazu gehören:

Statische Analyse

Diese Art der Codeanalyse hilft bei der Identifizierung grundlegender Sicherheitslücken, Codierungsfehler und anderer Probleme gemäß den angegebenen Codierungsstandards und -konventionen. Bedrohungen wie ungeprüfte Aufrufe externer Quellen, Ganzzahlüberläufe und mehr können mithilfe der statischen Analyse hervorgehoben werden. Das Beste an der statischen Analyse ist, dass der Code nicht ausgeführt werden muss, damit er überprüft werden kann.

Dynamische Analyse

Dieser Ansatz zur Prüfung testet die Ausrichtung des Codes mit dem EVM. Anstatt nur den Code zu überprüfen, überprüft die dynamische Analyse die Reaktion von Smart Contracts auf eine Vielzahl von Eingaben. Die dynamische Analyse kann Probleme wie inkohärente Gasverbrauch und sogar fehlerhafte Vertragslogik identifizieren. Persönliche Blockchain-Umgebungen wie Ganache können als Plattformen für die dynamische Analyse fungieren, die es Entwicklern ermöglichen, Transaktionen durchzuführen, Befehle auszuführen und vieles mehr mit ihren Verträgen zu tun.

Testen eines tatsächlichen Code-Stücks

Hier ist ein Smart Contract-Schnipsel, der als Fondsspeicher fungiert und eine Abhebungsfunktion hat:

Pragma-Solidität ^0.6.1; contract VulnerableContract { mapping(address => uint256) öffentliche Salden;    function deposit() public payable { balances[msg.sender] += msg.value;    } function withdraw(uint256 _amount) public { require(balances[msg.sender] >= _amount, "Unzureichender Saldo.");        (bool success, ) = msg.sender.call{Wert: _amount}("");        require(success, "Übertragung fehlgeschlagen.");        balances[msg.sender] -= _amount;    }}

Wenn Sie den Code genau betrachten, gibt es eine Schlüsselverwundbarkeit:

In dem vorherigen Fall kann die "withdraw"-Funktion erneut aufgerufen werden, wenn der Benutzer, der die Gelder erhält, auch ein Smart Contract ist, wenn auch bösartig. Daher kann vor dem letzten Funktionsaufruf oder der Bilanzaktualisierung ein Reentrancy-Angriff gestartet werden, um zusätzliche Gelder zu transferieren. Erfahrene Prüfer identifizieren diese Art von Schwachstelle.

Hier ist der behobene Code dafür:

function withdraw(uint256 _amount) public {    require(balances[msg.sender] >= _amount, "Unzureichendes Guthaben.");    balances[msg.sender] -= _amount;    (bool success, ) = msg.sender.call{value: _amount}("");
require(success, “Transfer failed.”);}

Überprüfen Sie, wie die Aktualisierungsfunktion für das Gleichgewicht zuerst aufgerufen wird und dann der erste Schritt zum Benutzer erfolgt. Diese Änderung in der Betriebsreihenfolge ist das, was den Vertrag repariert.

Nicht-Ethereum-Ketten und Codeüberprüfung

Die Welt der dezentralen Anwendungen und Smart Contracts hat sich über Ethereum hinaus bewegt. Obwohl der Großteil des Geschehens immer noch innerhalb des Ethereum-Ökosystems stattfindet, gibt es andere Ketten wie Cardano, Solana und mehr, die Smart Contracts unterstützen und unterschiedliche Prüfungsstandards erfordern.

Warum ist jede Plattform einzigartig?

Verschiedene Blockchains verwenden verschiedene Programmiersprachen. Die Semantik, Syntax und Eigenschaften des Codes sind unterschiedlich, wodurch die Smart Contracts auf unterschiedliche Schreib- und Prüfpraktiken reagieren. Zum Beispiel verwendet Ethereum Solidity, wohingegen Polkadotverwendet Ink und Rost — was es reaktiv auf spezifische Prüfstandards macht.

Werkzeuge für den Wechsel von Ethereum

Wenn Sie über Ethereum hinausgehen möchten, gibt es einige spezialisierte Prüfungs-Tools, mit denen Sie beginnen können. Zum Beispiel gibt es bei Cardano die Marlowe-Suite für formale Verifikation und Prüfung. Wenn es um Solana geht, sind Rust-spezifische libfuzzer und cargo-fuzz für Prüfung und Vertragsprüfung gedacht. Ein Multi-Chain-Revisor muss mit diesen Konzepten vertraut sein, um Vertragsanfälligkeiten in Schach zu halten.

Welche Arten von Smart Contract-Prüfungen gibt es?

Nur zur Wiederholung: Sie können die Überprüfung von Smart Contracts in drei Arten unterteilen: manuell, automatisch und hybrid. Beachten Sie, dass Menschen hybride Prüfstrategien für komplexe Verträge mit tiefgreifender Geschäftslogik bevorzugen, da sie am umfassendsten sind.

Outsourcing Ihrer Prüfungen

Organisationen und Einzelpersonen mit minimalem Programmierwissen lagern oft ihre Schreib- und Prüfanforderungen an renommierte Unternehmen aus. Bei der Prüfung ist die Auswahl des richtigen Unternehmens umso wichtiger, da auch wenn KI-WerkzeugewieChatGPTkann beim Schreiben von Smart Contract-Code helfen, das Überprüfen erfordert manuelle Einblicke.

Außerdem sind hier die Faktoren zu beachten, während die Prüfaufgaben ausgelagert werden:

Die Wahl der richtigen Firma

Bevor Sie sich auf das richtige Outsourcing-Unternehmen konzentrieren, ist es entscheidend, vergangene Prüfungen zu überprüfen, die Erfahrung zu bewerten und sogar auf die Schlüsselmitglieder des Teams zu achten.

Verantwortlichkeiten, Kosten und Overheads verstehen

Bevor Sie eine Einstellung vornehmen, beachten Sie die Kosten und Dienstleistungen im Zusammenhang mit den Audits. Es ist unerlässlich, zunächst die Art der angebotenen Dienstleistungen zu verstehen — wie die Identifizierung von Problemen, die Lösung von Problemen und mehr. Sie müssen auch überprüfen, ob auch Nachaudits nach Implementierung der ersten Fehlerbehebungslinie vorgesehen sind. Die Kosten für eine Smart Contract-Prüfung können je nach den angebotenen Dienstleistungen variieren, und daher ist es notwendig, jede Anforderung und jedes Angebot vor dem Fortfahren zu verfolgen.

Beste Praktiken für die Überprüfung von Smart Contracts

Wenn Sie ein Unternehmen verlassen und Smart Contracts selbst prüfen möchten, sollten Sie die besten Strategien und Praktiken im Auge behalten:

  1. Konzentrieren Sie sich immer auf eine gründliche Codeüberprüfung, einschließlich der Syntax und Logik
  2. Beginnen Sie damit, häufige Sicherheitslücken mithilfe von Tools wie Slither, MythX und weiteren zu erkennen
  3. Durchsuchen Sie das Smart Contract Weakness Classification Registry oder SWC, um die bekannten Schwachstellen zu finden und diese im Voraus zu überprüfen.
  4. Testen Sie die Smart Contracts gründlich, einschließlich Integrationstests, Modultests und mehr, um den Code in einer Vielzahl von Szenarien zu überprüfen.
  5. Es ist wichtig, speziell nach den Chancen für Reentrancy-Angriffe zu suchen. Der beste Weg, dem entgegenzuwirken, besteht darin, nach rekursiven Aufrufen zu suchen, die Hacker vor der ersten Funktion des Smart Contracts aufrufen können.
  6. Konzentrieren Sie sich auf Funktionen, die zu externen Aufrufen führen. Ein Fehler in dieser Hinsicht kann den Zustand und den Kontrollfluss verändern, was nicht wünschenswert ist.
  7. Halten Sie immer ein Auge auf Codebits, die auf den Gasverbrauch hinweisen. Sie möchten nicht, dass Ihr Vertrag Interaktionen initiiert, die prohibitiv teuer sind.

Smart Contract-Entwicklung und KI: die Zukunft

Künstliche Intelligenz macht es tatsächlich einfacher, Smart Contracts zu schreiben. Unabhängig von KI-Innovationen erfordert die Fähigkeit, Smart Contracts auf bestmögliche Weise zu überprüfen, jedoch nach wie vor menschliches Eingreifen. Wenn Sie also planen, Ihr nächstes Web3-Produkt mit Schwerpunkt auf Smart Contracts und dezentralen Anwendungen zu entwickeln, ist es entscheidend, sich konsequent auf die besten Prüfressourcen für Ihre Smart Contracts zu konzentrieren. Mit Kryptowährungs-Hacks und Sicherheitsverletzungen, die jeden Tag auftauchen, und Hacker, die neue Strategien planen, um durchzubrechen, ist die Überprüfung eines Vertrags auf Perfektion sicherlich eine der wichtigeren Fähigkeiten der modernen Zeit.

Haftungsausschluss:

  1. Dieser Artikel ist eine Wiedergabe von [Beincrypto], und das Urheberrecht liegt beim Originalautor [Ananda Banerjee]. Wenn Einwände gegen die Reproduktion bestehen, wenden Sie sich bitte an das Gate Learn-Team, und das Team wird diese umgehend gemäß den relevanten Verfahren bearbeiten.
  2. Haftungsausschluss: Die in diesem Artikel geäußerten Ansichten und Meinungen stellen nur die persönlichen Ansichten des Autors dar und stellen keine Anlageberatung dar.
  3. Andere Sprachversionen des Artikels werden vom Gate Learn-Team übersetzt. Ohne die Erwähnung von Gate.io ist es nicht gestattet, die übersetzten Artikel zu kopieren, zu verbreiten oder zu plagiieren.
Start Now
Sign up and get a
$100
Voucher!