在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; } }