4.3 [實作] 猜數字合約

更新 發佈閱讀 8 分鐘

大師手把手一步一步來

1. tutorialpoints

  • block.difficulty: 區塊難度
  • msg.value: 別人傳了多少以太幣進來
  • msg.sender: 誰在跟智能合約互動?

需求

  1. 老闆要辦猜數字遊戲
  2. ✅參與者: 500個客戶
  3. ✅數字區間: 1-200
  4. ✅獎金: 0.1ETH

功能

1. ✅猜數字功能

  • 有什麼結構?可以記錄, 哪個用戶猜了什麼數字?key 跟 value的關係 -> 問chatgpt: solidity有沒有key-value的資料結構
// 定義映射
mapping(uint => string) public keyValueMap;

2. ✅限定客戶才能猜數字

  • 問chatgpt: solidity如何拋出錯誤?
// require():用於檢查條件是否滿足,如果不滿足則拋出錯誤並中止交易
require(condition, "Error message");
  • 需要有客戶列表, 才能判斷猜題者是否為客戶。
  • 新增客戶列表-> mapping

3. ✅每人限猜一次

4. ✅(只能讓老闆) 設定答案的功能

  • 答案要介於1-200之間

5. ✅(只能讓老闆)發獎勵

  • 取得用戶猜什麼數字(需要一個資料型態記錄所有用戶猜的數字, 問chatGPT, solidity有沒有方法可以遍歷整個map? -> 沒有, 但可以維護陣列array, 用陣列去存這些對應關係, 也就是會員資料, 再把會員資料去map裡面核對)]
  • 白名單, 會員資料要匯入進來合約裡供查核
array
1.動態大小: 裡面不用放數字, 可以動態新增
2.必須透過push function,不斷新增array後面的值
3. .length可以查看他的長度
  • 取得正確答案
  • 比對用戶數字看答案(總共500個用戶, 連續循環500次比對數字) -> 迴圈
  • 比對正確就發錢(問chatGPT, 判斷式怎麼寫?If-else寫法, solidity怎麼接收跟轉移以太幣?transfer, 怎麼用solidity轉0.1ETH? 10^17wei)
  • 限定只有老闆可以發獎勵 -> 問chatGPT: 怎麼讓智能合約紀錄創建者地址?
  • 合約裡要有錢才能發-> 問chatGPT: 怎麼寫一個接收以太幣的function?
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

contract guessnumber {

uint256 number;

uint256 creator;

uint256 answer;

uint256 totalParticipants = 500;
uint256 maxNum = 200;
uint256 minNum = 1;

mapping(address => uint) public guessNumMap; mapping(uint => string) public keyValueMap;
mapping(address => bool) public isVip;
mapping(address => bool) public isGuess;

address[] vipList;

constructor(address[]memory whitelist) {
creator = msg.sedner; // 將當前的發送者(部署者)地址賦值給creator
for(uint256 i = 0; i < whitelist.length; i++){
address vip = whitelist [i];
vipList.push(vip);
isVip [vip]= true;
}
}

function guessNum(uint256 num) public {
require(isVip[msg.sender] == true, "not a vip.");
require(isGuess[msg.sender] == true, "already guess.");
require(num >= minNum && maxNum <= maxNum, "over range.");

guessNumMap[msg.sender] = num;
isGuess[msg.sender] = true;
}

function setAnswer(uint256 _answer) public {
require(msg.sender == creator, "not a creator.");
require(_answer >= minNum && maxNum <= maxNum, "over range.");
answer = _answer;
}

function sendReward() public {
require(msg.sender == creator, "not a creator.");
//1. 取得用戶猜什麼數字
for(uint256 i = 0; i < vipList.length; i++){
address user = vipList[i]; //mapping - key
uint256 guessNum_ = guessNumMap[user];
//2. 取得答案 -> 直接呼叫
//3. 比對用戶數字和答案
//4. 比中發錢

//判斷式
if(guessNum_ == answer){
payable(user).transfer(0.1ether);//0.1ETH
}

}
}

function deposit() external payble {
// 1 ether = 10^18 wei
}
}

區塊鏈的不可篡改與透明性


[Reference]

  1. 善用 ChatGPT 專案協作,快速入門智能合約開發,NFT 交易所區塊鏈工程師 Paul Wu 帶你上手 Solidity 自學教程, KryptoCamp 區塊鏈人才培育第一品牌, Nov 7, 2023


