0.4 升到 0.5 是一個很大的版本耀進,多到 Breaking Changes 可以寫出一個滿滿一頁真是不簡單啊。在此僅列出幾個我覺得重要的,如果需要查文完整的變動資訊,可以從 Solidity v0.5.0 Breaking Changes 查詢。
Explicit data location for all variables of struct, array or mapping types is now mandatory. This is also applied to function parameters and return variables.
從
uint[] x = m_x
必須要變成
uint[] storage x = m_x
從
function f(uint[][] x)
必須要變成
function f(uint[][] memory x)
// 或
function f(uint[][] storage x)
建構子的使用方式在舊版時,若函式名稱跟合約名稱一致,就視為建構子的舊式寫法,已經完全不支援了。
pragma solidity ^0.4.18;
contract MyContract {
function MyContract() public {
}
}
v.0.5 之後,需要明確的使用 constructor
關鍵字。
pragma solidity >=0.4.22 <0.6.0;
contract MyContract {
constructor() public { owner = msg.sender; }
address payable owner;
}