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

Часть 2: Техническая реализация (Практическое руководство)
Глава 5: Создание токена на Ethereum (стандарт ERC-20)
5.5 Верификация контракта на Etherscan.

Оглавление

Верификация контракта – это процесс публикации исходного кода вашего смарт-контракта в блок-эксплорере (Etherscan). Это критически важный шаг для построения доверия к вашему проекту.


Зачем верифицировать контракт?

1. Прозрачность: Пользователи могут убедиться, что код соответствует заявленной функциональности

2. Доверие: Верифицированные контракты вызывают больше доверия у инвесторов

3. Взаимодействие: Позволяет напрямую вызывать функции контракта через Etherscan

4. Отслеживание: Пользователи могут отслеживать транзакции и балансы


Без верификации:

Contract Source Code Not Verified

Click to Verify and Publish


После верификации:

Contract Source Code Verified

Read Contract | Write Contract


Способ 1: Автоматическая верификация с помощью Truffle Plugin

Шаг 1: Установка плагина

bash

npm install -D truffle-plugin-verify


Шаг 2: Настройка truffle-config.js

Добавьте в truffle-config.js:

javascript

module.exports = {

// … остальная конфигурация

plugins: ['truffle-plugin-verify'],

api_keys: {

etherscan: process.env.ETHERSCAN_API_KEY

}

};


Шаг 3: Получение API-ключа Etherscan

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

2. Перейдите в API Keys

3. Создайте новый API Key

4. Добавьте в .env файл:


env

ETHERSCAN_API_KEY=YourApiKeyToken


Шаг 4: Верификация контракта

bash

truffle run verify BookCoin –network sepolia


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

Verifying BookCoin

Pass – Verified: https://sepolia.etherscan.io/address/0x1234…5678#code

Successfully verified 1 contract(s).


Способ 2: Ручная верификация через веб-интерфейс

Шаг 1: Найдите ваш контракт в Etherscan

Перейдите по адресу:

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


Нажмите "Verify and Publish"


Шаг 2: Заполните форму верификации

Contract Address: 0xYourContractAddress

Compiler Type: Solidity (Single file)

Compiler Version: v0.8.19+commit.7dd6d404

Open Source License Type: MIT License


Шаг 3: Вставьте код контракта

Скопируйте содержимое вашего BookCoin.sol:

solidity

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


import "@openzeppelin/contracts/token/ERC20/ERC20.sol";


contract BookCoin is ERC20 {

constructor(uint256 initialSupply) ERC20("BookCoin", "BOOK") {

_mint(msg.sender, initialSupply * 10 ** decimals());

}

}


Шаг 4: Настройка конструктора

В разделе "Constructor Arguments" введите ABI-encoded параметры:

00000000000000000000000000000000000000000000000000000000000f4240


Это hex-представление 1000000 (1 миллион токенов).


Способ 3: Верификация с помощью Hardhat

Если вы используете Hardhat вместо Truffle:

Установка плагина:

bash

npm install –save-dev @nomiclabs/hardhat-etherscan


Добавьте в hardhat.config.js:

javascript

require("@nomiclabs/hardhat-etherscan");


module.exports = {

etherscan: {

apiKey: process.env.ETHERSCAN_API_KEY

}

};


Верификация:

bash

npx hardhat verify –network sepolia DEPLOYED_CONTRACT_ADDRESS "1000000"


Решение распространенных проблем:

Проблема 1: "Already Verified"

Contract source code already verified

Решение: Контракт уже верифицирован – это успех!


Проблема 2: "Bytecode doesn't match"

Sorry! The compiled result does not match the deployed bytecode

Решение:

· Убедитесь, что версия компилятора совпадает

· Проверьте настройки оптимизатора

· Убедитесь, что вы верифицируете правильный контракт


Проблема 3: "Unable to detect constructor arguments"

Failed to detect constructor arguments

Решение: Вручную укажите ABI-encoded параметры конструктора


Как получить ABI-encoded параметры конструктора


Способ 1: Использование Truffle

javascript

// В консоли Truffle

const contract = await BookCoin.deployed();

const transaction = await web3.eth.getTransaction(contract.transactionHash);

console.log(transaction.input);


Способ 2: Онлайн-энкодер

Используйтеabi.hashex.org для кодирования параметров.


Способ 3: Использование ethers.js

javascript

const { ethers } = require("ethers");

const coder = new ethers.utils.AbiCoder();

const encoded = coder.encode(["uint256"], [1000000]);

console.log(encoded);


Что вы получите после верификации

Read Contract Tab – просмотр состояния контракта

· totalSupply()

· balanceOf()

· allowance()


Write Contract Tab – взаимодействие с контрактом

· transfer()

· approve()

· transferFrom()


Источник транзакций – отслеживание всех операций

Аналитика – графики и статистика

Комментарии – обратная связь от сообщества


Пример успешной верификации

После успешной верификации ваш контракт будет выглядеть так:

Contract Source Code Verified (Exact Match)


Contract Name: BookCoin

Compiler Version: v0.8.19+commit.7dd6d404

Optimization Enabled: Yes with 200 runs

Other Settings: default evmVersion, MIT license


Read Contract | Write Contract


+ [X] Contract created with 0x123… at block 4000001

+ [X] Verified 2 days ago

+ [X] 15 transactions


Дополнительные возможности


Верификация через flattening:


bash

npx truffle-flattener contracts/BookCoin.sol > flattened.sol


Затем загрузите flattened.sol в Etherscan.


Верификация прокси-контрактов:

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


Верификация библиотек:

Если ваш контракт использует внешние библиотеки, их нужно верифицировать отдельно.


Проверка результатов

1. Перейдите на страницу контракта в Etherscan

2. Убедитесь, что появились вкладки "Read Contract" и "Write Contract"

3. Проверьте, что код отображается корректно

4. Протестируйте функции через веб-интерфейс


javascript

// Пример чтения через Etherscan

totalSupply() → 1000000000000000000000000

balanceOf(0xYourAddress) → 1000000000000000000000000

name() → "BookCoin"

symbol() → "BOOK"

decimals() → 18


Поздравляю! Ваш контракт теперь полностью прозрачен и доступен для проверки всем желающим. Это важный шаг на пути к созданию доверия к вашему проекту в криптосообществе.


В следующем разделе мы создадим практическое упражнение по развертыванию и верификации вашего собственного токена.

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

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