記錄智能合約solidity編譯的坑

在Linux環境下入門寫一段solidity編譯遇到error和warning,通過一番研究後才得其原因,下面以一段demo總結一下。ui

pragma solidity ^0.5.2;        // 指定所需的編譯器版本

contract clac{                 
        function multiply(uint a, uint b) returns (uint){
                return a + b;
        }
}

看似很正常的一段兩數相加代碼,惋惜編譯出錯:spa

出現了一段error和一段warningrest

$ solc --bin testContract.sol

testContract.sol:3:2: Error: No visibility specified. Did you intend to add "public"?
    function multiply(uint a, uint b) returns (uint)
 ^ (Relevant source part starts here and spans across multiple lines).

testContract.sol:5:9: Warning: Function state mutability can be restricted to pure
function multiply(uint a, uint b) public returns (uint) {
^ (Relevant source part starts here and spans across multiple lines).

緣由是public聲明和puer沒有處理好。code

 

public聲明

No visibility specified. Defaulting to 「public」。   -> 未指定可見性,採用默認public可見範圍。blog

  • public:智能合約外部和內部均可使用的方法;
  • internal:智能合約(包括派生合約)內部可用調用的方法;
  • external:可經過其餘合約和交易進行調用的方法;
  • private:只有在定義的合約中才能夠調用,即便派生的合約也沒法調用;

錯誤在於提醒開發者,你未指定當前function的可見範圍,合約會默認採用public,有必定的風險存在。特別針對一些不可對外公開訪問的智能合約,須要注意此提示。消除此警告的方法只需在方法中添加public聲明便可。修改以後的代碼以下:ip

pragma solidity ^0.5.2;        // 指定所需的編譯器版本

contract clac{                 
        function multiply(uint a, uint b) public returns (uint){
                return a + b;
        }
}

 

pure限制詞

Function state mutability can be restricted to pure。 -> 功能狀態可變性能夠限制爲pureci

在以前的版本中咱們常常使用constant來限制一個方法的制度性,當用constant修飾以後,此方法在被調用時不會進行存儲的變動,一樣不會產生交易和gas花費。而pure正是constant的替代品,逐漸的在替代constant的功能。
開發

修改後代碼以下:編譯器

pragma solidity ^0.5.2;        // 指定所需的編譯器版本

contract clac{                 
        function multiply(uint a, uint b) public pure returns (uint){
                return a + b;
        }
}
相關文章
相關標籤/搜索