Solc

乙太坊的“空閒記憶體指針”是什麼時候改變的?(6060…-> 6080…)

  • December 4, 2018

我一直在深入探勘乙太坊字節碼,具體目標是從原始碼進行合約驗證。

我注意到,在進行一些測試時,乙太坊合約的初始字節在 0.4.21 和 0.4.22 之間發生了變化。

通常,契約總是以:

6060604052

PUSH1 0x60 PUSH1 0x40 MSTORE

但從 0.4.22 開始,它們似乎開始於:

6080604052

PUSH1 0x80 PUSH1 0x40 MSTORE

此更改的意義是什麼,我在哪裡可以找到有關此更改的文件?

合約序言指令更改為在 0x60 處提供一個額外的插槽,該插槽應始終保持值 0該文件指出:

零槽用作動態記憶體數組的初始值,永遠不應寫入(空閒記憶體指針最初指向 0x80)。

僅供參考,我用JEB Decompiler檢查了幾份契約,似乎他們同意你的觀點:舊序言(0x60 字節)的契約被檢測為由 Solidity <= 0.4.21 生成,而新序言的契約被檢測為 >= 0.4 .22.

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