Opcode

創建操作碼:它到底做了什麼?

  • March 27, 2019

我正在查看文件,但無法真正理解 CREATE 操作碼的作用。我可以看出 CREATE 確實從記憶體塊創建了一個新的智能合約,將 gas 值傳遞給這個新合約,然後返回。但在返回之前,它是否執行了新契約?

這讓我很困惑,因為查看智能合約字節碼的反彙編程式碼,在 CREATE 之後,我看不到任何對 CALL 的呼叫,但我仍然看到對 RETURNDATASIZE 的呼叫,我想這只會在 CALL 之後發生。如果沒有 CALL,它從哪裡獲取返回的數據?

有什麼啟示嗎?

CREATE,在某種程度上,做了一個內置的 CALL。實際發生的是傳遞給的數據call不是合約字節碼,而是init字節碼。

當 CREATE 操作碼被執行時,EVM 在新合約的上下文中創建一個呼叫幀(例如 address(this) 是新合約的地址)。這會執行作為程式碼傳遞給 CREATE 的數據,在高級語言中,這基本上是建構子。在這些init東西的最後,它return是儲存在 state trie 中的合約的實際程式碼。

考慮它的最簡單方法,也相當準確,是 Solidity 編譯器獲取合約的所有執行程式碼,將其編譯為字節碼,並將其作為 return 語句添加到建構子的末尾。

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