Упражнение. Развертывание в тестовой сети Ropsten

Завершено

Итак, у нас есть смарт-контракт. Мы успешно развернули его в нашей сети разработки. Далее мы рассмотрим развертывание в тестовой сети Ropsten.

Обзор упражнения

В этом руководстве мы выполним развертывание в Ropsten с помощью MetaMask за тестовые эфиры. Процесс развертывания требует настройки счета Infura для подключения и развертывания в сети tesnet Ropsten. После развертывания можно использовать обозреватель tesnet Ropsten для проверки блоков, развернутых в tesnet.

Настройка упражнения

Чтобы настроить это упражнение, выполните следующие действия:

  1. Установите и настройте MetaMask.
  2. Получите тестовые эфиры.
  3. Установите HDWallet-Provider и fs.
  4. Установите Infura и свяжите конечные точки с тестовой сетью Ropsten.

Настройка MetaMask

Если вы еще не сделали этого, установите и настройте MetaMask. Затем войдите в свою учетную запись в браузере.

Добавление эфиров в тестовую сеть MetaMask Ropsten

Используйте учетную запись MetaMask для подключения к тестовой сети Ropsten. Для начала получите тестовые эфиры из Ropsten Test Faucet:

  1. Откройте MetaMask.

  2. Подключитесь к Ropsten.

  3. Скопируйте адрес своего счета.

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

  4. Откройте окно или вкладку браузера и перейдите к "крану" Ropsten.

  5. Чтобы запросить эфир, введите адрес счета tesnet, а затем выберите Send me test Ether (Отправить мне тестовые эфиры).

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

  6. В MetaMask убедитесь, что на вашем счету есть эфиры.

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

Установка HDWallet-Provider и fs

Далее вам потребуется HDWallet-Provider. Этот поставщик кошелька Web3 создает назначенный символ секрета и сетевой адрес подключения. Для чтения из файловой системы также потребуется fs.

Чтобы установить оба средства, вернитесь в проект todolist в Visual Studio Code. Откройте область терминала и выполните следующие команды:

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

Дождитесь завершения установки fs и HDWallet-Provider. Может появиться несколько предупреждений. Если это не ошибки, их можно игнорировать.

Пакет разработки Infura предоставляет моментальный масштабируемый доступ к сетям Ethereum. Infura — это размещенный кластер узлов Ethereum, который дает пользователям возможность запускать приложение в общедоступной сети. Используйте Infura для развертывания общедоступных сетей и взаимодействия с ними.

Чтобы настроить счет, перейдите на веб-сайт Infura и выполните следующие действия.

  1. Настройте счет и подтвердите свой адрес электронной почты.
  2. Выберите Ethereum>Create new project (Создать новый проект). Присвойте проекту имя TodoList.
  3. В разделе Ключи измените конечную точку на Ropsten.

Результат должен выглядеть, как в следующем тестовом проекте:

Screenshot showing the process of creating an Infura project.

Подключение к Ropsten

Вернитесь в папку проекта todolist в Visual Studio Code.

  1. В файле конфигурации Truffle, ./truffle-config.js, раскомментируйте строки для hdwallet-provider, infuraKey, fs и mnemonic:

     const HDWalletProvider = require('@truffle/hdwallet-provider');
     const infuraKey = "fj4jll3k.....";
    
     const fs = require('fs');
     const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  2. Перейдите к своему счету Infura, чтобы получить значение infuraKey. В Infura это называется идентификатором проекта. Он отображается в конечной точке Ropsten:

    Screenshot showing the Ropsten endpoint to copy.

  3. Рядом с идентификатором проекта щелкните значок буфера обмена, чтобы скопировать идентификатор. Вернитесь к ./truffle-config.js, чтобы вставить значение infuraKey.

    На следующем изображении показан пример данных, которые необходимо вставить. Ваш ключ будет отличаться от показанного здесь:

    const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
    
  4. Создайте файл с именем .secret. Скопируйте назначенный символ в новый файл.

    Чтобы получить назначенный символ, в MetaMask перейдите в раздел Параметры>Безопасность и конфиденциальность. Выберите Показать начальную фразу. Введите пароль MetaMask, чтобы подтвердить свою личность. Выберите Копировать в буфер обмена.

    Важно!

    Не делитесь назначенным символом ни с кем, иначе злоумышленники могут получить доступ к вашему счету. При использовании Git обязательно включите .secret в файл .gitignore.

    Screenshot showing how to reveal a seed phrase in MetaMask.

  5. Используйте следующий код для считывания начальной фразы из файла .secret и для обрезки всех пробелов:

    const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  6. Определите сеть, раскомментировав параметры сети Ropsten в truffle-config.js. Убедитесь, что конфигурация выглядит следующим образом:

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

Развертывание в Ropsten

Для развертывания в Ropsten выполните следующую команду в терминале Visual Studio Code:

truffle migrate --network ropsten

Если подключение установлено успешно, вы увидите следующие выходные данные:

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

Проверка развертывания контракта

Выполните действия, описанные в следующих разделах, чтобы убедиться в том, что контракт развернут.

Проверка в MetaMask

Проверьте MetaMask, чтобы убедиться, что для развертывания контракта использованы эфиры.

Screenshot showing the MetaMask balance after deployment to Ropsten.

Проверка в Ropsten Etherscan

В Ropsten Etherscan введите адрес контракта. Затем проверьте свой контракт.

Screenshot showing the contract deployed in Etherscan.

Вы также можете проверить развертывание, открыв новое окно терминала в Visual Studio Code. Вы взаимодействуете с контрактом с помощью консоли Truffle, как в блокчейне разработки Ganache.