¿Cómo podría verificar el valor y el gas en Geth?

Mi fuente a continuación

pragma solidity ^0.4.17;

contract EtherBox {
    uint balance;

    constructor () public payable  {}

    function SetBalance() public payable {
        balance = balance + 10;
    }

    function GetBalance() public payable returns(uint) {
       return balance;
    }
}

contract UsingCall {
    constructor () public payable  {}

    function SimpleCall(address addr) public payable returns (uint) {
        bool status = true;
        //EtherBox eb = new EtherBox();
        EtherBox eb = EtherBox(addr);
        address myaddr = address(eb);
        status = myaddr.call(bytes4(keccak256("SetBalance()")));
        return eb.GetBalance();
    }

    function SimpleCallwithGas() public returns (bool) {
        bool status = true;
        EtherBox eb = new EtherBox();
        address myaddr = address(eb);
        status = myaddr.call.gas(200000)(bytes4(keccak256("GetBalance()")));
        return status;
    }

    function SimpleCallwithGasAndValue() public returns (bool) {
        bool status = true;
        EtherBox eb = new EtherBox();
        address myaddr = address(eb);
        status = myaddr.call.gas(200000).value(1)(bytes4(keccak256("GetBalance()")));
        return status;
    }

}

Estaba bien y todavía funcionaba muy bien. Pero tengo una pregunta. Cuando ejecuto SimpleCallwithGasAndValue()el método, quiero ver cambios de valor y gas en mi programa Geth. ¿Cómo podría hacer eso? ayúdenme chicos geniales!!

Respuestas (1)

Si tiene la interfaz del contrato que desea llamar, es mucho más fácil llamarlo directamente.

function SimpleCallwithGasAndValue() public returns (bool) {
    bool status = true;
    EtherBox eb = new EtherBox();
    uint balance = eb.GetBalance.gas(200000).value(1)();
    return status;
}

La solidez permite pasar un explícito .value()e .gas()indicar gas y éter pasados ​​al contrato llamado, y tiene acceso al valor devuelto. Una limitación es que un error en el contrato llamado hará que se revierta toda la transacción.

Si desea acceder al valor devuelto y poder detectar un error en el contrato llamado, la única solución es utilizar una llamada de bajo nivel desde el ensamblado.

Ah, claro. Probaré el lado de la orden.