Вызов метода контракта завершается ошибкой

Я пытаюсь вызвать метод контракта из интерфейса web3 в node.js (через testrpc), который должен возвращать логическое значение.

contract_instance.my_method()

Это выводит ошибку:

/node_modules/web3/lib/web3/requestmanager.js:61

выдавать ошибки.InvalidResponse(результат);

Ошибка: AssertionError: Поле должно иметь длину 20 байт.

я тоже пробовал

contract_instance.my_method.call(function(error, result) {  
  console.log(result);
});

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

каков код вашей функции?
function my_method() constant returns (bool) { return state; }который возвращаетbool private state

Ответы (2)

Получил проблему.

Вместо

var contract_instance = my_contract.at(["0xf6b0fc7bbb00fa5f47de4cd5d92157365276a0d3"]);

я должен был использовать

var contract_instance = my_contract.at("0xf6b0fc7bbb00fa5f47de4cd5d92157365276a0d3");

ваш код, похоже, не является источником вашей ошибки, похоже, это проблема testrpc, я советую вам открыть проблему на их github .

Я развернул простой контракт в тестовой сети Ropsten .

pragma solidity ^0.4.2;


        contract test{

            bool private state;
            function my_method() constant returns (bool) { return state; }

        }

вызов my_method с использованием Web3js (+ Metamask) работает отлично:

contract.my_method(function(error, result){
     if(!error)
         console.log("result:"+result)
     else
         console.error("error:"+error);
 });

весь тест кода доступен здесь