Когда я развертываю контракт с Truffle, в котором есть import
оператор, и пытаюсь проверить его на etherscan , я понимаю, что мне нужно вставить содержимое импортированного файла.
Я получаю сообщение об ошибке на etherscan, что байт-коды объединенных и развернутых файлов не совпадают. Странно то, что если я разверну контракт (с импортом) на ремикс , то байт-код совпадает с конкатенированным исходным файлом.
Вот минимальный пример контрактов, демонстрирующих такое поведение.
Combined.sol
представляет собой объединенный файл и Outer.sol
содержит развернутый контракт.
Вот что я делаю, что получает ошибку:
Outer.sol
с трюфелемConcatenated.sol
исходный код и нажмите «Проверить» .Ошибка, байткоды не совпадают.
0.4.11
в ремиксах и трюфелях.В настоящее время etherscan не поддерживает проверку многофайловых контрактов. Но на Reddit etherscan есть обсуждение этой проблемы.
Объединение файлов в один работало некоторое время назад, но начиная с версии 0.4.7 Solidity включает хэш метаданных контракта в конце скомпилированного контракта . Поскольку эти метаданные содержат имена файлов и хэши, вы можете получить тот же байт-код после объединения и компиляции, но этот хэш будет другим.
Я думаю, что добавление хэша этих метаданных в развернутый контракт мотивировано тем, чтобы сделать проверку источника автоматической, поскольку каждый развернутый контракт содержит swarm-ссылку на исходники, версию компилятора и параметры компиляции.
Я создал интерфейс командной строки, который может вам помочь, под названием multisol . Вы можете установить его через Homebrew, если вы используете Mac, или загрузить один из исполняемых файлов, которые я предоставляю, если вы используете Windows или Linux:
$ brew tap paulrberg/multisol
$ brew install multisol
Затем вы можете использовать его следующим образом:
$ multisol path/to/YourContract.sol
Это создаст папку с именем «multisol-yourcontract», которую можно использовать для проверки исходного кода на Etherscan для развернутого экземпляра YourContract.sol
. Обратите внимание, что тип проверки — «Надежность (многочастные файлы)».
Я создал truffle-plugin-verify
для автоматизации проверки контрактов Truffle на Etherscan.
npm install truffle-plugin-verify
truffle.js
или truffle-config.js
файлmodule.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
После переноса вашего Outer
контракта в Kovan вы можете проверить его на Etherscan, запустив:
truffle run verify Outer --network kovan
Дополнительную информацию можно найти в репозитории или в моей статье Автоматическая проверка смарт-контрактов Truffle на Etherscan .
--debug
флагом? github.com/rkalis/truffle-plugin-verify/issues/new
Якуб Войцеховский
Трэвис Джейкобс
DeviateFish