Esercizio - Eseguire la distribuzione nella rete di test Ropsten

Completato

È stato creato un contratto intelligente che è stato quindi distribuito nella rete di sviluppo. Ora si passerà alla distribuzione nella rete di test Ropsten.

Panoramica dell'esercizio

In questa esercitazione si eseguirà la distribuzione in Ropsten usando MetaMask con ether di test. Il processo di distribuzione richiede la configurazione di un account di Infura per la connessione e la distribuzione nella testnet Ropsten. Dopo la distribuzione, è possibile usare Ropsten Testnet Explorer per analizzare i blocchi che sono stati distribuiti nella testnet.

Configurazione per l'esercizio

Per configurare l'esercizio, è necessario:

  1. Installare e configurare MetaMask.
  2. Ottenere ether di test.
  3. Installare HDWallet-Provider e fs.
  4. Installare Infura e collegare gli endpoint alla rete di test Ropsten.

Configurare MetaMask

Se non è già stato fatto, installare e configurare MetaMask, quindi accedere all'account nel browser.

Aggiungere ether alla rete di test Ropsten in MetaMask

Usare l'account di MetaMask per connettersi alla rete di test Ropsten. Per iniziare, ottenere ether di test dal faucet di test di Ropsten:

  1. Aprire MetaMask.

  2. Connettersi a Ropsten.

  3. Copiare l'indirizzo dell'account.

    Screenshot che mostra l'estensione del browser MetaMask dove è possibile copiare l'indirizzo dell'account.

  4. Aprire una finestra o una scheda del browser e passare al faucet di Ropsten.

  5. Per richiedere ether, immettere l'indirizzo dell'account della testnet e quindi selezionare Send me test Ether (Inviami ether di test).

    Screenshot che mostra come richiedere ether di test nel faucet di Ropsten.

  6. In MetaMask verificare di avere ether nell'account.

    Screenshot che mostra l'estensione del browser MetaMask. L'account elenca la quantità di ether.

Installare HDWallet-Provider e fs

A questo punto è necessario HDWallet-Provider. Questo provider Web3 abilitato per il portafoglio crea il tasto di scelta e l'indirizzo di rete di connessione segreti. È necessario anche fs per leggere il file system.

Per installare entrambi gli strumenti, tornare al progetto todolist in Visual Studio Code. Aprire il riquadro del terminale ed eseguire i comandi seguenti:

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

Attendere il completamento delle installazioni di fs e HDWallet-Provider. Potrebbero venire visualizzati diversi avvisi. Finché questi avvisi non segnalano errori, è possibile ignorarli.

La suite di sviluppo Infura fornisce accesso API immediato e scalabile alle reti Ethereum. Infura è un cluster di nodi Ethereum ospitato che consente agli utenti di eseguire un'applicazione in una rete pubblica. Usare Infura per eseguire la distribuzione e interagire con le reti pubbliche.

Per impostare un account, accedere al sito Web di Infura e seguire questa procedura:

  1. Configurare un account e confermare l'indirizzo di posta elettronica.
  2. Selezionare Ethereum>Create new project (Crea nuovo progetto). Denominare il progetto TodoList.
  3. In Keys (Chiavi) modificare l'endpoint in Ropsten.

Il risultato visualizzato dovrebbe essere simile al progetto di test seguente:

Screenshot che mostra il processo di creazione di un progetto Infura.

Connettersi a Ropsten

Tornare alla cartella del progetto todolist in Visual Studio Code.

  1. Nel file di configurazione di Truffle, ./truffle-config.js, rimuovere il commento dalle righe per hdwallet-provider, infuraKey, fs e mnemonic:

     const HDWalletProvider = require('@truffle/hdwallet-provider');
     const infuraKey = "fj4jll3k.....";
    
     const fs = require('fs');
     const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  2. Passare all'account di Infura per ottenere il valore infuraKey. In Infura è denominato Project ID (ID progetto). È visibile nell'endpoint Ropsten:

    Screenshot che mostra l'endpoint Ropsten da copiare.

  3. Accanto a Project ID (ID progetto) selezionare l'icona degli Appunti per copiare l'ID. Tornare a ./truffle-config.js per incollarvi il valore infuraKey.

    La figura seguente illustra un esempio di che cosa incollare. La chiave sarà diversa da quella visualizzata qui:

    const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
    
  4. Creare un file denominato .secret. Copiare il tasto di scelta nel nuovo file.

    Per ottenere il tasto di scelta, in MetaMask passare a Settings>Security & Privacy (Impostazioni > Sicurezza e privacy). Selezionare Reveal Seed Phrase (Rivela la frase del valore di inizializzazione). Immettere la password di MetaMask per verificare l'identità, quindi selezionare Copy to clipboard (Copia negli Appunti).

    Importante

    Non condividere il tasto di scelta con nessuno per evitare che altre persone possano accedere all'account. Se si usa Git, assicurarsi di includere .secret nel file .gitignore.

    Screenshot che mostra come rivelare una frase di un valore di inizializzazione in MetaMask.

  5. Usare il codice seguente per leggere la frase del valore di inizializzazione dal file .secret e per tagliare tutti gli spazi vuoti:

    const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  6. Definire la rete rimuovendo il commento dalle impostazioni della rete Ropsten in truffle-config.js. Verificare che la configurazione sia simile a questo codice:

    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 )
     },
    

Eseguire la distribuzione in Ropsten

Per eseguire la distribuzione in Ropsten, eseguire il comando seguente dal terminale di Visual Studio Code:

truffle migrate --network ropsten

Se la connessione viene stabilita correttamente, verrà visualizzato l'output seguente:

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

Verificare la distribuzione del contratto

Seguire i passaggi delle sezioni successive per verificare che il contratto sia stato distribuito.

Eseguire la verifica in MetaMask

Controllare MetaMask per verificare che siano stati usati gli ether per distribuire il contratto.

Screenshot che mostra il saldo di MetaMask dopo la distribuzione in Ropsten.

Eseguire la verifica in Ropsten Etherscan

In Ropsten Etherscan immettere l'indirizzo del contratto, quindi analizzare il contratto.

Screenshot che mostra il contratto distribuito in Etherscan.

È anche possibile verificare la distribuzione aprendo una nuova finestra del terminale in Visual Studio Code. Si interagisce con il contratto usando la console di Truffle come nella blockchain di sviluppo di Ganache.