Ich versuche, die folgende von hier generierte EVM-Aufrufanweisung zu verstehen: https://ethervm.io/decompile
memory[temp3:temp3 + 0x00] = address(msg.sender).call.gas(0x00).value(var1)(memory[temp3:temp3 + memory[0x40:0x60] - temp3]);
Also im Grunde gas
wird angegeben, wie viel Benzin der Absender zu zahlen bereit ist, um das Geld an den "msg.sender" zu senden, richtig? Aber ich bin ziemlich verwirrt über die gas(0x00)
. Würde der Vertrag nichts senden können, oder?
Das Gas wird also im Grunde als angegeben, wie viel Gas der Absender bereit ist zu zahlen, um das Geld an den "msg.sender" zu senden.
Diese Behauptung ist nicht richtig.
Um zu verstehen, was vor sich geht, müssen Sie ein grundlegendes Verständnis dafür haben, wie ein Anruf auf niedriger Ebene ausgeführt wird (das gelbe Papier oder dieses Papier ) sind gute Ausgangspunkte.
Wenn ein Aufruf ausgeführt wird (implizit, aber es gibt Ausnahmen wie einen Delegiertenaufruf), ist der Absender im Wesentlichen der Smart Contract, der ausgeführt wird. Es gibt als Eingabe eine Kopie eines Teils seines Gedächtnisses und zusammen mit der Nachricht sendet es einen Geldbetrag. Außerdem hat der Absender die Möglichkeit, die Gasmenge anzugeben, die der Angerufene für eine mögliche Hinrichtung zur Verfügung hat.
Schließlich wird nach dem Aufruf, abhängig vom Exit-Status, ein Flag oben auf den Stack gesetzt.
In Ihrem Fall sendet der ausführende Vertrag einfach var1
Wei an die msg.sender
. Der msg.sender
verfügt über 0 Gaseinheiten und ist daher an der Durchführung von Operationen gehindert. Das bedeutet, dass selbst wenn der Empfänger eine Fallback-Funktion enthält, keine Ausführungen erlaubt sind.
Ein einfaches Beispiel, das die (nicht empfohlene Low-Level-) Aufrufanweisung verwendet:
int var1 = 12;
msg.sender.call.gas(0).value(var1)();
Weitere Einzelheiten zur Sende- und Übertragungsfunktion (die eine begrenzte Anzahl von Gasen liefern, die gegen Wiedereintritt sicher sind, aber dennoch die Codeausführung zulassen) finden Sie in der Antwort auf diese Frage .
llllllllllll
llllllllllll
Briomkez
llllllllllll