Wie sendet der Nachrichtenruf Gas?

contract Sample{

    event Data(uint test) ; 

    function test2() {
        Data(msg.gas) ;
    }
}


contract Sample2{
    function try(address addr){
       Sample(addr).test2() ;
       addr.call(bytes4(keccak256("test2()"))) ;
    }
}

Wie sendet der Methodenaufruf Gas? Wenn das gesamte verbleibende Gas zum Ziel gesendet wurde, wenn ich calloder einfach Sample(address).test2()?

Antworten (1)

Gas wird mit unterzeichneten Transaktionen gesendet. Es kommt zu einer Funktion, sagen wir Sample2(addressSample2).try().

Da Sie bei Ihrem keine Gasmenge angegeben haben call, wird alles restliche Gas an gesendet Sample(addressSample).test2(). Wenn es fertig ist, kehrt die Steuerung Sample2(addressSample2).try()zusammen mit nicht verbrauchtem/verbleibendem Gas zu zurück. Es bleibt kein Gas drin Sample(addressSample).

Da Sample2(addressSample2).try()auch fertig ist, kehrt das restliche Gas zum Absender zurück. In beiden Verträgen verbleibt kein überschüssiges Gas, was auch gut so ist, weil sie derzeit ihr eigenes Gas nicht bezahlen können.

Sample(address).test2()gibt ein Ereignis mit dem verbleibenden Gas in diesem Moment aus , aber die Verarbeitung wird wie oben beschrieben fortgesetzt. Es wird also etwas zusätzliches Gas verbrannt, bevor die Transaktion abgeschlossen ist.

Falls es nicht klar ist, es gibt OPCODES auf Assembly-Ebene, die noch ausgeführt werden müssen, bevor alles wie oben zusammengefasst wird. Es reicht wahrscheinlich aus zu wissen, dass noch der Haushalt erledigt werden muss, weil die Veranstaltung (technisch) noch nicht beendet ist. Wenn Sie so geneigt sind, können Sie die OPCODES in Remix überspringen, um zu studieren, was es gegen Ende tut.

Ich hoffe es hilft.