Übung: Bereitstellung im Ropsten-Testnetzwerk

Abgeschlossen

Sie verfügen nun über einen Smart Contract. Diesen haben Sie erfolgreich im Entwicklungsnetzwerk bereitgestellt. Als Nächstes führen Sie die Bereitstellung im Ropsten-Testnetzwerk durch.

Übersicht über die Übung

In diesem Tutorial führen Sie die Bereitstellung in Ropsten mithilfe von MetaMask mit Test-Ether durch. Für diesen Bereitstellungsprozess müssen Sie ein Infura-Konto erstellen, um eine Verbindung mit dem Ropsten-Testnet herzustellen und die Bereitstellung in diesem durchzuführen. Nach der Bereitstellung können Sie den Ropsten-Testnet-Explorer verwenden, um die Blocks zu untersuchen, die im Testnet bereitgestellt wurden.

Übungseinrichtung

Zum Einrichten der Übung führen Sie die folgenden Schritte durch:

  1. Installieren und Einrichten von MetaMask
  2. Abrufen von Test-Ether
  3. Installieren von HDWallet-Provider und fs
  4. Installieren von Infura und Verknüpfen der Endpunkte mit dem Ropsten-Testnetzwerk

Einrichten von MetaMask

Sofern Sie es noch nicht getan haben, müssen Sie MetaMask installieren und einrichten. Melden Sie sich dann im Browser bei Ihrem Browser an.

Hinzufügen von Ether zum Ropsten-Testnetzwerk mit MetaMask

Verwenden Sie Ihr MetaMask-Konto, um eine Verbindung mit dem Ropsten-Testnetzwerk herzustellen. Rufen Sie zunächst Test-Ether vom Ropsten-Testfaucet ab:

  1. Öffnen Sie MetaMask.

  2. Stellen Sie eine Verbindung mit Ropsten her.

  3. Kopieren Sie die Adresse Ihres Kontos.

    Screenshot showing the MetaMask browser extension where you can copy the account address.

  4. Öffnen Sie ein Browserfenster oder eine Registerkarte, und rufen Sie den Ropsten-Faucet auf.

  5. Geben Sie die Adresse Ihres Testnetzwerkkontos ein, und klicken Sie dann auf Send me test Ether (Mir Test-Ether senden), um Ether anzufordern.

    Screenshot showing how to request test ether on the Ropsten faucet.

  6. Überprüfen Sie in MetaMask, ob Ihr Konto nun über Ether verfügt.

    Screenshot showing the MetaMask browser extension. The account lists the ether quantity.

Installieren von HDWallet-Provider und fs

Als Nächstes benötigen Sie HDWallet-Provider. Dieser Wallet-fähige Web3-Anbieter erstellt Ihr geheimes mnemonisches Zeichen und die Netzwerkadresse für die Verbindung. Außerdem benötigen Sie fs, um aus Ihrem Dateisystem zu lesen.

Kehren Sie zum Projekt todolist in Visual Studio Code zurück, um beide Tools zu installieren. Öffnen Sie den Terminalbereich, und führen Sie die folgenden Befehle aus:

  1. npm init
  2. npm install fs
  3. npm install @truffle/hdwallet-provider

Warten Sie auf den Abschluss der Installationen von fs und HDWallet-Provider. Möglicherweise werden mehrere Warnungen angezeigt. Solange es sich bei diesen Warnungen nicht um Fehler handelt, können Sie sie ignorieren.

Die Infura-Entwicklungssammlung bietet sofortigen, skalierbaren API-Zugriff auf die Ethereum-Netzwerke. Infura wird auf einem Ethereum-Knotencluster gehostet, der Benutzern die Möglichkeit bietet, eine Anwendung auf einem öffentlichen Netzwerk auszuführen. Verwenden Sie Infura für die Bereitstellung in und die Interaktion mit öffentlichen Netzwerken.

Rufen Sie die Infura-Website auf, und führen Sie die folgenden Schritte aus, um ein Konto einzurichten:

  1. Richten Sie ein Konto ein, und bestätigen Sie Ihre E-Mail-Adresse.
  2. Klicken Sie auf Ethereum>Create new project (Neues Projekt erstellen). Geben Sie dem Projekt den Namen TodoList.
  3. Ändern Sie den Endpunkt unter Keys (Schlüssel) in Ropsten.

Ihre Anzeige sollte dem folgenden Testprojekt ähneln:

Screenshot showing the process of creating an Infura project.

Herstellen einer Verbindung mit Ropsten

