Я пытаюсь вызвать метод контракта из интерфейса 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 звонок зарегистрирован.
Получил проблему.
Вместо
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);
});
весь тест кода доступен здесь
Бадр Беллай
Элиас
function my_method() constant returns (bool) { return state; }
который возвращаетbool private state