Я знаю, что этот вопрос уже задавался много раз. Я прочитал множество ответов, но, похоже, у меня ничего не работает. Сначала я попытался проверить исходный код гораздо более крупного и сложного контракта, но это не сработало, поэтому я написал очень простой крошечный контракт в Solidity:
pragma solidity ^0.4.17;
contract SimpleTest
{
string public blablabla;
function SimpleTest() public
{
blablabla = "Hello world!";
}
}
Как видите, я не использую никаких аргументов конструктора, операторов импорта или библиотек. Я скомпилировал и развернул его с помощью Solidity 0.4.17 изнутри Parity. Оптимизация была включена. Я не использовал ни одну из ночных сборок.
Транзакция создания контракта:
https://etherscan.io/tx/0x2d8615c8bfc548a210781443c872737d890f6c4a5aa373c3d6d20bbaac941b8d
Рассматриваемый договор:
https://etherscan.io/address/0x5a8b57a6cf17a196e000eca4481257d5d3025636
Ссылка на страницу проверки:
https://etherscan.io/verifyContract?a=0x5a8b57a6cf17a196e000eca4481257d5d3025636
Сообщение об ошибке, которое я получаю от etherscan.io:
Извини! Байт-код скомпилированного контракта для «SimpleTest» НЕ соответствует коду создания контракта для [0x5a8b57a6cf17a196e000eca4481257d5d3025636].
Найдено название(я) контракта: 'SimpleTest'
На данный момент невозможно проверить контракт.
Я немного проанализировал байт-коды и обнаружил, что:
Входные данные транзакции создания контракта в точности совпадают с байт-кодом, который я получил от Parity.
Байт-код, который производит верификатор etherscan.io, похож на байт-код от Parity, а значит, и на входные данные транзакции создания контракта.
Байт-код на странице контракта на etherscan.io намного короче других байт-кодов.
Все байт-коды содержат 2 большие строки по 00 байт, кроме байт-кода на странице контракта etherscan.io, он содержит только 1 большую строку по 00 байт.
Я действительно понятия не имею, что здесь происходит. Кто-нибудь может помочь?
Я смог проверить свой контракт с включенной оптимизацией при компиляции из ремикса:
https://ethereum.github.io/browser-solidity/
По какой-то причине он выдает отличный от Parity байт-код, даже если вы выберете ту же версию компилятора и тот же параметр оптимизации.
Исмаэль
Дэвид Мондрус