抛砖引玉:如何实现绝对公平的年会抽奖程序

2017-01-24 20:11:18 +08:00
 jybox

传统的抽奖系统都是运行在单机上,那么这台设备就可能被做过手脚,抽奖的结果也不能令所有人信服。如果能在每个人的设备上都运行一次抽奖的话,这样结果就可以令大家信服了 —— 但显然不能简单地这样做,因为每个人抽出的结果都是不一样的。

于是我想能否利用我在区块链中了解到的「两阶段广播」来产生去中心化的随机数?让这个抽奖程序以分布式的方式运行在所有人的设备上,会有一个后端服务器帮助客户端进行广播,但没有任何特权,每个客户端都会对抽奖过程进行验算,一旦有人作弊就会被发现。

于是我实现了这样一个原型(https://rollup.leanapp.cn,大家可以开两个窗口体验一下),源代码和更详细的算法描述在 https://github.com/jysperm/rollup,不过目前还有一些问题:

关于两阶段广播:

9927 次点击
所在节点    分享创造
38 条回复
HLT
2017-01-24 20:20:17 +08:00
shiny
2017-01-24 20:26:43 +08:00
难度在于让大家相信你是公正的
MOxFIVE
2017-01-24 20:39:09 +08:00
参考各类 1 元夺宝抽奖,把下期福彩结果当变量
loading
2017-01-24 21:14:53 +08:00
每人预先分配一个号码,然后用你们公司主要语言的 random 函数,现场跑。
lhbc
2017-01-24 21:19:23 +08:00
算法和代码公开,随机数现场获取。
h4x3rotab
2017-01-24 21:22:24 +08:00
看来能理解 blockchain 的人还是太少了
takashiki
2017-01-24 21:22:37 +08:00
先抽了一拨小奖之后有其他人加入的情况下,每个人抽到大奖的概率相等么?
cunkouwdy007
2017-01-24 21:51:09 +08:00
记得国外有个专业研究真随机数的机构做了个生成真随机数的网站,也许可以用那个?
ykrl089
2017-01-24 21:56:34 +08:00
类似彩票,弄一堆球滚下, 估计算是目前来说最公平的了。
just4test
2017-01-24 22:21:05 +08:00
我曾经设想过如何构建绝对公平的赌博程序。原理跟楼主的一样。
jybox
2017-01-24 23:18:36 +08:00
@takashiki 我这个算法是要等人齐了才会开始抽的。

@cunkouwdy007 @loading @lhbc random.org 么?其实还是解决不了我一开始提出的问题:既然随机数是在一台设备上产生的,如何确定这个设备(编译器、浏览器、 HTTP Client )没有被做过手脚呢。

@MOxFIVE 使用股票、比特币、福利彩票的结果应该算是实践上最简单可行的了。不过我们之所以认为他们可以信任,其实还是因为相比于一个年会抽奖,他们的体量太大了,去操纵的难度太大了,而不是说他们从理论上不可能被操纵。
lydasia
2017-01-24 23:20:43 +08:00
RqPS6rhmP3Nyn3Tm
2017-01-25 00:22:09 +08:00
@lydasia 虽然笑出声,但的确是正解
程序员就是容易把简单问题复杂化
Marfal
2017-01-25 00:46:49 +08:00
现场大屏幕手写
Arnie97
2017-01-25 01:08:42 +08:00
如果你只是想找个没被做过手脚的随机数发生器,我经常能捡到这个东西:

http://ww4.sinaimg.cn/large/a15b4afegy1fc27sh1prpj208w06oglj
lydasia
2017-01-25 01:13:23 +08:00
@Arnie97 这个哪是随机数,不过对咱来说可以当作是随机数。。
kslr
2017-01-25 01:52:54 +08:00
最无法伪造的随机数当然是 Random.org 了 利用大气噪音来生成随机数,而大气噪音是空气中的雷暴所产生的
param
2017-01-25 03:10:43 +08:00
用不可控的產生方式不就可以了嗎。。。比如說用第三方的服務來產生,而不是自家的程序。
herozhang
2017-01-25 07:21:57 +08:00
@kslr 问题在于如何让人相信你真的访问了这个网站
nightv2
2017-01-25 08:17:09 +08:00
每个人发一样的奖品 不就是 绝对公平么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/336742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX