Bitcoin Unlimited就网络规则共识问题提出了以市场为导向,分布式的方法,这个方法的基础是中本聪共识。我们把这种方法称为涌现共识。如果你对涌现共识的细节不了解,这儿有有关于涌现共识具体机制的优秀文章和演示。
对涌现共识感到疑惑的人常常质疑它是否会维持一个区块链,或者在完全运行的涌现共识算法的网络中,是否会造成持续的区块链分叉。
因为“涌现共识”基本上是以“中本聪共识”为基础的,因此其兼容性在比特币白皮书(第11节)中是得到了证明的。
然而,该算法的模拟有助于调查给定具体输入条件下的具体结果。 并且该算法的模拟也有助于略微不同的涌现共识算法的实验,该实验是为了找到那些快速收敛的算法,但是其细节在数学分析中难以捕获。
在这里我创建了一个简单的模拟。该代码本质上允许您创建一组模拟矿工,并运行不同的大区块(EB),接受深度(AD)和生成不同规格的参数。然后该代码才能模拟区块链的创建。该代码可能改变矿工的设置,所以我们可以看到当一些散列函数选择开始挖掘更大的区块时会发生什么。
模拟的作用是我们可以运行数千个单独的大区块与小区块之间的转换实例。
这仍是一个正在进行的工作,在某种意义上,模拟更多的挖矿配置是有趣的。 本文报道了2组结果 – 一组是想要保持较低的区块大小,另一组是正努力将网络带到更高的区块大小。
在所有情况的报告下,EB给小区块的设定是1MB,给大区块的设定是2MB。 AD被设置为4,并且区块生成大小被设置的值与EB相同。
在当今的“区块大小争论”中,我认为75%的是一个经过充分考虑的大多数比例,一个可以认真地被认为是足够的大多数人想要更大的区块的比率。 我进行了1000次测试,模拟了分叉前6000秒,和分叉后1,000,000秒。 因此,我们预计在典型运行中大约有1670(1006000/600)个区块。
最长的分支链是4个区块,孤块的平均数只有2个区块,最坏的情况是有8个孤块。在334次运行中,我们一个小算力分叉都没有(如果在25%的少数挖到1个区块前,75%的大多数挖到了AD个区块,这种情况会发生。),在559次运行中,我们只有1个小算力分叉。 在81次运行中,我们有2个分叉,在22次,3次,1次运行中,我们分别得到3个,4个,6个分叉。 这些多条分支链的情况是因为25%的少数人幸运值很好,并且能够在75%的矿工连续挖到一定的区块之外找到一些区块,导致大多数算力回到小区块链的结果。
在60/40激活硬分叉(每100600秒的1000次运行)中,最长的分叉仍是4个区块,并且平均只有3个区块是孤立的,最坏的情况是在1800次运行中有15个孤立区块。 但正如你可能与少数人所期望的,有一个“长尾”的失败分叉尝试。 我只是指包括原始数据。 你可以这样读取:X:Y表示Y运行生成X分叉。
所以在下面的数据中,在511次运行中只有1个分叉,在24次运行中有5个分叉。
0: 139, 1: 511, 2: 182, 3: 84, 4: 44, 5: 24, 6: 7, 7: 8, 8: 1
不理解涌现共识算法的人通常假定50/50分流将导致网络不收敛(即不唯一)。 这些是从1MB到2MB区块交易的1000次运行的结果:
最大分叉深度:4 最大孤块数:34 平均孤块:5X:Y运行产生X分叉 {0: 61, 1: 392, 2: 211, 3: 118, 4: 75, 5: 54, 6: 29, 7: 19, 8: 21, 9: 8, 10: 3, 11: 6, 13: 2, 18: 1}
即使网络50/50激活硬分叉,网络仍然维持共识!
在创建约2000个区块的运行中,最大小算力分支链长度为4个区块,最差运行情况下,我们得到34个孤块。
但在61次运行中,我们没有得到任何小算力分支,而在大多数运行中,我们得到的小算力分支链少于2个。
顺便说一句,因为它很容易地在数学上分析,没有分支的61次运行是模拟正确性的良好的健全性检查。 没有分支链意味着在一行中有4个大区块需要被创建,并且以50/50的概率相当于翻转硬币4次,并且每次都人头朝上。 其概率是(1/2)∧4或1/16,因此从超过1000次运行中,我们预计看到它发生的可能性大约为62.5次。
附录:结果数据
您可能需要将此数据剪切到更宽的文本编辑器中:
SPLIT (block height, max blocks, avg blocks): max fork depth, max orphans, avg orphans, { X:Y where Y runs had X forks }SPLIT(区块高度,最大区块,平均区块):最大分叉深度,最大孤块,平均孤块,{X:Y运行产生X分叉}0.500000/0.500000 (1790, 1797, 1674): 4, 34, 5, {0: 61, 1: 392, 2: 211, 3: 118, 4: 75, 5: 54, 6: 29, 7: 19, 8: 21, 9: 8, 10: 3, 11: 6, 13: 2, 18: 1} 0.600000/0.400000 (1816, 1820, 1673): 4, 15, 3, {0: 139, 1: 511, 2: 182, 3: 84, 4: 44, 5: 24, 6: 7, 7: 8, 8: 1} 0.667000/0.333000 (1790, 1792, 1669): 4, 13, 2, {0: 195, 1: 563, 2: 157, 3: 53, 4: 25, 5: 3, 6: 2, 7: 2} 0.750000/0.250000 (1800, 1800, 1670): 4, 8, 2, {0: 334, 1: 559, 2: 81, 3: 22, 4: 3, 6: 1} 0.800000/0.200000 (1799, 1799, 1667): 4, 11, 1, {0: 422, 1: 517, 2: 52, 3: 8, 6: 1} 0.900000/0.100000 (1797, 1797, 1667): 4, 4, 1, {0: 625, 1: 357, 2: 17, 3: 1} 0.950000/0.050000 (1789, 1789, 1669): 3, 3, 1, {0: 829, 1: 169, 2: 2}
谢谢Sickpig.
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。