竞猜活动区块链方案探索

竞猜活动区块链方案探索

合约实现了报名,退出,参加人数控制,竞猜次数控制,公布答案,获奖名单等等功能

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;
	}}

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2018-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏星流全栈

Elixir, OTP, Ecto, 和 Phoenix 免费教程!

3036
来自专栏我是攻城师

如何使用Pig集成分词器来统计新闻词频?

2815
来自专栏区块链领域

EOS超级节点竞选的背后,普通投资者还需在意的风险意识

要说近日圈内最火热的话题,莫过于EOS(柚子)的21个超级节点之争,首先EOS确实是非常值得关注的,在去年早鸟“爱西欧”阶段,圈内不少知名大佬鼓吹力捧,比如李笑...

4284
来自专栏知晓程序

路边哪些野花「不能采」?这款小程序,帮你找回遗失的好奇心

在马路边、小花园里、大草原上,或者是别人的花盆/朋友圈里,看到好看又叫不出名字的花花草草,是不是有一种很想知道这是什么品种的冲动?

741
来自专栏小狼的世界

妈呀,狼来了?

听听这充满诱惑的广告语、感受这不断被煽动的情绪,您有何感想呢?目前我们确实已经有了facebook、kaixin001、校内这样的社交网络,我们也有了twitt...

802
来自专栏腾讯数据中心

凭栏听音,化险为夷——配电系统中的电磁隐患案例解析

1 凭栏听音,敏感于心 对于IDC运维人员来说,声音是日常巡检维护中不可忽视的信息源。以配电系统为例,变压器、低压配电柜、UPS运行都可能产生明显的噪音,通常认...

3397
来自专栏lonelydawn的前端猿区

Vuex从入门到精通(三)

开始 前言 这一节,我们将通过一个实战案例 : 动态展示从后台返回的新闻列表 允许用户根据来源, 和 内容&标题 中的关键字对新闻列表进行筛选 来加...

3849
来自专栏jouypub

UTC/GMT/CST几种常见的时间概述

 协调世界时,又称世界标准时间或世界协调时间,简称UTC,从英文“Coordinated Universal Time”/法文“Temps Universel ...

3973
来自专栏Netkiller

以太坊钱包 ERC20 Token 代币 Node 封装接口

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

2324
来自专栏PaddlePaddle

前沿|PaddlePaddle开源项目DeepNav“无人船”炼成记(二)

前言:本篇继续讲述DeepNav自动驾驶船项目,本次讲解无人船的设计思路和硬件搭建过程。文章素材来源于百度美国研究院王益老师的知乎专栏,欢迎小伙伴们持续关注。

1023

扫码关注云+社区