专栏名称: 零识区块链
区块链创业公司首发阵地 投资机构必读公众号
目录
相关文章推荐
请辩  ·  如果你不会投资,你就这样做 ·  17 小时前  
白话区块链  ·  战略ETH储备:以太坊的新叙事之战 ·  18 小时前  
请辩  ·  我如何消除内耗? ·  昨天  
51好读  ›  专栏  ›  零识区块链

以太坊上的秘密

零识区块链  · 公众号  · 区块链  · 2018-05-31 19:07

正文

请到「今天看啥」查看全文


(或者你可以看完,说不定有纠错的机会


本文举了一个基于游戏里智能合约的例子

所以主要场景也是围绕此讨论


Step1:直接进入正文

(意不意外惊不惊喜)



许多合约,比如游戏合约,通常需要保密一些数值。比如,存储玩家的下一步行动或等着被猜的数字。虽然用户或合约都不能直接读取私有变量,但这仍难以保证一定能够保密。在Solidity语言中,使用private似乎是存储秘密值的一个非常简单的方法。然而,这并不会限制任何人读取合约的状态。 这是因为合约交易中存储的数据具有可读性。


我们以多人奇-偶游戏合约为例,该合约基于被猜的数字来选出获胜者。每个玩家选择一个数字,如果所选数字之和为偶数,那么第一个玩家获胜,若为奇数,则第二个玩家获胜。


// WARNING: This is a sample contract to demonstrate the functionality. Don't use it in your project.
pragma solidity ^0.4.21;

contract OddEven {
   struct Player { 
     address addr; 
     uint number;
   }
   
   Player[2] private players;
   uint8 count = 0; 

   function play(uint number) payable public {
        require(msg.value == 1 ether);
        players[count] = Player(msg.sender, number);
        count++;
        if (count == 2) selectWinner();
   }
   
   function selectWinner() private {
        uint n = players[0].number + players[1].number;
        players[n%2].addr.transfer(address(this).balance);






请到「今天看啥」查看全文