Читать книгу Криптовалюта с нуля: От идеи до запуска вашего блокчейн проекта. Часть 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. В следующем разделе мы верифицируем исходный код, чтобы любой мог проверить логику вашего контракта.