Oraclize + Testrpc + Trufa. Los resultados no se actualizan en el contrato

En mi contrato solo estoy haciendo una consulta básica a WolframAlpha

 function testOracle(){
       oraclize_query("WolframAlpha", "random number between 0 and 100");}

También tengo la función __callback:

 function __callback(bytes32 myid, uint256 result) {
    if (msg.sender != oraclize_cbAddress()) {throw;}
    randomNum = result;

También he ganado mi localhost OAR

 OAR = OraclizeAddrResolverI(.......);

Cuando lo hago:

 testrpc
 node bridge
 truffle migrate --reset

Obtengo los resultados de la consulta de Oracle en la consola del puente:

{"myid":"..................",
"result":"12","proof":null}

Pero cada vez que estoy en la consola de trufas y hago: (randomNum es público)

 var contract = contract.deployed()
 contract.randomNum.call()

Obtengo 0 como resultado aunque sé que el resultado es 12 en la consola del puente como lo he visto. ¿Cómo puedo recuperar los resultados del contrato usando trufa?

Respuestas (1)

Marco de Oracle aquí. Hay un error en la declaración de la función __callback. La forma correcta es la siguiente:

function __callback(bytes32 myid, string result) {
  if (msg.sender != oraclize_cbAddress()) {throw;}
    randomNum = parseInt(result);

También he incluido cómo puede analizar la cadena en int, que es una función que ya está incluida en oraclizeApi.sol.

Si quieres una explicación técnica más detallada puedes seguir leyendo :)

Cuando envía una transacción a un contrato con el objetivo de interactuar con una función, los argumentos de la función se codifican y se envían como datos en el campo de datos de la transacción. Pero antes de eso, debe especificar la función que va a usar, y eso se hace anteponiendo la firma de la función, también conocida como ID de método. La firma de la función está constituida por los primeros 4 bytes codificados en hexadecimal del hash Keccak-256 del nombre de la función y la lista de sus tipos de argumentos. Cambiar uno de los tipos de argumento da como resultado una firma de función diferente.

Puede leer más sobre esto aquí: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI