Solidity

將 Solidity 編譯為與原始碼保持對應的程序集

  • September 24, 2021

我想編譯一個用 Solidity 編寫的合約(甚至只是與單個方法相關的部分)來研究它並了解我是否可以優化它。我已經設法將字節碼作為二進製或其程序集表示形式使用solc,但我更願意將原始原始碼保留在程序集中,如註釋、每行一行,類似於gcc -S.

此外,我無法理解編譯器在solc編譯過程中是否使用 Yul 語言作為 Solidity 和程序集之間的中間表示,如果是,我該如何查看這種表示?

可能,您將獲得的最接近的是使用--asm來自 solc 的輸出。

使用 solc 0.8,您可以獲得中間的 Yul 表示--ir

命令

solc -o build --asm --ir MetaCoin.sol

應該在 build 目錄中生成 MetaCoin.evm 和 MetaCoin.yul 文件。

如果您想手動優化solc --asm輸出,您可以使用我的 EVM 彙編器:) https://github.com/RafaelSalguero/evm-assembler

它與solc --asm輸出兼容

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