美文网首页区块链 | Distributed Ledger TechnologyHyperledger
通过小游戏学习Ethereum DApps编程(3)

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

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

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

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

    for

    ETH网络中,对于区块链的写入操作,是需要用户支付Gas的,所以我们很多时候选用 memory 而不是 storage。
    memory用于临时存储,类似于RAM。

    这样定义多个 memory。

      uint[] memory evens = new uint[](5);
    
    

    for 语句和其他语言里面的语句很类似。

    function getEvens() pure external returns(uint[]) {
      uint[] memory evens = new uint[](5);
    
      // Keep track of the index in the new array:
      uint counter = 0;
    
      // Iterate 1 through 10 with a for loop:
    
      for (uint i = 1; i <= 10; i++) {
        // If `i` is even...
    
        if (i % 2 == 0) {
          // Add it to our array
          evens[counter] = i;
          // Increment counter to the next empty index in `evens`:
          counter++;
    
        }
      }
    
      return evens;
    
    可以得到:  [2, 4, 6, 8, 10]
    

    payable,ether

    还记得我们学习过的函数可视范围词么?

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

    还有对于函数的操作范围的限定词:

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

    还有可以自定义的限定词:

    用语 用法
    modifier modifier onlyOwner() { require(msg.sender == owner); _; } 自定义限制函数

    payable 是solidity语言里面的另外一个非常有用的限定词。
    ether 是solidity语言里面的以太币单位。

    我们来看一下这个函数:

      function buySomething() external payable {
        // Check to make sure 0.001 ether was sent to the function call:
      
        require(msg.value == 0.001 ether);
      
        // If so, some logic to transfer the digital item to the caller of the function:
        transferThing(msg.sender);
      }
    
    msg.value :用户支付的以太币
    如果这个函数没有payable而用户支付的以太币不会被接受
    

    Withdraws

    假设你编写了一个小游戏,有很多玩家可以在游戏里面购买装备。你的这个小游戏赚钱了。
    等积累到了一定程度,你是不是想把钱取出来呢?

    你可以这样编写一个函数:

    contract GetPaid is Ownable {
      function withdraw() external onlyOwner {
        owner.transfer(this.balance);
      }
    }
    
    

    假设,Ownable 和 onlyOwner 是通过modifier实现了的函数。
    this.balance 是指这个Dapp的以太币

    transfer 是转账函数。

    比如,如果我们的用户支付了多余的以太币,可以这样找零

    uint itemFee = 0.001 ether;
    msg.sender.transfer(msg.value - itemFee);
    

    我们甚至可以帮助用户之间交易装备:

    seller.transfer(msg.value)
    

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

    图片来源

    图片来自原作者官方网站

    相关链接

    HiBlock区块链技术布道 GitHub

    相关文章

      网友评论

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

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