来客网

为何说区块链彩票是一个糟糕的主意

声明:本文转载自 「华尔街见闻」, 或因排版与篇幅原因进行过编辑,内容未经本站独立核实,不代表本站立场、观点或建议。 如涉及版权问题,请联系我们,核实后立即删除。 [ 免责声明 ]

这个计划,表明上需要相当担心矿工对彩票操纵的可能。

每一个从区块哈希导出随机数的人,都应该担心矿工攻击的问题。假想一下,一名矿工希望让这个彩票变得不公平,他可以通过计算一个区块并查看其哈希是否会给矿工带来好的结果。如果不是好结果,这名矿工可以丢弃掉区块,选择不去公开。

但实际上,矿工攻击并不是问题

但在这种情况下,对矿工的担忧完全被夸大了,假设一名矿工为了这个特别的彩票,他必须放弃一个完好的比特币区块,因此他要失去超过20BTC (约合30万美元)的奖励,而得到的彩头却只有0.1BTC(1500美元)。

无论如何,有些人会过于偏执于那些不会发生的事情。我们听到过不少关于”中国矿工” [3] 的消息,还有专门诋毁他们的红迪子版块。Core开发者总是不断提醒我们要警惕中国矿工。也许额外的偏执是被要求的。但至少,中国矿工们可能是无害的。

当我们试图关注矿工的时候,我们可能完全错过了其他更大的问题,对吧?

在这一点上,事情变得非常哲学,所以我会放弃这一思路,我不认为矿工是邪恶的。这里有一个充满信息和模因的subreddit。

那么,这种方法能够很好地牵制住矿工吗?一点也不。该方案从两个哈希的组合中导出随机数,分别在高度H和H + 5。它无法确保这些区块来自两个独立的矿工。如果两个数字来自同一个矿工的话,那么挑选它们有什么意义吗?

即使区块H和区块H+ 5来自不同的矿工,我们怎么知道它们不是一伙的?这似乎是一个不可逾越的问题。

好吧,无论如何它都是有问题的

但不管怎样,这个方案都可以通过可预测的方式进行破坏。挖掘第二个区块的矿工,会知道第一个区块是被谁挖到的,所以他完全控制了彩票的结果。所以,两个矿工之间甚至不需要串通,因为第二个矿工已经控制了结果。如果挑选了N个区块的哈希,那么挖到最后一个区块的矿工,依然可以控制结果。

但这并不重要

但是等等,在随机性计算中的缺陷并不重要,因为理性的矿工不会发动攻击,因为成本远远高于潜在的奖金。可是,假设是把一个国家级的彩票(例如福彩)放到区块链上,那就是另外一回事了,但这个案例显然不是,所以让我们继续前进。

另外存在的漏洞

这就引出了一个更为根本的问题所在。这个特殊的方案选择了一个随机获胜的数字,并给得到这个数字的人颁发奖励。其选取的随机数仅受限于群体大小的互质。组合H的选择,并选择H*j mod N的算法限制了赢家的集合。

因此,一些数字较其它数字会更容易地被选为H。简单举个例子来说明原因。想象一下, Eric的推文被转发了1000次,那么与1000 互质的潜在数字就有65534个。例如,2, 4, 5、6, 8和10不是互质的,所以它们不是第一个被选取的数字。它们的倍数也不会被选择。

现在,被选择的数字可能是较小的,比如1,然后覆盖前10个数字,包括2、4、5、6、8和10。

也可能会选中较大的数字,它环绕并覆盖那些不会被覆盖的数字。

但是,很可能有一些数字既没有被选中的数覆盖(即N的互质数),也没有被环绕的大数字所覆盖(即mod N 互质数的倍数)。让我们来看看这些不幸运的数字。

有这么不幸的数字吗?是的,事实证明,如果转发了1000次,那么第20、25、40、50、60、75条转发绝不可能获胜!

我们不知道会发生多少转发,所以或许1000次转发的不幸数字,和1001次转发的不幸数字可能差别很大。

在这一点上,我们可以做一些理论分析,而现在是平安夜,要计算和检验数字要容易得多。我们所能做的,就是对转发的可能数量进行迭代,看看是否有任何有利的位置和不利的数字,然后我们可以看出有多少占据优势的人,以及多少不幸的人。

文章配图

我写了一个小模拟器,检查每一次转发的结果,我把它放到了 github上 ,任何人都可以查看,如果我错过了什么的话。

这里是图形结果,用于模拟1000-4000范围的推文转发数。

我们可以看到,在已转发 Eric推文的1000人中,10号的转发者中奖率极高!他有641486种不同的获胜方式。第二个有利位置是970号,他有632404种获胜的方式。而2号, 8号和9号推文转发也在前25之列。

文章配图

将高概率数字和尾部的低概率数字进行比较,例如,第924次转发,它只有440952种获胜的方式! 而第10次转发的获胜概率是第924次转发的1.5倍!其它较低概率的数字,分别为420, 660, 780、840以及528。

更大的误差

这一切看起来都很聪明。起初看这个机制是可以由矿工操纵的,但后来发现它们完全是不相关的,并且这个方案本身也有缺陷。其分布并不均匀,某些人获胜的概率会大于其他人。

但是,这里还有一个更大,更明显的错误。我会给你一段时间思考。

这种彩票实际上更有利于运行社交媒体操纵服务的人,如果你有一堆Twitter 马甲账号,你就可以比诚实的参与者拥有更多的机会。如果你有1000个马甲账号,并且实际转发数只有1000条,那么上面这些花哨的数学和模拟实际上并不重要,你获胜的几率就是50% 。

更好的方法

那有什么更好的办法吗?均匀分布实际上是很难实现的。通常情况下,最简单的解决方案是最好的:获取转发列表,并基于区块哈希导出的随机数种子进行洗牌操纵(使用Knuth shuffle工具 [4] )然后你再把奖颁给前10的人。洗牌算法必须事先公布,那样人们才不会认为从中作弊。当然,即使你使用了这个计划,你仍然可能会遭受女巫攻击( Sybil attack)。

可Eric已经宣布了这个特别的彩票计划,他能够立即改变规则吗?如果这是一个智能合约,那就意味着一次硬分叉!

那么,我们能从这个案例中学到了什么?

评论 (0)