Skip to content

Instantly share code, notes, and snippets.

@paulwu0903
Created November 4, 2023 01:52
Show Gist options
  • Save paulwu0903/2de8d3ab32088728b1ddf0680ce3af8e to your computer and use it in GitHub Desktop.
Save paulwu0903/2de8d3ab32088728b1ddf0680ce3af8e to your computer and use it in GitHub Desktop.
猜數字範例
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
/**
* @title Storage
* @dev Store & retrieve value in a variable
* @custom:dev-run-script ./scripts/deploy_with_ethers.ts
*/
contract GuessNumber {
uint256 totalParticipants = 500;
uint256 maxNum = 200;
uint256 minNum = 1;
uint256 number;
uint256 answer;
address owner;
mapping(address => uint) public guessNumberMap;
mapping(address => bool) public isVip;
mapping(address => bool) public isParticipate;
address[] vipList;
constructor(address[] memory whitelist ) {
owner = msg.sender;
for(uint256 i =0; i < whitelist.length; i++){
address user = whitelist[i];
vipList.push(whitelist[i]);
isVip[user] = true;
}
}
function guessNumber(uint256 _guessNum) public {
require(isVip[msg.sender] == true, "Not a VIP.");
require(isParticipate[msg.sender] ==false, "already answer.");
require(_guessNum <= maxNum && _guessNum >= minNum, "over range.");
guessNumberMap[msg.sender] = _guessNum;
isParticipate[msg.sender] = true;
}
function setAnswer(uint256 _answer) public {
require(owner == msg.sender, "not an owner!");
require(_answer <= maxNum && _answer >= minNum, "over range.");
answer = _answer;
}
function getRewards() public {
require(owner == msg.sender, "not an owner!");
//1. 取得答案 - answer
//2. 知道每個人選了什麼數字
for (uint i = 0; i < vipList.length; i++) {
address user = vipList[i];
uint256 num = guessNumberMap[user];
if (num == answer){ //3. 判斷誰對中了數字
//4. 發幣 - 0.1 ETH
payable(user).transfer(10**17);
}
}
}
function retrieve() public view returns (uint256){
return number;
}
function deposit() external payable {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment