Compiler

Solidity 編譯器和 EVM 的關係

  • October 19, 2020

當我在 0.6.6 中編譯以下程式碼時,它不會編譯(需要公共),但在 0.7.3 中它會編譯。

如果我在 0.6.6 中使以下程式碼可編譯(添加公共),我可以在 Rinkeby 上成功部署。如果我在 0.7.3 中編譯以下程式碼,我可以在 Rinkeby 上成功部署。這表明 Rinkeby EVM 沒有變化,只是編譯器版本強製字節碼排列的方式發生了變化?

這是否意味著我可以在未來多年使用 0.6.6 編譯器標準並且我的程式碼不會中斷?無數的編譯器迭代對我來說是一種新的體驗,我正在努力解決它。

謝謝

contract A { constructor () payable {} }

你是對的。Solidity 版本更改經常

  • 語法更改(使語言更安全)
  • ABI 變更(參見乙太坊智能合約ABI v2

EVM 更改添加了新指令,例如 forrevert(string)catch然後這些被作為語言結構採用到 Solidity 中,但這些更改更為罕見。

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