Evm

從智能合約發送乙太坊的操作碼鍊是什麼?

  • June 1, 2018

簡單的問題,但我無法在任何地方找到答案。

我知道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()

因此,aCALL需要堆棧頂部的可用氣體,然後是目標地址、值、輸入記憶體偏移量等。

一個有效的指令鏈可能看起來像這樣:

PUSH32 <memoutsz>
PUSH32 <memoutstart>
PUSH32 <meminsz>
PUSH32 <meminstart>
PUSH32 <value>
PUSH20 <to>
PUSh32 <gas>
CALL

編輯: meminstartmeminsz定義呼叫的輸入數據,通常是被呼叫合約的函式參數。meminstart是記憶體中的偏移量,meminsz是數據的大小。如果您只想將乙太幣發送到合約,您可以將它們都設置為 0。

memoutstartmemoutsz在記憶體中定義一個儲存呼叫返回數據的區域(如果有的話)。

引用自:https://ethereum.stackexchange.com/questions/50198