KryptoCamp 程式碼資源 === [Toc] 猜數字發獎勵 --- [教學影片](https://youtu.be/SlImy5RzrV8?si=rHkItLRck52WeUwx) ```程式類型 // 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 { } } ```