Урок 4

Smart-Contract-Interaktionen und -Bereitstellung

Smart Contracts können mit anderen Verträgen auf der Ethereum-Blockchain interagieren und Funktionsaufrufe, das Lesen von Variablen und die Übertragung von Ether oder Token ermöglichen.

Mit externen Verträgen interagieren

Smart Contracts können mit anderen Verträgen auf der Ethereum-Blockchain interagieren, sodass sie Funktionen aufrufen, Variablen lesen und Ether oder Token senden können. Eine Möglichkeit, diese Interaktion zu erleichtern, ist die Verwendung von Web3j, einer leichtgewichtigen Java-Bibliothek für die Arbeit mit Ethereum. Web3j kann automatisch Smart-Contract-Wrapper-Code generieren, der eine nahtlose Bereitstellung und Interaktion mit Smart Contracts aus der JVM ermöglicht.

Um mit externen Verträgen über Web3j zu interagieren, müssen Sie zunächst Ihren Smart Contract kompilieren und den Wrapper-Code generieren. Anschließend können Sie Ihren Smart Contract erstellen und bereitstellen oder einen vorhandenen Vertrag verwenden, was es einfach macht, mit dem Smart Contract zu handeln und Smart Contract-Methoden direkt aufzurufen.

Ereignisse und Protokolle

Ereignisse sind entscheidend für die Verfolgung und Überwachung der Aktivitäten von Smart Contracts auf der Blockchain. Sie bieten eine Möglichkeit, Protokolle zu emittieren, die von Off-Chain-Systemen gespeichert und später abgerufen werden können. Ereignisse erleichtern es, spezifische Vertragsereignisse oder Änderungen in Zustandsvariablen zu verfolgen, was besonders hilfreich für dApps (dezentralisierte Anwendungen) ist, die Echtzeit-Updates erfordern.

Protokolle sind die Aufzeichnungen, die von Ereignissen ausgegeben und in der Blockchain gespeichert werden. Sie sind ein wesentlicher Bestandteil des Ethereum-Ökosystems, da sie eine effiziente Kommunikation zwischen Smart Contracts und Off-Chain-Systemen ermöglichen. Protokolle werden ebenfalls indiziert, sodass Anwendungen ganz einfach nach bestimmten Ereignissen oder Datenpunkten filtern und suchen können.

Beispiel: Bereitstellen eines Smart Contracts mit Remix und MetaMask

