Упражнение. Развертывание в тестовой сети Ropsten
Итак, у нас есть смарт-контракт. Мы успешно развернули его в нашей сети разработки. Далее мы рассмотрим развертывание в тестовой сети Ropsten.
Обзор упражнения
В этом руководстве мы выполним развертывание в Ropsten с помощью MetaMask за тестовые эфиры. Процесс развертывания требует настройки счета Infura для подключения и развертывания в сети tesnet Ropsten. После развертывания можно использовать обозреватель tesnet Ropsten для проверки блоков, развернутых в tesnet.
Настройка упражнения
Чтобы настроить это упражнение, выполните следующие действия:
- Установите и настройте MetaMask.
- Получите тестовые эфиры.
- Установите HDWallet-Provider и fs.
- Установите Infura и свяжите конечные точки с тестовой сетью Ropsten.
Настройка MetaMask
Если вы еще не сделали этого, установите и настройте MetaMask. Затем войдите в свою учетную запись в браузере.
Добавление эфиров в тестовую сеть MetaMask Ropsten
Используйте учетную запись MetaMask для подключения к тестовой сети Ropsten. Для начала получите тестовые эфиры из Ropsten Test Faucet:
Откройте MetaMask.
Подключитесь к Ropsten.
Скопируйте адрес своего счета.
Откройте окно или вкладку браузера и перейдите к "крану" Ropsten.
Чтобы запросить эфир, введите адрес счета tesnet, а затем выберите Send me test Ether (Отправить мне тестовые эфиры).
В MetaMask убедитесь, что на вашем счету есть эфиры.
Установка HDWallet-Provider и fs
Далее вам потребуется HDWallet-Provider. Этот поставщик кошелька Web3 создает назначенный символ секрета и сетевой адрес подключения. Для чтения из файловой системы также потребуется fs.
Чтобы установить оба средства, вернитесь в проект todolist в Visual Studio Code. Откройте область терминала и выполните следующие команды:
npm init
npm install fs
npm install @truffle/hdwallet-provider
Дождитесь завершения установки fs и HDWallet-Provider. Может появиться несколько предупреждений. Если это не ошибки, их можно игнорировать.
Настройка Infura и связывание конечных точек с тестовой сетью Ropsten
Пакет разработки Infura предоставляет моментальный масштабируемый доступ к сетям Ethereum. Infura — это размещенный кластер узлов Ethereum, который дает пользователям возможность запускать приложение в общедоступной сети. Используйте Infura для развертывания общедоступных сетей и взаимодействия с ними.
Чтобы настроить счет, перейдите на веб-сайт Infura и выполните следующие действия.
- Настройте счет и подтвердите свой адрес электронной почты.
- Выберите Ethereum>Create new project (Создать новый проект). Присвойте проекту имя TodoList.
- В разделе Ключи измените конечную точку на Ropsten.
Результат должен выглядеть, как в следующем тестовом проекте:
Подключение к Ropsten
Вернитесь в папку проекта todolist в Visual Studio Code.
В файле конфигурации 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();
Перейдите к своему счету Infura, чтобы получить значение
infuraKey
. В Infura это называется идентификатором проекта. Он отображается в конечной точке Ropsten:Рядом с идентификатором проекта щелкните значок буфера обмена, чтобы скопировать идентификатор. Вернитесь к ./truffle-config.js, чтобы вставить значение
infuraKey
.На следующем изображении показан пример данных, которые необходимо вставить. Ваш ключ будет отличаться от показанного здесь:
const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
Создайте файл с именем .secret. Скопируйте назначенный символ в новый файл.
Чтобы получить назначенный символ, в MetaMask перейдите в раздел Параметры>Безопасность и конфиденциальность. Выберите Показать начальную фразу. Введите пароль MetaMask, чтобы подтвердить свою личность. Выберите Копировать в буфер обмена.
Важно!
Не делитесь назначенным символом ни с кем, иначе злоумышленники могут получить доступ к вашему счету. При использовании Git обязательно включите .secret в файл .gitignore.
Используйте следующий код для считывания начальной фразы из файла .secret и для обрезки всех пробелов:
const mnemonic = fs.readFileSync(".secret").toString().trim();
Определите сеть, раскомментировав параметры сети 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, чтобы убедиться, что для развертывания контракта использованы эфиры.
Проверка в Ropsten Etherscan
В Ropsten Etherscan введите адрес контракта. Затем проверьте свой контракт.
Вы также можете проверить развертывание, открыв новое окно терминала в Visual Studio Code. Вы взаимодействуете с контрактом с помощью консоли Truffle, как в блокчейне разработки Ganache.