Ihre USDC werden zum gestrigen Zinssatz verzinstQuicknode verschiebt es automatisch in den besten Morpho-Tresor des Tages. Live auf 7 Blockchains.
Entwickeln Sie Ihre StrategieErstellen von Ethereum -Contracts über die Befehlszeile
Diese Woche werden wir mitethereum einen Smart Contract erstellen!ethereum könnt ihrethereum nur Smart Contracts erstellen, sondern auch eure Web3-Projekte (ähnlich wie mit Truffle) über das umfangreiche Befehlszeilen-Tool von sbt verwalten. (Das macht euch das Leben als Web3-Entwickler einfach leichter!)

15. Mai 2019 – 6 Minuten Lesezeit

Im Artikel der letzten Woche, haben wir darüber gesprochen, wie man mit einem bereits bereitgestellten Smart Contract interagiert, und zwar mithilfe von ethereum. Diese Woche werden wir einen Smart Contract erstellen, und zwar mithilfe von ethereum!
ethereum ermöglicht Ihnen nicht nur die Erstellung von Smart Contracts, sondern unterstützt Sie auch bei der Verwaltung Ihrer Web3-Projekte (so wie man es bei Trüffel), obwohl sbt… das leistungsstarke Befehlszeilentool. (Es macht dir als Web3-Entwickler einfach das Leben leichter!)
Falls Sie zufällig auf diesen Artikel gestoßen sind, empfehlen wir Ihnen dringend, den vorherigen Teil dieser Reihe zu lesen.
Teil 1 – ethereum Ein Tool zur Interaktion mit der Ethereum über die Befehlszeile
Teil 2 – Interaktion mit Smart Contracts über die Befehlszeile
Bevor wir loslegen, müssen wir ein paar Dinge installieren (falls Sie diese noch nicht haben):
Installieren Sie Java (Version ≥ 8)
Git installieren
Installieren Sie Maven (Maven ist ein Abhängigkeitsmanager für das Java-Ökosystem; so wie npm für Node.js ist, ist Maven für das Java-Ökosystem)
Nach der Installation können wir loslegen 👉
In den vorherigen Tutorials haben wir sbt durch Ausführen der ./übrigens Wrapper-Skript innerhalb der eth-Befehlszeile Repository. Dieses Mal müssen wir unser eigenes Repository erstellen.
Um ethereum Als Vorlage für das Projekt verwenden wir giter8. Giter8 ist ein Befehlszeilentool, mit dem sich Dateien und Verzeichnisse aus Vorlagen erstellen lassen, die auf GitHub oder in einem beliebigen anderen Git-Repository veröffentlicht sind. Giter8 unterstützt uns dabei, Projekte auf der Grundlage einer vordefinierten Vorlage aufzubauen.
Verwenden Sie diesen Befehl, um ein Projekt-Repository anzulegen:
sbt new swaldman/solidity-seed.g8
Da ethereum ist ein interaktives Build-Tool; dieser Befehl stellt Ihnen einige Fragen:
[info] Projektdefinition wird aus /Users/testuser/project geladen [info] Aktuelles Projekt auf „testuser“ gesetzt (in der Build-Datei: /Users/testuser/) Ein minimales Solidity-Projekt fürethereum Name [my-solidity-project]: eth-timelock Version [0.0.1-SNAPSHOT]: sbt_ethereum_version [0.1.7-SNAPSHOT]: sbt_version [1.2.8]: Vorlage angewendet in ./eth-timelock
Dadurch wird ein neues eth-timelock Verzeichnis (siehe oben, wir haben eth-timelock (als Projektname). So sieht die Verzeichnisstruktur aus:

Nun sind wir bereit, unseren ersten Vertrag zu erstellen. Denken Sie daran, alle Verträge unter src/main/solidity .
Wir werden Folgendes erstellen: Zeitsperre Vertrag. Er sieht die Zahlung von ETH bei Vertragsabschluss und lässt nur dies zu ETH die vom Vertragsverfasser nach Ablauf einer bestimmten Frist zurückgezogen werden kann.
Erstellen Sie eine Datei namens „Timelock.sol“ im Verzeichnis „src/main/solidity“.
Timelock.sol
pragma solidity >=0.4.24;
contract Timelock {
address public owner;
uint public releaseDate;
constructor( uint _days, uint _seconds ) public payable {
require( msg.value > 0, "There's no point in creating an empty Timelock!" );
owner = msg.sender;
releaseDate = now + (_days * 1 days) + (_seconds * 1 seconds);
}
function withdraw() public {
require( msg.sender == owner, "Only the owner can withdraw!" );
require( now > releaseDate, "Cannot withdraw prior to release date!" );
msg.sender.transfer( address(this).balance );
}
}Nun wollen wir unser Projekt kompilieren.
Führen Sie zunächst Folgendes aus: sbt In Ihrem Verzeichnis „eth-timelock“:
$ sbt [info] Einstellungen für das Projekt „eth-timelock“ aus „build.sbt“ werden geladen ... [info] Aktuelles Projekt auf „eth-timelock“ gesetzt (in der Build-Datei: /Users/testuser/eth-timelock/) [info] Verfügbare Solidity-Compiler werden aktualisiert. [info]ethereum.1.7-SNAPSHOT erfolgreich initialisiert (erstellt am Sonntag, 17. Februar 2019, 21:58:11 -0800)
Nächster Lauf kompilieren :
sbt:eth-timelock> compile [info] Kompilierung von 1 Solidity-Quelldatei nachethereum... [info] Kompilierung von „Timelock.sol“. (Debug-Quelldatei:ethereum.sol“) [info] Es werden keine Scala-Stubs generiert, da die Einstellung „ethcfgScalaStubsPackage“ nicht festgelegt wurde. [info] Wenn Sie möchten, dass Scala-Stubs generiert werden, definieren Sie bitte „ethcfgScalaStubsPackage“. [info] Aktualisierung läuft … [info] Aktualisierung abgeschlossen. [success] Gesamtdauer: 1 s, abgeschlossen am 25. Februar 2019 um 00:16:01 Uhr
Sollten Sie eine Warnmeldung sehen, ignorieren Sie diese einfach. Sie können sehen, wie die ABI unter ethereum .
Nun sind wir bereit, unseren Smart Contract zu deployen. Bevor wir das tun, können Sie, falls Sie das Netzwerk wechseln möchten, wie folgt vorgehen:
Überprüfen Sie zunächst Ihr Netzwerk mit ethNodeChainIdPrint . sbt-etherum ist standardmäßig MainNet . Ändern wir die Einstellung auf „Ropsten“ (wenn Sie ein anderes testnet verwenden möchten, können Sie das gerne tun).
ethNodeChainIdOverrideSet 3
Hier steht „3“ für die Netzwerk-ID von Ropsten. Denk daran, dass du etwas ETH auf deinem Konto haben solltest, um den Vertrag zu deployen.
Nun beginnen wir mit der Bereitstellung:
sbt:eth-timelock> ethTransactionDeploy Timelock <TAB>
Verwenden Sie immer die Tabulatortaste, ethereum bietet eine sehr umfangreiche Tab-Unterstützung für die Befehlsvervollständigung. Wenn Sie die Tab-Taste drücken, wird Ihnen angezeigt, was als Nächstes zu tun ist.
Unser Smart Contract benötigt zwei Parameter:
Tage — Die Anzahl der Tage, an denen der Eigentümer Ether abheben kann.
Sekunden — Anzahl der Sekunden, nach deren Ablauf der Eigentümer Ether abheben kann.
Wir benötigen die Rechenzeit des Smart Contracts in Tagen und Sekunden. Geben wir also 0 Tage und 300 Sekunden (5 Minuten) ein:
ethTransactionDeploy Timelock 0 300 <TAB>
Nun müssen wir den Ether-Betrag übergeben, der den Vertrag für den angegebenen Zeitraum sperrt. Du kannst den ETH-Betrag wie folgt übergeben: wei, gwei, szabo, finney, oder Äther Einheiten.
Setzen wir auf 10 wei 5 Minuten (300 Sekunden) lang:
ethTransactionDeploy Timelock 0 300 10 Wei
Sie werden daraufhin aufgefordert, Ihre Wallet mit Ihrer Passphrase zu entsperren und anschließend die Transaktion zu bestätigen. Außerdem werden Sie gebeten, einen Aliasnamen für Ihren bereitgestellten Vertrag anzugeben.
Sobald dies abgeschlossen ist, erhalten Sie die Adresse des bereitgestellten Vertrags, die Sie auf Etherscan einsehen können. Überprüfen wir nun den Kontostand des Vertrags mit folgendem Befehl:
ethAddressBalance timelock
Hier Zeitsperre ist der Aliasname, den wir bei der Bereitstellung unseres Vertrags verwendet haben.
Interaktion mit Ihrem Smart Contract
Bevor die 5 Minuten abgelaufen sind, wollen wir unseren Smart Contract nun mit Hilfe von ethTransactionMock. Dies simuliert eine Transaktion auf unserem Ethereum , führt die Transaktion jedoch nicht tatsächlich aus. Versuchen wir es also einmal:
sbt:eth-timelock> ethTransactionMock timelock withdraw
Wenn Sie diesen Befehl innerhalb von 5 Minuten nach der Bereitstellung des Smart Contracts ausführen, wird eine Fehlermeldung angezeigt. Führen Sie den obigen Befehl nach 5 Minuten aus, und es wird eine Erfolgsmeldung angezeigt, der Befehl wird jedoch nicht tatsächlich ausgeführt.
Nun wollen wir eigentlich unsere 10 abheben wei nach 5 Minuten vom Vertrag zurücktreten, und zwar mithilfe von:
ethTransactionInvoke timelock withdraw
Dadurch wird eine Transaktion erstellt und die gesperrten 10 abgezogen. wei. Sobald dieser Befehl erfolgreich ausgeführt wurde, können Sie den Kontostand des Vertrags erneut überprüfen:
ethAddressBalance timelock
Das war’s für heute! Jetzt habt ihr eine weitere Möglichkeit, Smart Contracts zu #entwickeln und bereitzustellen. Lasst uns in den Kommentaren wissen, ob euch der Artikel gefallen hat und ob ihr mehr zu diesem (oder einem ähnlichen) Thema lesen möchtet 🙏
Benötigst du Hilfe bei deinem Projekt oder hast du Fragen? Kontaktiere uns über dieses Formular, auf Twitter unterQuicknode oder schreib uns auf Discord!
Quicknode wurde 2017 gegründet und Quicknode Entwicklern und Unternehmen eine Blockchain-Infrastruktur auf institutionellem Niveau Quicknode . Dank einer Verfügbarkeit von 99,99 % und der Unterstützung von mehr als 80 Blockchains können Teams On-Chain-Anwendungen ohne Kompromisse entwickeln und skalieren.
Die neuesten Erkenntnisse aus der Technik, Produkt-Updates und Neuigkeiten aus der Web3-Welt – direkt in Ihren Posteingang.
SOC 2 Typ II-zertifiziert · ISO 27001