DAPP哈希竞猜游戏这种游戏是建立在区块链上的,玩家可以通过支付一定的代币,竞猜由智能合约生成的随机哈希值的末尾几位数字。
scssCopy codepragma solidity ^0.8.0;
players.push(payable(msg.sender));
playerExists[msg.sender] = true;
totalBet += msg.value;
numberOfBets++;
}
function distributePrizes(uint256 seed) public onlyOwner {
bytes32 winner = keccak256(abi.encodePacked(blockhash(block.number-1), seed));
uint256 count = 0;
for (uint256 i = 0; i < players.length; i++) {
address payable player = players[i];
if (playerGuesses[player] == uint256(winner) % 100) {
count++;
}
}
if (count > 0) {
uint256 winnerEtherAmount = totalBet / count;
for (uint256 j = 0; j < players.length; j++) {
address payable player = players[j];
if (playerGuesses[player] == uint256(winner) % 100) {
player.transfer(winnerEtherAmount);
}
contract HashGuessGame {
address payable public owner;
uint256 public minBet;
uint256 public totalBet;
mapping(address => bool) public playerExists;
constructor() public {
owner = payable(msg.sender);
minBet = 10000000000000000; // 0.01 ether
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function kill() public onlyOwner {
selfdestruct(owner);
}
function guess(uint256 guessValue) public payable {
require(msg.value >= minBet);
require(numberOfBets < maxAmountOfBets);
require(playerExists[msg.sender] == false);
}
}
playerGuesses[msg.sender] = guessValue;
playerBets[msg.sender] = msg.value;
uint256 public numberOfBets;
uint256 public maxAmountOfBets = 3;
bytes32 public lastHash;
address payable[] public players;
mapping(address => uint256) public playerBets;
mapping(address => uint256) public playerGuesses;
delete playerBets[player];
delete playerGuesses[player];
delete playerExists[player];
}
players = new address payable[](0);
totalBet = 0;
numberOfBets = 0;
}
lastHash = winner;
}
}