Estoy tratando de llamar a un método de contrato desde la interfaz web3 en node.js (a través de testrpc) que debería devolver un valor booleano.
contract_instance.my_method()
Esto genera un error:
/node_modules/web3/lib/web3/requestmanager.js:61
lanzar errores.Respuesta inválida(resultado);
Error: AssertionError: el campo debe tener una longitud de bytes de 20
yo también probé
contract_instance.my_method.call(function(error, result) {
console.log(result);
});
Eso genera el mismo error. Cada vez que comento el registro de resultados, el error desaparece. En los registros de testrpc se registra la llamada.
Tengo el problema.
En lugar de
var contract_instance = my_contract.at(["0xf6b0fc7bbb00fa5f47de4cd5d92157365276a0d3"]);
tuve que usar
var contract_instance = my_contract.at("0xf6b0fc7bbb00fa5f47de4cd5d92157365276a0d3");
su código no parece ser la fuente de su error, parece ser un problema de testrpc. Le aconsejo que abra un problema en su github .
He implementado un contrato simple en Ropsten testnet
pragma solidity ^0.4.2;
contract test{
bool private state;
function my_method() constant returns (bool) { return state; }
}
llamar a my_method usando Web3js (+ Metamask) funciona perfectamente:
contract.my_method(function(error, result){
if(!error)
console.log("result:"+result)
else
console.error("error:"+error);
});
la prueba de código completa está disponible aquí
Badr Bellaj
Elías
function my_method() constant returns (bool) { return state; }
que regresabool private state