Wie kann man sehen, dass eine konstante Methode eine Ausnahme ausgelöst hat?

Betrachten Sie diesen Vertrag

pragma solidity ^0.4.11;

contract GoodAndBad {

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

}

Woher weiß ich, dass der Aufruf der Methode exec() mit web3.js oder geth JSON RPC erfolgreich war und ich eine Zahl erhalten habe?

Wenn dies nicht möglich ist, was ist die beste Vorgehensweise für die oben genannten Methoden?

Beachten Sie, dass Clients bei einer konstanten Funktion wahrscheinlich versuchen werden, sie lokal auszuführen, anstatt eine Transaktion auszugeben. Sie haben keine Möglichkeit, Informationen zu Funktionsaufrufen zu sammeln, die lokal auf dem Client ausgeführt werden.

Antworten (1)

Sie sollten verwenden event, um das Ergebnis wie folgt zu bestätigen:

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;
    }

}

und stellen Sie dann den Vertrag bereit, legen Sie einen Beobachter fest und rufen Sie die execMethode auf.