[Reference]

  1. Solidity練習 - 猜數字遊戲
  2. 善用 ChatGPT 專案協作,快速入門智能合約開發,NFT 交易所區塊鏈工程師 Paul Wu 帶你上手 Solidity 自學教程, KryptoCamp 區塊鏈人才培育第一品牌
  3. Solidity - 猜数字大小游戏, 登链社区 
  4. solidity简易版猜大小游戏, CSDN
  5. paulwu0903/GuessNumber.sol
  6. Day5- Guess Number Game, theoXX
留言
avatar-img
Follow the Rainmaker 🌧️
5會員
91內容數
尋大神腳印, 亦步亦趨。
2024/06/12
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
2024/06/12
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
2024/05/29
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
2024/05/29
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
2024/05/28
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
2024/05/28
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
看更多
你可能也想看
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
比特幣區塊鏈為了滿足各種不同的需求與技術,目前衍生出四種不同型態的地址形式,主要是針對安全性、靈活性與新版本兼容性的改革。
Thumbnail
比特幣區塊鏈為了滿足各種不同的需求與技術,目前衍生出四種不同型態的地址形式,主要是針對安全性、靈活性與新版本兼容性的改革。
Thumbnail
本文概述了加密貨幣和區塊鏈項目中常見的協議功能和技術元素,包括Distribution, Emission Schedule, Utility/Value Capture等。通過瞭解這些概念,投資者和開發者可以更好地理解市場和技術動態,作出更明智的決策。
Thumbnail
本文概述了加密貨幣和區塊鏈項目中常見的協議功能和技術元素,包括Distribution, Emission Schedule, Utility/Value Capture等。通過瞭解這些概念,投資者和開發者可以更好地理解市場和技術動態,作出更明智的決策。
Thumbnail
這篇文章提供了一些資源和平臺,可讓你系統性地學習加密貨幣的知識,並隨著經驗的累積深入瞭解更多進階主題。
Thumbnail
這篇文章提供了一些資源和平臺,可讓你系統性地學習加密貨幣的知識,並隨著經驗的累積深入瞭解更多進階主題。
Thumbnail
加密貨幣是基於區塊鏈技術的數字貨幣,文章介紹了加密貨幣的基本概念、特點、主要加密貨幣、優勢和挑戰、以及在實際應用中的情況。
Thumbnail
加密貨幣是基於區塊鏈技術的數字貨幣,文章介紹了加密貨幣的基本概念、特點、主要加密貨幣、優勢和挑戰、以及在實際應用中的情況。
Thumbnail
之前討論過基於Ordinals協議的BRC-20,意旨將比特幣最小單位的SATS聰(以中本聰Satoshis命名)進行編號排序,使得可以在比特鏈上發行同質化代幣FT。
Thumbnail
之前討論過基於Ordinals協議的BRC-20,意旨將比特幣最小單位的SATS聰(以中本聰Satoshis命名)進行編號排序,使得可以在比特鏈上發行同質化代幣FT。
Thumbnail
利用區塊鏈技術新認證方式(數位資料)Non–Fungible Token/縮寫NFT,因其獨一無二的價值,因而受到等同藝術品般瘋搶的NFT,也在時尚圈形成一股趨勢。
Thumbnail
利用區塊鏈技術新認證方式(數位資料)Non–Fungible Token/縮寫NFT,因其獨一無二的價值,因而受到等同藝術品般瘋搶的NFT,也在時尚圈形成一股趨勢。
Thumbnail
今天談到的 DAO、Web3、DID、加密貨幣錢包⋯⋯都根源於區塊鏈技術。
Thumbnail
今天談到的 DAO、Web3、DID、加密貨幣錢包⋯⋯都根源於區塊鏈技術。
Thumbnail
在Web3相關技術──比特幣、NFT、以太坊等區塊鏈技術及相關生態系發展下,能源領域的應用與其對能源系統減碳及永續發展的影響,也發揮不少實際的運用案例。
Thumbnail
在Web3相關技術──比特幣、NFT、以太坊等區塊鏈技術及相關生態系發展下,能源領域的應用與其對能源系統減碳及永續發展的影響,也發揮不少實際的運用案例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News