Schritt 1: Öffnen Sie das Remix-IDE
Öffnen Sie zuerst die Remix-IDE ( https://remix.ethereum.org/) in Ihrem Webbrowser.

Schritt 2: Erstellen Sie eine neue Datei
Klicken Sie in der oberen linken Ecke der IDE auf die Schaltfläche "+", um einen neuen leeren Arbeitsbereich zu erstellen. Klicken Sie dann auf die Seite "Neue Datei", um eine neue Datei zu erstellen

Nennen Sie die Datei "Auction.sol".

Schritt 3: Definieren Sie den Vertrag
Kopieren und fügen Sie den folgenden Code in die neue „Auction.sol“-Datei ein:

TypeScript// SPDX-License-Identifier: MIT// Spezifizieren der Solidity-Versionpragma solidity ^0.8.0;// Definiere den Auktionsvertragcontract Auction { // Deklariere Zustandsvariablen Adresse zahlbar öffentlicher Eigentümer; // Der Eigentümer des Vertrags (kann die Auktion abbrechen) uint public startBlock; // Die Blocknummer, bei der die Auktion beginnt uint public endBlock; // Die Blocknummer, bei der die Auktion endet string public ipfsHash; // IPFS-Hash für den zu versteigernden Gegenstand bool public canceled;  Ob die Auktion abgebrochen wurde, ob die Auktion öffentlich beendet wurde; Ob die Auktion mit dem höchsten Gebot der Öffentlichkeit beendet wurde; Das bisher höchste Gebot richtet sich an zahlbare öffentliche Höchstbietende; Die Adresse des Höchstbietenden // Declare events event AuctionCanceled(); Ereignis, das ausgegeben wird, wenn die Auktion abgebrochen wird Ereignis HighestBidIncreased (Adresse des Bieters, uint-Betrag); Ereignis, das ausgegeben wird, wenn ein neues Höchstgebot gesetzt wird Ereignis AuctionEnded(Adresse Gewinner, uint-Betrag); Ereignis, das am Ende der Auktion ausgegeben wird // Mapping mapping(address => uint256) als öffentliche Salden deklarieren;    Konstruktorfunktion constructor() { owner = payable(msg.sender); // Setze den Eigentümer auf die Adresse, die den Vertrag bereitstellt startBlock = block.number; // Setze den Startblock auf die aktuelle Blocknummer endBlock = startBlock + 40320; // Setze den Endblock auf 1 Woche (40320 Blöcke) nach dem Startblock ipfsHash = ""; Initialisieren Sie den IPFS-Hash mit einem leeren String } // Funktion zum Platzieren eines Gebots function placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Auktion ist nicht aktiv."); // Prüfen Sie, ob die Auktion aktiv ist require(msg.value > highestBid, "Es gibt bereits ein höheres Gebot."); // Prüfen Sie, ob das neue Gebot höher ist als das aktuelle Höchstgebot require(!canceled, "Auktion ist abgebrochen."); // Prüfen Sie, ob die Auktion nicht abgebrochen wurde        Wenn es zuvor einen Höchstbietenden gab, addieren Sie seinen Gebotsbetrag zu seinem Guthaben, wenn (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Setze das neue Höchstgebot und den Bieter highestBid = msg.value;        highestBidder = zahlbar(msg.sender);        Geben Sie ein Ereignis aus, um zu signalisieren, dass ein neues Höchstgebot festgelegt wurde emit HighestBidIncreased (msg.sender, msg.value);    } // Funktion zum Abbrechen der Auktion function cancelAuction() public { require(msg.sender == owner, "Nur der Besitzer kann die Auktion abbrechen."); // Prüfen Sie, ob der Absender der Eigentümer ist require(!ended, "Die Auktion ist bereits beendet."); // Prüfen Sie, ob die Auktion noch nicht beendet ist // Setzen Sie das Flag "Abgebrochen" und geben Sie ein Ereignis aus, um zu signalisieren, dass die Auktion abgebrochen wurde canceled = true;        geben Sie AuctionCanceled();    } // Funktion zum Beenden der Auktionsfunktion endAuction() public { require(block.number > endBlock, "Die Auktion ist noch nicht vorbei."); // Prüfen Sie, ob die Auktion vorbei ist require(!canceled, "Die Auktion ist abgebrochen."); // Prüfen Sie, ob die Auktion nicht abgebrochen wurde require(!ended, "Die Auktion ist bereits beendet."); // Prüfen Sie, ob die Auktion noch nicht beendet ist // Setzen Sie das Flag "Ende" und geben Sie ein Ereignis aus, um zu signalisieren, dass die Auktion beendet wurde ended = true;        ebe AuctionEnded(höchsterBieter, höchstes Gebot);        Übertragen Sie den höchsten Gebotsbetrag an den Eigentümer owner.transfer(highestBid);        Wenn es einen früheren Höchstbietenden gab, addieren Sie seinen Gebotsbetrag zu seinem Guthaben, wenn (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Funktion zum Festlegen des IPFS-Hashes für das zu versteigernde Objekt function setIpfsHash(string memory hash) public { require(msg.sender == owner, "Nur der Eigentümer kann den IPFS-Hash setzen."); // Überprüfen, ob der Absender der Eigentümer ist ipfsHash = hash; // Setze den IPFS-Hash auf den angegebenen Wert }}

Dieser Code definiert das AuktionVertrag, der es Benutzern ermöglicht, Gebote für einen Artikel abzugeben und die Auktion nach Ablauf eines festgelegten Zeitraums zu beenden. Der Vertrag verfügt auch über eine Funktion zum Abbrechen der Auktion und eine Funktion zum Setzen eines IPFS-Hashs für den versteigerten Artikel.

Schritt 4: Kompilieren Sie den Vertrag

Klicken Sie auf die Registerkarte „Solidity Compiler“ im linken Menü. Unter „Compile Auction.sol“ klicken Sie auf die Schaltfläche „Kompilieren“. Der Vertrag sollte erfolgreich kompiliert werden, und Sie sollten ein grünes Häkchen neben „Auction.sol“ im Datei-Explorer sehen.

Schritt 5: Bereitstellen des Vertrags

Klicken Sie auf die Registerkarte „Bereitstellen & Ausführen von Transaktionen“ im linken Menü. Wählen Sie unter „Umgebung“ die Umgebung „Injected Web3“ aus. Wählen Sie unter „Vertrag“ den Vertrag „Auktion“ zum Bereitstellen aus. Klicken Sie auf die Schaltfläche „Bereitstellen“.

Schritt 6: Mit dem Vertrag interagieren
Sobald der Vertrag bereitgestellt wurde, können Sie mit ihm interagieren, indem Sie die verschiedenen Funktionen verwenden, die im Vertrag definiert sind. Sie können z. B. die placeBid()Funktion, um ein Gebot für das Element abzugeben

Durch die Verwendung von Remix und MetaMask können Sie einfach Smart Contracts im Ethereum-Netzwerk bereitstellen und interagieren, was die Entwicklung und das Testen von dezentralen Anwendungen in einer benutzerfreundlichen Umgebung ermöglicht.

Highlights
Smart Contracts können mit anderen Verträgen auf der Ethereum-Blockchain interagieren, was Funktionaufrufe, Variablenlesen und die Übertragung von Ether oder Tokens ermöglicht.
Web3j ist eine leichtgewichtige Java-Bibliothek, die die Interaktion mit Ethereum erleichtert. Es kann automatisch Smart-Contract-Wrapper-Code generieren, um eine nahtlose Bereitstellung und Interaktion mit Verträgen aus der JVM zu ermöglichen.
Events sind wesentlich für die Verfolgung und Überwachung der Vertragsaktivität auf der Blockchain. Sie geben Protokolle aus, die von Off-Chain-Systemen gespeichert und abgerufen werden können und ermöglichen Echtzeitupdates für dApps.
Logs, die von Ereignissen ausgegebene Aufzeichnungen, spielen eine wichtige Rolle bei der effizienten Kommunikation zwischen Smart Contracts und Off-Chain-Systemen. Sie sind indiziert, was eine einfache Filterung und Suche nach spezifischen Ereignissen oder Datenpunkten ermöglicht.
Das bereitgestellte Beispiel zeigt den Prozess des Bereitstellens eines Smart Contracts mit Remix IDE und MetaMask. Es umfasst Schritte wie das Erstellen einer neuen Datei, das Definieren des Vertrags, das Kompilieren, das Bereitstellen und das Interagieren mit seinen Funktionen.

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 4

Smart-Contract-Interaktionen und -Bereitstellung

Smart Contracts können mit anderen Verträgen auf der Ethereum-Blockchain interagieren und Funktionsaufrufe, das Lesen von Variablen und die Übertragung von Ether oder Token ermöglichen.

Mit externen Verträgen interagieren

Smart Contracts können mit anderen Verträgen auf der Ethereum-Blockchain interagieren, sodass sie Funktionen aufrufen, Variablen lesen und Ether oder Token senden können. Eine Möglichkeit, diese Interaktion zu erleichtern, ist die Verwendung von Web3j, einer leichtgewichtigen Java-Bibliothek für die Arbeit mit Ethereum. Web3j kann automatisch Smart-Contract-Wrapper-Code generieren, der eine nahtlose Bereitstellung und Interaktion mit Smart Contracts aus der JVM ermöglicht.

Um mit externen Verträgen über Web3j zu interagieren, müssen Sie zunächst Ihren Smart Contract kompilieren und den Wrapper-Code generieren. Anschließend können Sie Ihren Smart Contract erstellen und bereitstellen oder einen vorhandenen Vertrag verwenden, was es einfach macht, mit dem Smart Contract zu handeln und Smart Contract-Methoden direkt aufzurufen.

Ereignisse und Protokolle

Ereignisse sind entscheidend für die Verfolgung und Überwachung der Aktivitäten von Smart Contracts auf der Blockchain. Sie bieten eine Möglichkeit, Protokolle zu emittieren, die von Off-Chain-Systemen gespeichert und später abgerufen werden können. Ereignisse erleichtern es, spezifische Vertragsereignisse oder Änderungen in Zustandsvariablen zu verfolgen, was besonders hilfreich für dApps (dezentralisierte Anwendungen) ist, die Echtzeit-Updates erfordern.

Protokolle sind die Aufzeichnungen, die von Ereignissen ausgegeben und in der Blockchain gespeichert werden. Sie sind ein wesentlicher Bestandteil des Ethereum-Ökosystems, da sie eine effiziente Kommunikation zwischen Smart Contracts und Off-Chain-Systemen ermöglichen. Protokolle werden ebenfalls indiziert, sodass Anwendungen ganz einfach nach bestimmten Ereignissen oder Datenpunkten filtern und suchen können.

Beispiel: Bereitstellen eines Smart Contracts mit Remix und MetaMask

Schritt 1: Öffnen Sie das Remix-IDE
Öffnen Sie zuerst die Remix-IDE ( https://remix.ethereum.org/) in Ihrem Webbrowser.

Schritt 2: Erstellen Sie eine neue Datei
Klicken Sie in der oberen linken Ecke der IDE auf die Schaltfläche "+", um einen neuen leeren Arbeitsbereich zu erstellen. Klicken Sie dann auf die Seite "Neue Datei", um eine neue Datei zu erstellen

Nennen Sie die Datei "Auction.sol".

Schritt 3: Definieren Sie den Vertrag
Kopieren und fügen Sie den folgenden Code in die neue „Auction.sol“-Datei ein:

TypeScript// SPDX-License-Identifier: MIT// Spezifizieren der Solidity-Versionpragma solidity ^0.8.0;// Definiere den Auktionsvertragcontract Auction { // Deklariere Zustandsvariablen Adresse zahlbar öffentlicher Eigentümer; // Der Eigentümer des Vertrags (kann die Auktion abbrechen) uint public startBlock; // Die Blocknummer, bei der die Auktion beginnt uint public endBlock; // Die Blocknummer, bei der die Auktion endet string public ipfsHash; // IPFS-Hash für den zu versteigernden Gegenstand bool public canceled;  Ob die Auktion abgebrochen wurde, ob die Auktion öffentlich beendet wurde; Ob die Auktion mit dem höchsten Gebot der Öffentlichkeit beendet wurde; Das bisher höchste Gebot richtet sich an zahlbare öffentliche Höchstbietende; Die Adresse des Höchstbietenden // Declare events event AuctionCanceled(); Ereignis, das ausgegeben wird, wenn die Auktion abgebrochen wird Ereignis HighestBidIncreased (Adresse des Bieters, uint-Betrag); Ereignis, das ausgegeben wird, wenn ein neues Höchstgebot gesetzt wird Ereignis AuctionEnded(Adresse Gewinner, uint-Betrag); Ereignis, das am Ende der Auktion ausgegeben wird // Mapping mapping(address => uint256) als öffentliche Salden deklarieren;    Konstruktorfunktion constructor() { owner = payable(msg.sender); // Setze den Eigentümer auf die Adresse, die den Vertrag bereitstellt startBlock = block.number; // Setze den Startblock auf die aktuelle Blocknummer endBlock = startBlock + 40320; // Setze den Endblock auf 1 Woche (40320 Blöcke) nach dem Startblock ipfsHash = ""; Initialisieren Sie den IPFS-Hash mit einem leeren String } // Funktion zum Platzieren eines Gebots function placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Auktion ist nicht aktiv."); // Prüfen Sie, ob die Auktion aktiv ist require(msg.value > highestBid, "Es gibt bereits ein höheres Gebot."); // Prüfen Sie, ob das neue Gebot höher ist als das aktuelle Höchstgebot require(!canceled, "Auktion ist abgebrochen."); // Prüfen Sie, ob die Auktion nicht abgebrochen wurde        Wenn es zuvor einen Höchstbietenden gab, addieren Sie seinen Gebotsbetrag zu seinem Guthaben, wenn (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Setze das neue Höchstgebot und den Bieter highestBid = msg.value;        highestBidder = zahlbar(msg.sender);        Geben Sie ein Ereignis aus, um zu signalisieren, dass ein neues Höchstgebot festgelegt wurde emit HighestBidIncreased (msg.sender, msg.value);    } // Funktion zum Abbrechen der Auktion function cancelAuction() public { require(msg.sender == owner, "Nur der Besitzer kann die Auktion abbrechen."); // Prüfen Sie, ob der Absender der Eigentümer ist require(!ended, "Die Auktion ist bereits beendet."); // Prüfen Sie, ob die Auktion noch nicht beendet ist // Setzen Sie das Flag "Abgebrochen" und geben Sie ein Ereignis aus, um zu signalisieren, dass die Auktion abgebrochen wurde canceled = true;        geben Sie AuctionCanceled();    } // Funktion zum Beenden der Auktionsfunktion endAuction() public { require(block.number > endBlock, "Die Auktion ist noch nicht vorbei."); // Prüfen Sie, ob die Auktion vorbei ist require(!canceled, "Die Auktion ist abgebrochen."); // Prüfen Sie, ob die Auktion nicht abgebrochen wurde require(!ended, "Die Auktion ist bereits beendet."); // Prüfen Sie, ob die Auktion noch nicht beendet ist // Setzen Sie das Flag "Ende" und geben Sie ein Ereignis aus, um zu signalisieren, dass die Auktion beendet wurde ended = true;        ebe AuctionEnded(höchsterBieter, höchstes Gebot);        Übertragen Sie den höchsten Gebotsbetrag an den Eigentümer owner.transfer(highestBid);        Wenn es einen früheren Höchstbietenden gab, addieren Sie seinen Gebotsbetrag zu seinem Guthaben, wenn (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Funktion zum Festlegen des IPFS-Hashes für das zu versteigernde Objekt function setIpfsHash(string memory hash) public { require(msg.sender == owner, "Nur der Eigentümer kann den IPFS-Hash setzen."); // Überprüfen, ob der Absender der Eigentümer ist ipfsHash = hash; // Setze den IPFS-Hash auf den angegebenen Wert }}

Dieser Code definiert das AuktionVertrag, der es Benutzern ermöglicht, Gebote für einen Artikel abzugeben und die Auktion nach Ablauf eines festgelegten Zeitraums zu beenden. Der Vertrag verfügt auch über eine Funktion zum Abbrechen der Auktion und eine Funktion zum Setzen eines IPFS-Hashs für den versteigerten Artikel.

Schritt 4: Kompilieren Sie den Vertrag

Klicken Sie auf die Registerkarte „Solidity Compiler“ im linken Menü. Unter „Compile Auction.sol“ klicken Sie auf die Schaltfläche „Kompilieren“. Der Vertrag sollte erfolgreich kompiliert werden, und Sie sollten ein grünes Häkchen neben „Auction.sol“ im Datei-Explorer sehen.

Schritt 5: Bereitstellen des Vertrags

Klicken Sie auf die Registerkarte „Bereitstellen & Ausführen von Transaktionen“ im linken Menü. Wählen Sie unter „Umgebung“ die Umgebung „Injected Web3“ aus. Wählen Sie unter „Vertrag“ den Vertrag „Auktion“ zum Bereitstellen aus. Klicken Sie auf die Schaltfläche „Bereitstellen“.

Schritt 6: Mit dem Vertrag interagieren
Sobald der Vertrag bereitgestellt wurde, können Sie mit ihm interagieren, indem Sie die verschiedenen Funktionen verwenden, die im Vertrag definiert sind. Sie können z. B. die placeBid()Funktion, um ein Gebot für das Element abzugeben

Durch die Verwendung von Remix und MetaMask können Sie einfach Smart Contracts im Ethereum-Netzwerk bereitstellen und interagieren, was die Entwicklung und das Testen von dezentralen Anwendungen in einer benutzerfreundlichen Umgebung ermöglicht.

Highlights
Smart Contracts können mit anderen Verträgen auf der Ethereum-Blockchain interagieren, was Funktionaufrufe, Variablenlesen und die Übertragung von Ether oder Tokens ermöglicht.
Web3j ist eine leichtgewichtige Java-Bibliothek, die die Interaktion mit Ethereum erleichtert. Es kann automatisch Smart-Contract-Wrapper-Code generieren, um eine nahtlose Bereitstellung und Interaktion mit Verträgen aus der JVM zu ermöglichen.
Events sind wesentlich für die Verfolgung und Überwachung der Vertragsaktivität auf der Blockchain. Sie geben Protokolle aus, die von Off-Chain-Systemen gespeichert und abgerufen werden können und ermöglichen Echtzeitupdates für dApps.
Logs, die von Ereignissen ausgegebene Aufzeichnungen, spielen eine wichtige Rolle bei der effizienten Kommunikation zwischen Smart Contracts und Off-Chain-Systemen. Sie sind indiziert, was eine einfache Filterung und Suche nach spezifischen Ereignissen oder Datenpunkten ermöglicht.
Das bereitgestellte Beispiel zeigt den Prozess des Bereitstellens eines Smart Contracts mit Remix IDE und MetaMask. Es umfasst Schritte wie das Erstellen einer neuen Datei, das Definieren des Vertrags, das Kompilieren, das Bereitstellen und das Interagieren mit seinen Funktionen.

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.