Evm
從智能合約發送乙太坊的操作碼鍊是什麼?
簡單的問題,但我無法在任何地方找到答案。
我知道
CALL
有時使用CALLER
,但我不知道如何msg.sender.call.value(100)
執行。
EVM 是一個堆棧機器,因此指令的參數在指令執行之前被放入堆棧。您可以在黃皮書或您最喜歡的 EVM 實現中找到每條指令採用的參數及其順序,例如這裡的
CALL
指令:gas, to, value, meminstart, meminsz, memoutstart, memoutsz = \ stk.pop(), stk.pop(), stk.pop(), stk.pop(), stk.pop(), stk.pop(), stk.pop()
因此,a
CALL
需要堆棧頂部的可用氣體,然後是目標地址、值、輸入記憶體偏移量等。一個有效的指令鏈可能看起來像這樣:
PUSH32 <memoutsz> PUSH32 <memoutstart> PUSH32 <meminsz> PUSH32 <meminstart> PUSH32 <value> PUSH20 <to> PUSh32 <gas> CALL
編輯:
meminstart
並meminsz
定義呼叫的輸入數據,通常是被呼叫合約的函式參數。meminstart
是記憶體中的偏移量,meminsz
是數據的大小。如果您只想將乙太幣發送到合約,您可以將它們都設置為 0。
memoutstart
並memoutsz
在記憶體中定義一個儲存呼叫返回數據的區域(如果有的話)。