Evm

最大程式碼大小限制是否也適用於初始化程式碼?

  • July 6, 2022

已部署的字節碼(即合約創建返回的字節碼)應該最多0x6000= 24576 字節長。此限制是否適用於

  • 初始化程式碼作為使用者觸發的合約創建的輸入數據傳遞
  • 創建和創建2,

從某種意義上說,他們的第三個堆棧參數,size即從記憶體中讀取並作為初始化程式碼傳遞的字節數,最多也應該是0x6000?

是的。

通常,工廠合約包含要部署的程式碼。工廠的規模包括這一點。

希望能幫助到你。

似乎答案是否定的。這是有道理,因為這個程式碼大小限制旨在阻止的 DOS 攻擊是以非常低的成本從數據庫中載入大量字節碼給攻擊者。但是初始化程式碼不會出現這個問題(在交易的輸入數據中提供或從正在執行的智能合約的 RAM 中收集,在任何一種情況下都不會呼叫數據庫。)

我依靠 Geth 來證實這一點。Geth 定義MaxCodeSize = 24576並且這個數字在程式碼中被引用三次。對這個問題重要的唯一參考是core/vm/evm.go. 相關程式碼片段在第create455 行的方法中:

// Check whether the max code size has been exceeded, assign err if the case.
if err == nil && evm.chainRules.IsEIP158 && len(ret) > params.MaxCodeSize {
   err = ErrMaxCodeSizeExceeded
}

它比較返回到MaxCodeSize. 即它確保將部署在鏈上的字節碼最多包含 24576 個字節。

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