Transactions

新的合約部署模式(0x60c06040)?

  • June 7, 2022

我一直在通過尋找交易數據欄位中的領先模式( 範例)來監控新合約的部署。0x60806040

但是,我注意到有一種不太常見的類似模式,即0x60c06040範例)。

我的問題:

  1. 這兩種模式有什麼區別?
  2. 是否有任何其他模式表明新的契約部署?

謝謝!

我一直在通過在交易的數據欄位(範例)中查找前導 0x60806040(截斷的 keccak 簽名)來監視新合約的部署。

這不是簽名,而是記憶體初始化字節碼:

這之後應該是 0x52 ( MSTORE ) 以在記憶體位置 0x40 處寫入 0x80,根據solidity記憶體佈局規範初始化空閒記憶體指針。

這兩種模式有什麼區別?

第一個將空閒記憶體指針初始化為其預設值 (0x80),而第二個將其初始化為 0xC0,因此預分配了 64 字節的記憶體 - 或兩個 32 字節的插槽。

這種分配模式是由於 Solidity 編譯器如何為不可變對象保留記憶體(每個 32 字節插槽)。這意味著要推送到堆棧的值會根據智能合約包含的不可變對象的數量而變化:如果沒有不可變對象,則為 0x80,一個不可變對象為 0xa0,兩個不可變對象為 0xc0,依此類推。

是否有任何其他模式表明新的契約部署?

這根本不是合約的部署事務模式。您正在尋找的模式是:

  • tx.to 為空(省略)
  • tx.data 不為空

這僅對部署智能合約的交易有效,不適用於部署其他智能合約的智能合約。

您可以通過查看 tx 收據或部署字節碼中的一些特殊CODECOPY操作碼模式來進一步完善它,正如我在此處解釋的那樣,但如果您只想記錄它們,則可能沒有必要。

我希望這能回答你的問題。

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