¿Cómo ver que un método constante arrojó una excepción?

Considere este contrato

pragma solidity ^0.4.11;

contract GoodAndBad {

  function exec(uint flag) public constant returns (uint) {
    assert(flag == 1);
    return 0;
  }

}

¿Cómo sé que el método de llamada exec() usando web3.js o geth JSON RPC fue exitoso y recibí un número?

Si no es posible, ¿cuál es la mejor práctica para los métodos como el anterior?

Tenga en cuenta que con una función constante, es probable que los clientes intenten ejecutarla localmente en lugar de emitir una transacción. No hay forma de recopilar información sobre las llamadas a funciones que se ejecutan localmente en el cliente.

Respuestas (1)

Debe usar eventpara confirmar el resultado, de la siguiente manera:

pragma solidity ^0.4.11;

contract GoodAndBad {

    uint result = 0;
    event onResult(bool flag,uint result);

    function exec(uint flag) public returns (uint) {
        if (flag != 1) {
            result = 0;
            onResult(false,result);
            return;
        }
        result = 1;
        onResult(true,result);
        return result;
    }

}

y luego implemente el contrato, establezca un observador y llame execal método.