Meta:停止使用預編譯合約擴展 EVM,應改用操作碼
身為 EVM 編譯器開發者,我呼籲未來 EVM 的擴展應使用操作碼而非預編譯合約,因為預編譯合約會導致更高的 Gas 成本與更大的字節碼,且操作碼在擴展時對現有合約的破壞性更小。
作為一名開發 EVM 編譯器(Huff 以及現在的新語言「Plank」)且偶爾會手寫 EVM 字節碼的人,我想發出請求:希望未來 EVM 的擴展應使用 操作碼 (Opcodes) 而非 預編譯合約 (Precompiles)。
我的理由如下:
- 預編譯合約作為一種接口,其成本比單純使用操作碼要高得多,且會導致字節碼體積更大。
預編譯合約的行為類似於「合約」,要求所有輸入必須先放入記憶體中,這需要多次 MSTORE,即使輸入的大小或數量是固定的也是如此。
-
調用預編譯合約需要一條
(STATIC)CALL指令,EVM 對此收取 100 gas。 -
輸出需要使用
MLOAD指令從記憶體中讀取,即使輸出的大小或數量是固定的。 -
EVM 指令表中還有大量未使用空間可用於定義新操作碼。
-
透過操作碼擴展 EVM 的破壞性可以說比預編譯合約更小:
要讓一個新操作碼對現有合約產生破壞性影響,需要合約中包含一個可達的未定義指令,而非明確的 INVALID 操作碼。
-
相比之下,預編譯合約會使一個新地址變成有效的調用目標,並可能帶來任意的行為或返回特性。
1 則貼文 - 1 位參與者 [閱讀完整主題](https://ethereum-magicians.org/t/meta-stop-extending-the-evm-with-precompiles-use-opcodes/27851)