在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
No visibility specified. Defaulting to 「public」。 -> 未指定可見性,採用默認public可見範圍。blog
錯誤在於提醒開發者,你未指定當前function的可見範圍,合約會默認採用public,有必定的風險存在。特別針對一些不可對外公開訪問的智能合約,須要注意此提示。消除此警告的方法只需在方法中添加public聲明便可。修改以後的代碼以下:ip
pragma solidity ^0.5.2; // 指定所需的編譯器版本 contract clac{ function multiply(uint a, uint b) public returns (uint){ return a + b; } }
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; } }