舊版的規則
函式可以指定為 external、public、internal 或 private 四種可見度,在舊版的規則是如果沒有指定預設為 public。狀態變數不可指定為 external,預設是 internal。
新版的規則
Explicit function visibility is now mandatory. Add public to every function and constructor, and external to every fallback or interface function that does not specify its visibility already.
舊的規則在定義函式 (function) 時不指定範圍,就會預設 internal 的潛規則取消了,在新版函式需要要明確指定可見度 (Visibility)。
編譯錯誤
pragma solidity >=0.5.0 <0.7.0;
interface OldContract {
function someOldFunction(uint8 a);
function anotherOldFunction() returns (bool);
}
編譯正常
pragma solidity >=0.5.0 <0.7.0;
interface OldContract {
function someOldFunction(uint8 a) external;
function anotherOldFunction() external returns (bool);
}
新版一定要指定 mutability,以下面的範例,就是指定 memory
。
編譯錯誤
function f(uint x) public returns (bytes) {
編譯正常
function f(uint x) public returns (bytes memory) {