竞猜活动区块链方案探索
时间:2022-05-06
本文章向大家介绍竞猜活动区块链方案探索,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
竞猜活动区块链方案探索
合约实现了报名,退出,参加人数控制,竞猜次数控制,公布答案,获奖名单等等功能
pragma solidity ^0.4.20;// Author netkiller<netkiller@msn.com>// Home http://www.netkiller.cncontract Guess {
address public owner;
string name; //活动名称
bool start = false; //合约锁
uint number; //参赛人数统计
uint public quota; //名额限定
mapping (address => string) public registrantsPaid; //参加活动
uint maxCounter = 3; //最大竞猜次数
mapping (address => uint) counter; //竞猜次数统计
string public question; //竞猜问题
mapping (uint => string) public options; //选项
// 答案结构
struct Answer {
address player;
uint answer;
}
mapping (uint => Answer) public answer; //答案
uint answerIndex = 0;
//公布最终答案
uint public expose;
//获奖名单
mapping (address => uint) winner;
function Guess(string _name, uint _quota) public {
name = _name;
quota = _quota;
number = 0;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
// 获取活动名称
function getName() public view returns(string){
return name;
}
function setStatus(bool _start) onlyOwner public {
start = _start;
}
function setQuestion(string _question) public {
question = _question;
}
// 增加人物属性,例如肤色,眼睛,头发等等
function putOptions(uint _key, string _value) onlyOwner public{
if(start == false){
options[_key] = _value;
}
}
function join(string _password) onlyOwner public returns (bool success) {
require(start == ture);
if (number >= quota) { return false; }
registrantsPaid[msg.sender] = _password;
number++;
return true;
}
function changeQuota(uint _quota) onlyOwner public {
quota = _quota;
}
function quit() onlyOwner public {
require(start == false);
//require (registrantsPaid[msg.sender] == _password);
delete registrantsPaid[msg.sender];
number--;
}
function setGuess(uint _answer) public{
require(start == ture);
if(maxCounter > counter[msg.sender]){
counter[msg.sender]++;
answer[answerIndex] = Answer(msg.sender, _answer);
answerIndex++;
}
}
//揭秘答案
function setExpose(uint _expose) onlyOwner public {
require(start == ture);
expose = _expose;
for(uint i=0;i<answerIndex;i++)
{
Answer memory ans = answer[i];
if(ans.answer == expose){
winner[ans.player] = ans.answer;
}
}
}
// 数量
function getCount() public view returns(uint){
return number;
}}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP抽象类与接口的区别详解
- PDO::exec讲解
- 使用keras框架cnn+ctc_loss识别不定长字符图片操作
- PHP实现的策略模式示例
- 浅谈pytorch中torch.max和F.softmax函数的维度解释
- 用PHP的反射实现委托模式的讲解
- PHP时间函数使用详解
- python批量处理多DNS多域名的nslookup解析实现
- PHP单例模式数据库连接类与页面静态化实现方法
- pytorch 常用函数 max ,eq说明
- 解析python 中/ 和 % 和 //(地板除)
- python右对齐的实例方法
- PHP的PDO预处理语句与存储过程
- PHP工厂模式的日常使用
- 使用ucenter实现多站点同步登录的讲解