正文
(或者你可以看完,说不定有纠错的机会
)
本文举了一个基于游戏里智能合约的例子
所以主要场景也是围绕此讨论
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);