Esercizio - Eseguire la distribuzione nella rete di test Ropsten
È 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:
- Installare e configurare MetaMask.
- Ottenere ether di test.
- Installare HDWallet-Provider e fs.
- 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:
Aprire MetaMask.
Connettersi a Ropsten.
Copiare l'indirizzo dell'account.
Aprire una finestra o una scheda del browser e passare al faucet di Ropsten.
Per richiedere ether, immettere l'indirizzo dell'account della testnet e quindi selezionare Send me test Ether (Inviami ether di test).
In MetaMask verificare di avere ether nell'account.
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:
npm init
npm install fs
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.
Configurare Infura e collegare gli endpoint alla rete di test Ropsten
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:
- Configurare un account e confermare l'indirizzo di posta elettronica.
- Selezionare Ethereum>Create new project (Crea nuovo progetto). Denominare il progetto TodoList.
- In Keys (Chiavi) modificare l'endpoint in Ropsten.
Il risultato visualizzato dovrebbe essere simile al progetto di test seguente:
Connettersi a Ropsten
Tornare alla cartella del progetto todolist in Visual Studio Code.
Nel file di configurazione di Truffle, ./truffle-config.js, rimuovere il commento dalle righe per
hdwallet-provider
,infuraKey
,fs
emnemonic
:const HDWalletProvider = require('@truffle/hdwallet-provider'); const infuraKey = "fj4jll3k....."; const fs = require('fs'); const mnemonic = fs.readFileSync(".secret").toString().trim();
Passare all'account di Infura per ottenere il valore
infuraKey
. In Infura è denominato Project ID (ID progetto). È visibile nell'endpoint Ropsten: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";
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.
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();
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.
Eseguire la verifica in Ropsten Etherscan
In Ropsten Etherscan immettere l'indirizzo del contratto, quindi analizzare il contratto.
È 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.