Как узнать версию компилятора Solidity, которую я использую?

В частности, при использовании Mist . Когда я создаю контракт через графический интерфейс Mist, я хочу иметь возможность проверить исходный код на Etherscan. Однако Etherscan требует, чтобы вы предоставили версию компилятора и были ли включены оптимизации.

  • Как я могу найти версию компилятора для версии Mist, которая у меня есть?

  • Оптимизация всегда включена или всегда отключена?

  • Есть ли разница между TEST-NET и основной сетью?

Примечание. Я ищу ответ на вопрос, как найти версию компилятора, а не текущую версию компилятора Mist (которая изменится, сделав ответ только временным).

Ответы (2)

Mist / Ethereum Wallet теперь имеет встроенный компилятор, который не очень хорошо документирован, кроме скриншотов в руководствах по созданию, компиляции и развертыванию контрактов. Однако версию компилятора Mist и оптимизирован ли он... трудно понять.

Однако это НЕ обязательно решит вашу проблему с проверкой на EtherScan. Я тоже не могу заставить код токена совпадать, что бы я ни пытался (а я пробовал много). Смотрите внизу этого комментария, если вы хотите погрузиться со мной.


Если для вас важна проверка на EtherScan , напишите свой код Solidity где угодно, но скомпилируйте его с помощью Browser Solidity здесь: http://chriseth.github.io/browser-solidity/

Затем используйте этот байт-код для развертывания. Я не тестировал его, но код, который он выдает для примера контракта с токеном, совпадает с тем, что выдает EtherScan. Я предполагаю, что EtherScan использует тот же браузерный компилятор для проверки контрактов.


Если вы используете Mix IDE / Solidity , вы можете просмотреть версию Solidity, выбрав (в Mix IDE) File/Mix/Help -> About.


Если вы используете solc / Solidity (интерфейс командной строки) , вы можете использовать команду web3.eth.compile, которая затем выдаст что-то вроде:

contract = eth.compile.solidity(source).test
{
  code: '605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056',
  info: {
    language: 'Solidity',
    languageVersion: '0',
    compilerVersion: '0.9.13',
    abiDefinition: [{
      constant: false,
      inputs: [{
        name: 'a',
        type: 'uint256'
      } ],
      name: 'multiply',
      outputs: [{
        name: 'd',
        type: 'uint256'
      } ],
      type: 'function'
    } ],
    userDoc: {
      methods: {
      }
    },
    developerDoc: {
      methods: {
      }
    },
    source: 'contract test { function multiply(uint a) returns(uint d) { return a * 7; } }'
  }
}

Это скомпилирует ваш код и предоставит вам такую ​​информацию, как версия компилятора и т. д.

Дополнительная информация


Оптимизация — это выбор, который вы можете сделать. Через solc вы используете --optimizeфлаг. Подробнее об этом волшебном свойстве оптимизации можно прочитать здесь: Как работает оптимизатор Solidity? . Я думаю, что Mist оптимизирует, основываясь на том факте, что у меня было сходство 73%, когда я выбрал «неоптимизированный» на EtherScan, и сходство 93%, когда я выбрал оптимизированный.


Тестирование контракта:

Я создал точный контракт https://www.ethereum.org/token#the-code без каких-либо изменений в коде, используя Mist v 0.5.2.

Код контракта, который Etherscan.io получил / отправил Mist, был:

0x6060604052361561008d5760e060020a600035046306fdde03811461009557806318160ddd146100f257806323b872dd146100fb578063313ce5671461012d57806354fd4d501461013957806370a082311461019357806395d89b41146101ab578063a9059cbb14610207578063cae9ca5114610236578063dc3080f214610398578063dd62ed3e146103bd575b6103e2610002565b6103e460008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104995780601f1061046e57610100808354040283529160200191610499565b61045260045481565b610452600435602435604435600160a060020a0383166000908152600560205260408120548290101561057057610002565b61046460035460ff1681565b6103e460028054602060018216156101000260001901909116829004601f810182900490910260809081016040526060828152929190828280156104995780601f1061046e57610100808354040283529160200191610499565b61045260043560056020526000908152604090205481565b6103e4600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104995780601f1061046e57610100808354040283529160200191610499565b6103e2600435602435600160a060020a033316600090815260056020526040902054819010156104a157610002565b60806020604435600481810135601f810184900490930284016040526060838152610452948235946024803595606494939101919081908382808284375094965050505050505060006000836006600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561036b5780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257506001979650505050505050565b6007602090815260043560009081526040808220909252602435815220546104529081565b6006602090815260043560009081526040808220909252602435815220546104529081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156104445780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b820191906000526020600020905b81548152906001019060200180831161047c57829003601f168201915b505050505081565b600160a060020a0382166000908152604090205480820110156104c357610002565b806005600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806005600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600160a060020a03831681526040812054808301101561058f57610002565b600160a060020a038085168083526006602090815260408085203394909416808652938252808520549285526007825280852093855292905290822054830111156105d957610002565b816005600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816005600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816007600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3506001939250505056

Вы можете увидеть это в EtherScan или получить в Ethereum Wallet, открыв консоль и запустив TokenContract.eth.getCode('YOUR_ADDRESS_HERE_NO_0x_AT_BEGINNING');Mist и EtherScan, выдав один и тот же код.

Я попытался проверить, может быть, 20 различных версий, с оптимизацией и без, используя Browser Solidity , и ни разу этот код не был таким коротким, или он был в Etherscan.io, и он не начинался с 0x.....

Вот пример того, что мне дают Browser Solidity и EtherScan при использовании 0.2.1-3ad5e821 с оптимизацией:

