让我们从命名的注释开始-坦率地说,我不喜欢自私采矿的名称。 所有区块链挖矿都是自私的,并且可以创造收入。 对于所谓的“自私采矿”而言,正确和不言自明的就是“ 隐身采矿 ”。

我相信Aviv Zohar提请注意以下事实:使用隐身采矿可能会产生双重支出攻击。 基本上,您要做的是将挖掘区块置于主链之外。 由于区块链中的规则是最长的有效链被视为分类帐,因此,如果您的链恰好比常规共识链长,那么那里的交易将被接受,而不是全球链上的交易。 假设您拥有网络中25%的采矿能力,则可能在大约4096个10分钟纪元内->大约280天的时间里,您将有这样的机会,您将比主链领先6个区块。 在这种情况下,您可以安排转移大量比特币以换取美元。 然后,按照自定义的6个时间段等待,以使交易被视为已接受。 然后,您将兔子从帽子中拉出,提交您的隐形链并覆盖主链,从而使之前进行的比特币转移过时。 由于未公开的原因,您逃离了美元,并在危地马拉度过了余生。

但是,您需要多长时间才能实现此“快速致富”计划?

为此,我创建了一个供您使用的计算器,可以在Github上找到它

有趣的部分是解释该计算背后的数学原理。 您实际上在这里拥有的是某种随机漫步 在概率p中,p是您在总采矿能力中所占的份额,您设法在世界其他地区之前达到了一个极限。 他们以1-p的概率领先于您。 然后,如果您达到6,即您设法比世界其他地方前进了6个街区,您就赢了。 这类似于赌徒的破产问题 -具有有限资源X的赌徒要花多长时间才能完成对赌场的**。 但是有一些区别。 首先,只要世界其他地方对您有利,您就可以重设他们的连锁店。 没有造成任何伤害,您将重新开始。 因此,随机游走永远不会进入轴的负侧。 鉴于此,您不能直接使用随机游动公式。

因此,您为n个随机游走后距原点k步的概率建立了一个递归公式。 我们将自身限制为k <= 6。 公式如下所示:

F(n,k)= pF(n-1,k-1)+(1-p)F(n-1,k + 1)

F(n,0)=(1-p)F(n-1,0)+(1-p)F(n-1,1)

还有其他边缘情况,例如F(1,2)显然为0-距离一步到原点的距离为2。

我们的最终目标将不是根据F的其他值将F(n,k)表示为递归函数,而是将其表示为以p表示的明确公式。

可悲的是,这很难算。

但是,有一个使用动态编程的更直接的解决方案 可以递归地查看由F创建的筛子,然后从(n,k)对的较低值开始向上移动,而不是递归执行该公式以进行指数复杂度计算。 然后,它变成多项式复杂度的运算。

自私的挖矿双花攻击模拟器
通过动态编程,您可以从较低的n,k对向上计算筛分值

我在Python中实现了这种筛算计算,以评估p的不同值,以计算在比特币挖掘时代产生攻击所需的时间。 基本上我要做的是我有一个Numpy数组,表示每个n,k组合的p系数。 我归纳地计算n的增长值的F。 出于内存原因和简单起见,我将k值限制为最大6,因此近似值为F(n,6)= pF(n-1,5)+ pF(n-1,6),而不是扩展为更高的k值。 这种近似实际上降低了攻击成功的可能性,因此您可以期望更高的历元估计。 我保留了将代码扩展为更高的k值(例如12)的代码。

实施时会很快遇到一些问题:

  • 一旦有了筛子,您如何找到概率足够好的点? 为此,我使用了我在这里找到的这个不错的通用二进制搜索摘录。
  • 内存大小。 F的系数线性增长,因此对于F(10000,k),您已经有10K系数,每个最大可用浮点大小都为16字节。 筛子中每个点的大小为160KB,因此,在该大小的筛子中大约有60K点,这可以估计高达1GB的RAM……这很多。 我要解决的是筛子有滑动窗口。 因此,我计算出了前200个n值。 我检查概率是否足够好。 如果是这样,我将在当前窗口中进行二进制搜索。 如果没有,我将生成下一个包含200个n值的窗口。 关于递归公式的好处是,n的计算仅取决于n-1个值。 因此,您实际上不需要一次将所有内容都存储在内存中。
  • 浮点问题-您可以很快到达那里。 我只是使用了numpy的longdouble,据说这是最准确的可用float,而不实现我自己的float版本,这会很麻烦。

享受模拟器!

From: https://hackernoon.com/a-selfish-mining-double-spending-attack-simulator-fda1af38794b

相关文章:

  • 2022-01-19
  • 2022-03-08
  • 2021-06-25
  • 2021-11-11
  • 2021-05-03
  • 2021-09-01
  • 2021-06-14
  • 2022-01-12
猜你喜欢
  • 2022-12-23
  • 2021-07-22
  • 2021-10-27
  • 2022-12-23
  • 2021-04-26
  • 2021-06-11
  • 2019-10-31
相关资源
相似解决方案