Читать книгу Криптовалюта с нуля: От идеи до запуска вашего блокчейн проекта. Часть 2 - Иван Алексеевич Евдокимов - Страница 5

Часть 2: Техническая реализация (Практическое руководство)
Глава 5: Создание токена на Ethereum (стандарт ERC-20)
5.4 Компиляция, деплой в тестовую сеть (Goerli/Sepolia)

Оглавление

Теперь, когда у нас есть готовый смарт-контракт, пришло время оживить его, развернув в реальной тестовой сети Ethereum. Это критически важный шаг перед запуском в основной сети.


1. Подготовка к работе с тестовыми сетями

Важное обновление: Сеть Rinkeby устарела. Вместо нее используйте:

· Goerli (пока еще работает, но планируется отключение)

· Sepolia (рекомендуемая новая тестовая сеть)


Что понадобится:

1. Тестовые ETH для оплаты комиссий

2. RPC Endpoint для подключения к сети

3. Настроенный MetaMask


2. Получение тестовых ETH

Для Sepolia:

1. Перейдите на sepoliafaucet.com (требуется аккаунт Alchemy)

2. Или используйте poinfrastructure.com/faucet


Для Goerli:

1. Перейдите на goerlifaucet.com (требуется аккаунт Alchemy)

2. Или используйте chainlink faucet


Шаги:

1. Скопируйте ваш адрес из MetaMask

2. Вставьте на сайте крана

3. Получите 0.1-0.5 test ETH


3. Настройка Truffle для тестовых сетей


Обновите truffle-config.js:

javascript

const HDWalletProvider = require('@truffle/hdwallet-provider');

require('dotenv').config();


module.exports = {

networks: {

// Локальная разработка

development: {

host: "127.0.0.1",

port: 7545,

network_id: "*"

},


// Sepolia testnet

sepolia: {

provider: () => new HDWalletProvider({

privateKeys: [process.env.PRIVATE_KEY],

providerOrUrl: `https://sepolia.infura.io/v3/${process.env.INFURA_PROJECT_ID}`

}),

network_id: 11155111,

gas: 5500000,

confirmations: 2,

timeoutBlocks: 200,

skipDryRun: true

},


// Goerli testnet

goerli: {

provider: () => new HDWalletProvider({

privateKeys: [process.env.PRIVATE_KEY],

providerOrUrl: `https://goerli.infura.io/v3/${process.env.INFURA_PROJECT_ID}`

}),

network_id: 5,

gas: 5500000,

confirmations: 2,

timeoutBlocks: 200,

skipDryRun: true

}

},


compilers: {

solc: {

version: "0.8.19",

settings: {

optimizer: {

enabled: true,

runs: 200

}

}

}

}

};


4. Настройка переменных окружения

Создайте файл .env в корне проекта:

env

MNEMONIC="ваша мнемоническая фраза из 12 слов"

PRIVATE_KEY="ваш приватный ключ"

INFURA_PROJECT_ID=ваш_infura_project_id


Как получить Infura Project ID:


1. Зарегистрируйтесь на infura.io

2. Создайте новый проект

3. Скопируйте Project ID


Внимание! Никогда не коммитьте .env файл в Git!


5. Установка зависимостей

bash

npm install @truffle/hdwallet-provider dotenv


6. Создание миграционного файла

В папке migrations/ создайте файл 2_deploy_tokens.js:

javascript

const BookCoin = artifacts.require("BookCoin");


module.exports = async function (deployer) {

const initialSupply = web3.utils.toWei("1000000", "ether"); // 1,000,000 токенов

await deployer.deploy(BookCoin, initialSupply);


const bookCoin = await BookCoin.deployed();

console.log("BookCoin адрес:", bookCoin.address);

console.log("Общее предложение:", await bookCoin.totalSupply());

};


7. Компиляция контракта

bash

truffle compile


Ожидаемый результат:

Compiling your contracts…

