Wie könnte ich Wert und Benzin in Geth überprüfen

Meine Quelle unten

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

}

Es war in Ordnung und funktionierte immer noch sehr gut. Aber ich habe eine Frage. Wenn ich die Methode ausführe SimpleCallwithGasAndValue(), möchte ich Änderungen von Wert und Gas in meinem Geth-Programm sehen. Wie könnte ich das tun? helft mir super jungs!!

Antworten (1)

Wenn Sie die Schnittstelle des Vertrags haben, den Sie aufrufen möchten, ist es viel einfacher, sie direkt aufzurufen.

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

Solidität ermöglicht die Weitergabe eines expliziten .value()und .gas()an den aufgerufenen Vertrag übergebenen Gases und Äthers, und Sie haben Zugriff auf den zurückgegebenen Wert. Eine Einschränkung besteht darin, dass ein Fehler im aufgerufenen Vertrag dazu führt, dass die gesamte Transaktion rückgängig gemacht wird.

Wenn Sie sowohl auf den zurückgegebenen Wert zugreifen als auch einen Fehler im aufgerufenen Vertrag erkennen möchten, besteht die einzige Lösung darin, einen Low-Level-Aufruf von Assembly zu verwenden.

Ach, ich verstehe. Ich werde es auf der Bestellseite versuchen.