Ejercicio: Implementación en la red de prueba Ropsten

Completado

Ahora tiene un contrato inteligente. Se ha implementado correctamente en la red de desarrollo. A continuación, se centrará en la implementación de la red de prueba Ropsten.

Información general del ejercicio

En este tutorial, se realizará la implementación en Ropsten mediante MetaMask con ether de prueba. Para el proceso de implementación es necesario configurar una cuenta de Infura a fin de conectarse a la red de prueba Ropsten y realizar la implementación en ella. Después de la implementación, se puede usar Ropsten Testnet Explorer para inspeccionar los bloques que se han implementado en la red de prueba.

Configuración del ejercicio

Para configurar el ejercicio, siga estos pasos:

  1. Instale y configure MetaMask.
  2. Obtenga ether de prueba.
  3. Instale HDWallet-Provider y fs.
  4. Instale Infura y vincule los puntos de conexión a la red de prueba Ropsten.

Configuración de MetaMask

Si todavía no lo ha hecho, instale y configure MetaMask. Después, inicie sesión en la cuenta en el explorador.

Adición de ether a la red de prueba Ropsten de MetaMask

Use la cuenta de MetaMask para conectarse a la red de prueba Ropsten. Para empezar, obtenga ether de prueba de Ropsten Test Faucet:

  1. Abra MetaMask.

  2. Conéctese a Ropsten.

  3. Copie la dirección de la cuenta.

    Captura de pantalla en la que se muestra la extensión del navegador MetaMask donde puede copiar la dirección de la cuenta.

  4. Abra una pestaña o ventana del explorador y vaya al grifo de Ropsten.

  5. Para solicitar ether, escriba la dirección de la cuenta de la red de prueba y, después, seleccione Send me test Ether (Enviarme ether de prueba).

    Captura de pantalla en la que se muestra cómo solicitar ether de prueba en el grifo de Ropsten.

  6. En MetaMask, compruebe que ahora tiene ether en la cuenta.

    Captura de pantalla en la que se muestra la extensión del navegador MetaMask. La cuenta muestra la cantidad de ether.

Instalación de HDWallet-Provider y fs

A continuación, necesitará HDWallet-Provider. Este proveedor de Web3 habilitado para carteras crea el mnemotécnico secreto y la dirección de red de conexión. También necesitará fs para leer desde el sistema de archivos.

Para instalar las dos herramientas, vuelva al proyecto todolist en Visual Studio Code. Abra el panel de terminal y ejecute los comandos siguiente:

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

Espere a que finalicen las instalaciones de fs y HDWallet-Provider. Es posible que vea varias advertencias. Siempre que estas advertencias no sean errores, puede omitirlas.

El conjunto de desarrollo Infura proporciona acceso de API instantáneo y escalable a las redes Ethereum. Infura es un clúster de nodos de Ethereum hospedado que ofrece a los usuarios la capacidad de ejecutar una aplicación en una red pública. Use Infura para implementar e interactuar con redes públicas.

Para configurar una cuenta, vaya al sitio web de Infura y siga estos pasos:

  1. Configure una cuenta y confirme la dirección de correo electrónico.
  2. Seleccione Ethereum>Create new project (Crear proyecto). Asigne el nombre TodoList al proyecto.
  3. En Keys (Claves), cambie el punto de conexión a Ropsten.

La vista debería ser similar al siguiente proyecto de prueba:

Captura de pantalla en la que se muestra el proceso de creación de un proyecto de Infura.

Conexión a Ropsten

Vuelva a la carpeta del proyecto todolist en Visual Studio Code.

  1. En el archivo de configuración de Truffle, ./truffle-config.js, quite las marcas de comentario de las líneas de hdwallet-provider, infuraKey, fs y mnemonic:

     const HDWalletProvider = require('@truffle/hdwallet-provider');
     const infuraKey = "fj4jll3k.....";
    
     const fs = require('fs');
     const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  2. Vaya a la cuenta de Infura para obtener el valor de infuraKey. En Infura, se denomina Project ID (Id. de proyecto). Está visible en el punto de conexión de Ropsten:

    Captura de pantalla en la que se muestra el punto de conexión de Ropsten que se va a copiar.

  3. Junto a Project ID, seleccione el icono del Portapapeles para copiar el id. Vuelva a ./truffle-config.js para pegar el valor infuraKey.

    En la imagen siguiente se muestra un ejemplo de lo que debe pegar. Aunque la clave de ejemplo se puede usar como marcador de posición, la clave será diferente a la que ve aquí y debe usar su propia infuraKey.

    const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
    
  4. Cree un archivo con el nombre .secret. Copie el mnemotécnico en el nuevo archivo.

    Para obtener el mnemotécnico, en MetaMask, vaya a Settings>Security & Privacy (Configuración>Seguridad y privacidad). Seleccione Reveal Seed Phrase (Mostrar la frase de inicialización). Escriba la contraseña de MetaMask para verificar su identidad. Después, seleccione Copy to clipboard (Copiar en el Portapapeles).

    Importante

    No comparta el mnemotécnico con nadie o podrían acceder a su cuenta. Si usa Git, asegúrese de incluir .secret en el archivo .gitignore.

    Captura de pantalla en la que se muestra cómo mostrar una frase de inicialización en MetaMask.

  5. Use el código siguiente para leer la frase de inicialización del archivo .secret y recortar todos los espacios en blanco:

    const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  6. Para definir la red, quite la marca de comentario de la configuración de red de Ropsten en truffle-config.js. Asegúrese de que la configuración es similar a este código:

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

Implementación en Ropsten

Para realizar la implementación en Ropsten, ejecute el comando siguiente desde el terminal de Visual Studio Code:

truffle migrate --network ropsten

Si la conexión se realiza correctamente, verá la salida siguiente:

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

Comprobación de la implementación del contrato

Siga los pasos de las secciones siguientes para comprobar que el contrato se ha implementado.

Comprobación en MetaMask

Compruebe en MetaMask si se ha usado ether para implementar el contrato.

Captura de pantalla en la que se muestra el saldo de MetaMask después de la implementación en Ropsten.

Comprobación en Ropsten Etherscan

En Ropsten Etherscan, escriba la dirección del contrato. Después, inspeccione el contrato.

Captura de pantalla en la que se muestra el contrato implementado en Etherscan.

También puede comprobar la implementación si abre una nueva ventana de terminal en Visual Studio Code. Puede interactuar con el contrato mediante la consola de Truffle como lo hace en la cadena de bloques de desarrollo Ganache.