前言
本文是随笔,记录了一次基于以太坊的抽奖服务的方案讨论。从常规的智能合约的实现方案,到最终改用不上链的实现,主要是分享一下思路,包含了一点不看也没事的技术细节,以及一点区块链相关的内容。
因为抽奖主题的区块链开发入门文章已经泛滥了,所以文章尽可能避免变成教程。
背景
之前一位做论坛的同学说他们那个论坛经常会做一些活动,抽奖什么的。如何让用户能感受到公平公正,让大家信任。之前一个的办法是在指定时间录视频,并且边上放个北京时间,表示这个是准时开奖没有作弊。这个和澳门最大线上赌场异曲同工,边上搞台电视放新闻的直播,令人信服。
但是总一直这样也不行,我们可是搞技术的,而且这种方式扩展性太弱。于是他们想做一个公正公开可信任,简单易用易理解的抽奖系统,选定的方案是区块链。我听了觉得很有意思,而且公正公开不可变,区块链太合适不过了,说就研究研究吧。不过为啥不找区块链团队帮忙,可以部门间合作合作。他说这个需求太简单了,就不麻烦其他部门的人了。
方案
虽然现在公链有很多了,而且性能一个比一个强,但是实际上有大量应用的目前也就两三个,我个人比较喜欢古典一些的ETH。
其实需求很简单,方案也预定了一下。基本的逻辑是,用指定eth地址将帖子id作为参数来执行合约函数,得到随机数结果。指定eth地址是用来做权限控制,私钥不公开,可以防止被无关人员开奖。因为合约是公开的,执行函数的时间也是公开的,执行结果也是公开的,所以开完奖之后,大家可以直接查询验证结果。
只要在活动开始时提前公布用来开奖的地址与开奖时间与帖子id,预定时间开奖之后,大家一查就有了,简直完美。 其实当时想了有一个缺点,就是得花钱,执行合约是要付费的,大概算了下按当前eth的价格开一次奖得花一块人民币,会不会太浪费,他说完全ojbk。