Llamar a un método de contrato termina en error

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.

¿Cuál es el código de tu función?
function my_method() constant returns (bool) { return state; }que regresabool private state

Respuestas (2)

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í