Supermilkycow / BitLoot

BitLoot - 一个基于区块链交易Hash随机性的年会抽奖程序

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BitLoot - 一个基于区块链交易Hash随机性的年会抽奖程序

人民的信任是报刊赖以生存的条件,没有这种条件,报刊就会完全萎靡不振。——马克思(德)

人民的信任是程序员赖以生存的条件,没有这种条件,程序员还是会写各种带后门和BUG的代码。——SuperCow(帅)

0x00 动机

年会抽奖是一年一度的头等大事,但由于近年来人们**道德水平的下降,导致了大量的抽奖黑幕。作为代码编写者,常常被指责随机是伪的、过程不透明、运行代码与展示代码不一致、不可重现等问题。这些问题,都深深的伤害了抽奖程序编写者和参与者的革命感情。因此,我们提出了一种过程公开,随机性好,可重现的抽奖方案。

0x01 原理

比特币的实现原理可以参考中本聪的论文,也可以参考

比特币是怎样运行的-知乎

虽然不是很清真,但是也讲清楚了。在这里就不详细叙述了。

在这个实现当中,我们利用到的是每一个块中间包含的交易TX的hash. 因为这些交易hash在一定程度上是随机的。

我们通过预先指定还没有出现在网络上的区块的指定交易号,进一步选取其中的交易hash的一部分来作为随机因子。 从理论上讲,要在这么短时间控制这次抽奖是不现实的。且不考虑劫持整个bitcoin网络那样的大工程,仅仅是大量制造可能在hash上能够满足作弊者的抽奖ID的交易,也需要付出足够多的交易费用(基本都比奖品贵太多了:-P)。

0x02 特点

随机性好

生成的交易tx hash是将交易信息进行两次SHA-256运算的结果,可以看似随机的。

[具体实验数据和图表之后添加]

并且,每一个块可以包含成百上千的交易,每一个交易都可以作为随机种子。

过程公开

对参与者和代码编写者,可以协商使用不同的求余散列算法。

可重现性

每一次抽奖,求余因子和块号确定,总是能够重现结果。

0x3 注意事项

  • 中奖名单是有序的
 在出现了重复的中奖者以后可以简单的粗暴的将中奖者人数加N增补中奖名额

About

BitLoot - 一个基于区块链交易Hash随机性的年会抽奖程序


Languages

Language:HTML 74.2%Language:JavaScript 25.8%