竞猜活动区块链方案探索

竞猜活动区块链方案探索

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

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 条评论
登录 后参与评论

相关文章

来自专栏知晓程序

收好这份脱单攻略!想要在狗年摆脱「单身狗」名号,就靠它了

一年一度的新春佳节,总是伴随着七大姑八大姨个人问题的一声声殷切问候;在新春之前「截胡」的情人节,又总是伴随着现充们花样百出的屠狗大招。

13330
来自专栏区块链领域

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

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

45540
来自专栏Web 开发

你还在盲目的下电影吗?(30条实用信息教你读懂电影版本)

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://jessydior.blogbus.com/logs/52913989.htm...

61520
来自专栏一名叫大蕉的程序员

区块链?黑人问号?NO.1

# 区块链的大白话 我是小蕉。 从前的从前啊,有一个桃花屯,屯里住着一群跟小布小青这样的种田青年。屯里出现了这么一件事,每年的收成都是几千斤几千斤这样,每次出去...

215100
来自专栏jouypub

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

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

69030
来自专栏小狼的世界

妈呀,狼来了?

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

9020
来自专栏Netkiller

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

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

25640
来自专栏我是攻城师

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

30050
来自专栏杨建荣的学习笔记

最近在读的一些文章

我犯下的代价惨痛的错误使我改变了看问题的角度,从“我知道我是对的”变成了“我怎么知道我是对的”。这些错误让我养成了谦逊的习惯,我需要用谦逊平衡我的勇敢。—《原则...

11620
来自专栏java一日一条

程序员有哪些电脑技能让外行感到神奇?

大学的时候,系里的机子都是win 2k。晚上赶项目,我和一个哥们在楼下的平房里折腾数据,到了九点多,没什么进展,就出来看看,对面系楼一片漆黑,就一间屋亮着。

16230

扫码关注云+社区

领取腾讯云代金券