606060405260405161092b38038061092b83398101604052805160805160a05160c05160e05193949283019391929081019101600160a060020a03331660009081526005602090815260408220879055600487905581548651838052601f6002600019600185161561010002019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918901908390106100d457805160ff19168380011785555b506101049291505b8082111561015d57600081556001016100c0565b828001600101855582156100b8579182015b828111156100b85782518260005055916020019190600101906100e6565b50508160016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061016157805160ff19168380011785555b506101919291506100c0565b5090565b82800160010185558215610151579182015b82811115610151578251826000505591602001919060010190610173565b50506003805460ff19168417905560028054825160008390527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace602060018416156101000260001901909316849004601f90810184900482019386019083901061020e57805160ff19168380011785555b5061023e9291506100c0565b82800160010185558215610202579182015b82811115610202578251826000505591602001919060010190610220565b505050505050506106d8806102536000396000f36060604052361561008d5760e060020a600035046306fdde03811461009557806318160ddd146100f257806323b872dd146100fb578063313ce5671461012d57806354fd4d501461013957806370a082311461019357806395d89b41146101ab578063a9059cbb14610207578063cae9ca5114610236578063dc3080f214610398578063dd62ed3e146103bd575b6103e2610002565b6103e460008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104995780601f1061046e57610100808354040283529160200191610499565b61045260045481565b610452600435602435604435600160a060020a0383166000908152600560205260408120548290101561057057610002565b61046460035460ff1681565b6103e460028054602060018216156101000260001901909116829004601f810182900490910260809081016040526060828152929190828280156104995780601f1061046e57610100808354040283529160200191610499565b61045260043560056020526000908152604090205481565b6103e4600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104995780601f1061046e57610100808354040283529160200191610499565b6103e2600435602435600160a060020a033316600090815260056020526040902054819010156104a157610002565b60806020604435600481810135601f810184900490930284016040526060838152610452948235946024803595606494939101919081908382808284375094965050505050505060006000836006600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561036b5780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257506001979650505050505050565b6007602090815260043560009081526040808220909252602435815220546104529081565b6006602090815260043560009081526040808220909252602435815220546104529081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156104445780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b820191906000526020600020905b81548152906001019060200180831161047c57829003601f168201915b505050505081565b600160a060020a0382166000908152604090205480820110156104c357610002565b806005600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806005600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600160a060020a03831681526040812054808301101561058f57610002565b600160a060020a038085168083526006602090815260408085203394909416808652938252808520549285526007825280852093855292905290822054830111156105d957610002565b816005600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816005600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816007600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3506001939250505056

Итак... это все еще не соответствует тому, что предположительно отправил Mist и получил EtherScan.

Проводя исследование, я обнаружил, что EtherChain может быть лучше с проверкой. Я, однако, все еще не мог получить ничего выше ~ 93% сходства (используя 2.1.1, оптимизированный).

Надеюсь, это поможет кому-то.

Я просто использую Mist GUI> Контракты> Развернуть новый контракт> Развернуть
Кошелек Ethereum > О кошельке Ethereum (Windows) просто перечисляет версию Mist (в данном случае 0.6.2).
Я пробовал web3.eth.compile.solidityиз консоли разработчика, он просто возвращает JavaScriptфункцию.
web3.eth.getCompilers()возвращается [""]. Мне удалось развернуть контракт с Mist, что говорит о том, что где-то есть компилятор. Мой Mist поддерживается gethна данный момент и когда я использовал Mist для создания контракта.
@MicahZoltu ты написал этот контракт? Или вы просто где-то нашли байт-код? Можете ли вы добавить именно то, что вы вкладываете в Mist в своем вопросе. Спасибо.
Я скопировал исходный код контракта из онлайн-учебника о том, как создать новый токен. ethereum.org/токен#the-код
У меня сейчас такая же проблема. Я хочу проверить действующий контракт, но не могу найти версию своего компилятора и включена ли оптимизация. Команда geth.compile.solidity не найдена в папке кошелька Mist.
вы уверены, что geth.compile.solidity - это команда, которую вы хотели предложить? Я дважды проверил, и моя командная строка geth работает нормально, но этой команды, похоже, не существует.
@PhilipKirkbride извините, web3.eth.compileтеперь все.
Это ответ, который я получаю pastebin.com/rpxbkTjc без номера версии
Итак, я нашел web3.eth.getCompilersиспользование консоли в Mist, но не могу заставить ее что-либо вернуть. В других новостях, я только что создал токен. Стоять рядом с...
Привет, ребята --- обновил приведенный выше ответ, добавив больше информации. Мой вывод: проверка EtherScan не стоит этих %&@$. Доброй ночи. ;)
@Tayvano, спасибо! Этот ответ очень помог мне, я нашел то же самое, что и вы. Как только я последовал вашим инструкциям и переключился на etherchain, все заработало.
npm-shrinkwrap.json содержит заблокированную версию
If getting verified on EtherScan is important to you- именно поэтому я здесь...

Прямо сейчас нет действительно простого пути. Сам пытаюсь разобраться ;-)

Когда вы запускаете версию для разработчиков в электронном виде, вы всегда можете перейти в папку с кодом тумана и ввести:

node

который затем приведет вас к терминалу узла, где вы можете проверить свою версию Solidity:

var solc = require('solc')
solc.version()

> '0.2.1-91a6b35f/.-Emscripten/clang/int linked to libethereum-'

В идеале наша цель состоит в том, чтобы туман транслировал исходный код и версию компилятора в сеть, чтобы такие службы, как etherchain и etherscan, могли их проверить.

В прошлый раз, когда я пытался проверить контракт на банке подсказок Эфириума (которую я развернул сам), я смог получить только 97% сходства. У меня не было возможности проверить это, но я считаю, что разница заключается в параметрах, отправляемых в функцию-конструктор, поскольку изменения происходят только в конце файла.