美文网首页Hyperledger
通过小游戏学习Ethereum DApps编程(2)

通过小游戏学习Ethereum DApps编程(2)

作者: 假装在去天使之城的路上 | 来源:发表于2018-08-19 10:29 被阅读15次

    通过小游戏学习Ethereum DApps编程(2)

    完全没有基础知识的童鞋,请参照:通过小游戏学习Ethereum DApps编程(1)。

    这里我们继续总结一些关于solidity语言的知识点。

    modifier

    modifier 和 function有些相似。
    主要用于提前检查function的参数是否符合function的要求。

    这个就是经典检查调用智能合约的owner是否是此智能合约的开发者的modifier。
    出自:https://github.com/OpenZeppelin/openzeppelin-solidity
    OpenZeppelin is a library for writing secure Smart Contracts on Ethereum.

      /**
       * @dev Throws if called by any account other than the owner.
       */
      modifier onlyOwner() {
        require(msg.sender == owner);
        _;
      }
    

    在游戏里面,我们增加了对于级别的判断。

      modifier aboveLevel(uint _level, uint _zombieId) {
        require(zombies[_zombieId].level >= _level);
        _;
      }
    

    用法:添加在需要检查的function定义的末尾

    function changeName(uint _zombieId, string _newName) external aboveLevel(2, _zombieId) {
    }
    

    Gas

    在ETH网络上,用户在通过智能合约修改区块链上的数值的时候,需要支付Gas的。Gas可以通过以太币来兑换。
    简单的说,修改区块链的时候,不是免费的。不免费的理由可以参照网络。
    而只是查询区块链上的信息的时候,是免费。所以为了给你的用户节约费用,开发者可用通过设置函数为 view 和 pure 来实现。

    用语 用法
    view 函数只查询数据
    pure 函数内没有使用任何外部数据

    比如,用户可以查询自己拥有的东东的时候,可以这样写function。

      function getZombiesByOwner(address _owner) external view returns (uint[]) {
      }
    

    还记得 external 么?

    用语 可视范围
    private 仅限合约内使用
    internal +可被子合约使用
    public +可被外部合约使用
    external 仅限外部合约使用

    storage

    更新区块链是需要支付Gas的,尤其是 storage 的写入操作。
    开发者需要尽量避免 storage 的写入。其他语言,循环是效率低的,但在solidity里面,比起Gas的消耗,我们还是倾向于用循环。
    除非,让逻辑过于复杂化的处理,比如每次都需要在 memory 上重新建立序列。
    或者是每次都需要调用函数来得到特定值的时候。

    通过在变量定义的时候,加入 memory 可以在 memory 上新建一个仅仅存储在 memory 里面的变量

    function getArray() external pure returns(uint[]) {
      // Instantiate a new array in memory with a length of 3
    
      uint[] memory values = new uint[](3);
    
      // Add some values to it
      values.push(1);
      values.push(2);
      values.push(3);
    
      // Return the array
      return values;
    }
    

    pure : 函数内没有使用任何外部数据

    下周我们将继续总结学习到的内容。期待关注。

    图片来源

    图片来自原作者官方网站

    相关链接

    HiBlock区块链技术布道 GitHub

    相关文章

      网友评论

        本文标题:通过小游戏学习Ethereum DApps编程(2)

        本文链接:https://www.haomeiwen.com/subject/ihqciftx.html