Kehren Sie zum Projektordner todolist in Visual Studio Code zurück.

  1. Heben Sie in der Truffle-Konfigurationsdatei ./truffle-config.js die Auskommentierung der Zeilen für hdwallet-provider, infuraKey, fs und mnemonic auf:

     const HDWalletProvider = require('@truffle/hdwallet-provider');
     const infuraKey = "fj4jll3k.....";
    
     const fs = require('fs');
     const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  2. Wechseln Sie zu Ihrem Infura-Konto, um den infuraKey-Wert abzurufen. In Infura wird dieser als Project ID (Projekt-ID) bezeichnet. Diese ID wird im Ropsten-Endpunkt angezeigt:

    Screenshot showing the Ropsten endpoint to copy.

  3. Klicken Sie neben der Projekt-ID auf das Klemmbrettsymbol, um die ID zu kopieren. Kehren Sie zur Datei ./truffle-config.js zurück, um den infuraKey-Wert einzufügen.

    Im folgenden Beispiel wird ein Beispielwert gezeigt. Ihr Schlüssel wird sich von dem hier gezeigten unterscheiden:

    const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
    
  4. Erstellen Sie eine Datei namens .secret. Kopieren Sie Ihr mnemonisches Zeichen in die neue Datei.

    Navigieren Sie in MetaMask zu Settings>Security & Privacy (Einstellung > Sicherheit und Datenschutz), um Ihr mnemonisches Zeichen abzurufen. Klicken Sie auf Reveal Seed Phrase (Seedphrase anzeigen). Geben Sie Ihr MetaMask-Kennwort ein, um Ihre Identität zu verifizieren. Klicken Sie dann auf Copy to clipboard (In Zwischenablage kopieren).

    Wichtig

    Geben Sie Ihr mnemonisches Zeichen nicht für andere Personen frei, da sie sonst auf Ihr Konto zugreifen können. Wenn Sie Git verwenden, stellen Sie sicher, dass Sie .secret in Ihre .gitignore-Datei einfügen.

    Screenshot showing how to reveal a seed phrase in MetaMask.

  5. Verwenden Sie den folgenden Code, um die Seedphrase aus der .secret-Datei zu lesen und den Leerraum zu entfernen:

    const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  6. Definieren Sie das Netzwerk, indem Sie die Auskommentierung der Ropsten-Netzwerkeinstellungen in der Datei truffle-config.js aufheben. Stellen Sie sicher, dass Ihre Konfiguration mit dem folgenden Code übereinstimmt:

    ropsten: {
       provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/${infuraKey}`),
       network_id: 3,       // Ropsten's id
       gas: 5500000,        // Ropsten has a lower block limit than mainnet
       confirmations: 2,    // # of confs to wait between deployments. (default: 0)
       timeoutBlocks: 200,  // # of blocks before a deployment times out (minimum/default: 50)
       skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
     },
    

Bereitstellen in Ropsten

Führen Sie den folgenden Befehl über das Visual Studio Code-Terminal aus, um die Bereitstellung in Ropsten durchzuführen:

truffle migrate --network ropsten

Wenn Ihre Verbindung erfolgreich hergestellt wird, wird die folgende Ausgabe angezeigt:

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.

Warning: Both truffle-config.js and truffle.js were found. Using truffle-config.js.

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.


Starting migrations...
======================
> Network name:    'ropsten'
> Network id:      3
> Block gas limit: 8000029 (0x7a121d)


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x2f456acc5f842ddf0eb151742e47dd6e8ec5e48d73b1f150e2908cb56e0bf174
   > Blocks: 1            Seconds: 29
   > contract address:    0x789101d0B0Ffa4f8f87E67AF8ff8F84bD519752D
   > block number:        9398701
   > block timestamp:     1609784599
   > account:             0x896587D82C895F30433cade401068C2791A6936F
   > balance:             0.99616138
   > gas used:            191931 (0x2edbb)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00383862 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 9398702)
   > confirmation number: 2 (block: 9398703)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00383862 ETH


2_deploy_contracts.js
=====================

   Deploying 'TodoList'
   --------------------
   > transaction hash:    0xad8066308e9cc8503400c86a43674d856a71e02696e2c21b3e55f566df5afc36
   > Blocks: 0            Seconds: 8
   > contract address:    0x48112BE8d0E6e7bA892aFa2d4Ab58e9c43dd37De
   > block number:        9398706
   > block timestamp:     1609784870
   > account:             0x896587D82C895F30433cade401068C2791A6936F
   > balance:             0.98513544
   > gas used:            508959 (0x7c41f)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.01017918 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 9398707)
   > confirmation number: 2 (block: 9398708)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.01017918 ETH


Summary
=======
> Total deployments:   2
> Final cost:          0.0140178 ETH

Überprüfen der Bereitstellung des Smart Contracts

Führen Sie die Schritte in den nächsten Abschnitten aus, um zu überprüfen, ob Ihr Smart Contract bereitgestellt wurde.

Überprüfung in MetaMask

Überprüfen Sie in MetaMask, ob Ether für die Bereitstellung des Smart Contracts verwendet wurde.

Screenshot showing the MetaMask balance after deployment to Ropsten.

Überprüfen in Ropsten Etherscan

Geben Sie die Kontaktadresse in Ropsten Etherscan ein. Untersuchen Sie dann Ihren Smart Contract.

Screenshot showing the contract deployed in Etherscan.

Sie können Ihre Bereitstellung auch überprüfen, indem Sie ein neues Terminalfenster in Visual Studio Code öffnen. Sie interagieren mithilfe der Truffle-Konsole auf dieselbe Weise mit Ihrem Smart Contract wie in der Ganache-Entwicklungsblockchain.