Solidity

Remix - 合約創建初始化返回長度超過 24576 字節的數據。部署可能會失敗)。可以做什麼?

  • June 12, 2020

在 Remix 中部署我的合約時出現以下錯誤:

合約創建初始化返回長度超過 24576 字節的數據。部署可能會失敗。更多資訊:eip-170

合約分為2份合約。A 有 250 行,B(B 是 A)有 500 行。我還創建了一個庫並將我的一些函式導出到這個庫。我目前正在上傳到 Javascript VM 環境。值得注意的是,當我使編譯選項卡上的啟用優化複選框有效時,它仍然不起作用。我有一些問題:

  1. 如何檢查 Remix 中的數據大小?我收到一個超過 24kb 的錯誤,我該如何檢查它到底是多少?

2)這是什麼原因造成的?這與程式碼的長度或執行的氣體量有關嗎?如果是氣體,當我在混音中的“執行”選項卡中的氣體限制中添加更多氣體時,它仍然給我同樣的錯誤。

3)有什麼常用的方法來減少數據的大小,以便我可以實際部署它?

謝謝

您報告的程式碼大小問題僅僅意味著您的程式碼在一個太大的低級程序中編譯。裡面的字節太多了。

與gas或out of gas無關:只是它比允許的要大。

通常這種問題出現在非常長的列表和/或存在非常大的靜態常量(數組、表格等)的情況下。在這種情況下,您應該有一些單獨的 sw 單元(正如您顯然已經做過的那樣)並減少所需的儲存量。

但它可能是與 remix IDE 相關的問題。在繼續之前,請保存文件,清除瀏覽器記憶體並重新啟動瀏覽器。(順便說一句,Chrome 與 Remix 的關係似乎比其他瀏覽器更好……)

另一方面,如果您正在逐步開發程式碼,添加新功能並在繼續之前對其進行測試,只需嘗試後退一步,刪除最後添加的功能,並確保錯誤不再彈出。之後,盡可能簡化。

如果在刪除最後一個添加時錯誤沒有停止彈出,則整體設計可能很差並且本質上太消耗記憶體。

請參閱如何估算我的合約程式碼大小?現在部署也太大了

需要強調的是,將合約拆分為多個合約/庫會減少字節碼大小,當且僅當它們可以單獨部署並且您確實單獨部署它們時。否則生成的字節碼會更大!

還要檢查您的公共變數:可能其中一些可能會變成“私有”。在這種情況下,編譯器不會為它們創建吸氣劑(為了清楚起見,這種干預的最終結果取決於許多其他事情……無論如何嘗試一下)。

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