• 记录智能合约solidity编译的坑


    在Linux环境下入门写一段solidity编译遇到error和warning,经过一番研究后才得其缘由,下面以一段demo总结一下。

    pragma solidity ^0.5.2;        // 指定所需的编译器版本
    
    contract clac{                 
            function multiply(uint a, uint b) returns (uint){
                    return a + b;
            }
    }

    看似很正常的一段两数相加代码,可惜编译出错:

    出现了一段error和一段warning

    $ 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没有处理好。

    public声明

    No visibility specified. Defaulting to “public”。   -> 未指定可见性,采用默认public可见范围。

    • public:智能合约外部和内部都可使用的方法;
    • internal:智能合约(包括派生合约)内部可用调用的方法;
    • external:可通过其他合约和交易进行调用的方法;
    • private:只有在定义的合约中才可以调用,即使派生的合约也无法调用;

    错误在于提醒开发者,你未指定当前function的可见范围,合约会默认采用public,有一定的风险存在。特别针对一些不可对外公开访问的智能合约,需要注意此提示。消除此警告的方法只需在方法中添加public声明即可。修改之后的代码如下:

    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。 -> 功能状态可变性可以限制为pure

    在之前的版本中我们经常使用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;
            }
    }
  • 相关阅读:
    ruoyi管理系统建立子项目,卡住
    JSON
    各类求自然数幂和方法
    一个关于序列区间gcd的小trick
    【JZOJ6654】【2020.05.27省选模拟】数据结构
    【JZOJ6569】【GDOI2020模拟】夕张的改造 (kaisou)
    拉格朗日插值法
    【JZOJ1914】【2011集训队出题】最短路
    【JZOJ4817】【NOIP2016提高A组五校联考4】square
    【JZOJ4816】【NOIP2016提高A组五校联考4】label
  • 原文地址:https://www.cnblogs.com/kumata/p/10638619.html
Copyright © 2020-2023  润新知