Я пытаюсь скомпилировать и развернуть простой контракт:
var Web3 = require("web3");
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
var source = "" +
"contract test {\n" +
" function multiply(uint a) returns(uint d) {\n" +
" return a * 7;\n" +
" }\n" +
"}\n";
var compiled = web3.eth.compile.solidity(source);
console.log(compiled);
Основываясь на документации, я ожидал, что это так:
"test": {
"code": "0x605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056",
"info": {
"source": "contract test {\n\tfunction multiply(uint a) returns(uint d) {\n\t\treturn a * 7;\n\t}\n}\n",
"language": "Solidity",
"languageVersion": "0",
"compilerVersion": "0.8.2",
"abiDefinition": [
{ ...
но что я получаю:
0x606060405260308060106000396000f3606060405260e060020a6000350463c6888fa18114601c575b6002565b34600257600760043502606090815260200
Я не уверен, как создать новый контракт из этого, поскольку примеры, которые я нашел, говорят, что я должен делать что-то подобное
var greeterContract = web3.eth.contract(compiled.test.info.abiDefinition);
var greeter = greeterContract.new(_greeting,{from:web3.eth.accounts[0], data: compiled.test.code, gas: 1000000}, function(e, contract){
есть идеи, что я сделал не так?
PS Я использую Parity в качестве провайдера
Похоже, что Parity не соответствует eth_compileSolidity
спецификации.
Изменить: похоже, одна из причин, по которой они не возвращают полный результат, заключается в том, что они не могут (пока). По этой ссылке они не получают ABI от компиляции: https://github.com/ethcore/parity/issues/2276#issuecomment-249277973
Редактировать 2: Похоже, здесь есть разговор об этом: https://github.com/ethcore/parity/issues/2272
конфиденциальностьisahumanright.eth
geth
, доступно по адресу ethereum.stackexchange.com/questions/2751/… .