===========================

> Compiling ./contracts/BookCoin.sol

> Compiling @openzeppelin/contracts/token/ERC20/ERC20.sol

> Artifacts written to /path/to/build/contracts

> Compiled successfully using:

– solc: 0.8.19


8. Деплой в тестовую сеть

В Sepolia:

bash

truffle migrate –network sepolia


В Goerli:

bash

truffle migrate –network goerli


Ожидаемый результат:

Starting migrations…

======================

> Network name: 'sepolia'

> Network id: 11155111

> Block gas limit: 30000000 (0x1c9c380)


1_initial_migration.js

======================

Deploying 'Migrations'

––

> transaction hash: 0x1234…5678

> Blocks: 1 Seconds: 12

> contract address: 0xABCD…1234

> block number: 4000000

> block timestamp: 1681234567

> account: 0xYourAddress

> balance: 0.45

> gas used: 250000

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.005 ETH


2_deploy_tokens.js

==================

Deploying 'BookCoin'

––

> transaction hash: 0x5678…9012

> Blocks: 1 Seconds: 15

> contract address: 0xEFGH…5678

> block number: 4000001

> block timestamp: 1681234582

> account: 0xYourAddress

> balance: 0.42

> gas used: 1500000

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.03 ETH

> BookCoin адрес: 0xEFGH…5678

> Общее предложение: BigNumber { value: "1000000000000000000000000" }


Summary

=======

> Total deployments: 2

> Final cost: 0.035 ETH


9. Проверка в блок-эксплорере

Скопируйте адрес контракта из логов и откройте в соответствующем блок-эксплорере:

Для Sepolia:

https://sepolia.etherscan.io/address/ВАШ_АДРЕС_КОНТРАКТА


Для Goerli:

https://goerli.etherscan.io/address/ВАШ_АДРЕС_КОНТРАКТА


Вы должны увидеть:

· Подтвержденную транзакцию создания

· Контракт с кодом (пока не верифицированным)

· Баланс токенов у вашего адреса


10. Взаимодействие с контрактом через консоль

bash

truffle console –network sepolia


В консоли выполните:

javascript

// Получить экземпляр контракта

const bookCoin = await BookCoin.deployed()


// Проверить общее предложение

const totalSupply = await bookCoin.totalSupply()

console.log("Total Supply:", totalSupply.toString())


// Проверить ваш баланс

const accounts = await web3.eth.getAccounts()

const myBalance = await bookCoin.balanceOf(accounts[0])

console.log("My Balance:", web3.utils.fromWei(myBalance, 'ether'))


// Перевести токены (1 BOOK)

await bookCoin.transfer("0xReceiverAddress", web3.utils.toWei("1", "ether"))


11. Добавление токена в MetaMask

1. Откройте MetaMask

2. Нажмите "Import tokens"

3. Вставьте адрес контракта

4. Символ и decimals подтянутся автоматически

5. Нажмите "Add"


Теперь вы видите свои BOOK токены в кошельке!


Возможные ошибки и решения:

Ошибка: insufficient funds

· Решение: Получите больше test ETH из крана


Ошибка: gas required exceeds allowance

· Решение: Увеличьте значение gas в truffle-config.js


Ошибка: nonce too low

· Решение: Сбросьте nonce в настройках аккаунта MetaMask


Транзакция висит в pending

· Решение: Увеличьте gas price или отмените транзакцию


Проверка успешного деплоя

Контракт появился в блок-эксплорере

Баланс токенов отображается в MetaMask

Можно выполнять transfer транзакции

Комиссии списываются в test ETH


Поздравляю! Вы успешно развернули свой ERC-20 токен в тестовой сети Ethereum. В следующем разделе мы верифицируем исходный код, чтобы любой мог проверить логику вашего контракта.

Криптовалюта с нуля: От идеи до запуска вашего блокчейн проекта. Часть 2

Подняться наверх