数据分析 | 你真的了解Filecoin网络的算力、出块率、收益嘛?
作者:Steven Li(胡飞瞳)
来源:IPFS原力区
Filecoin测试网络顺畅运行中,即将开启第二阶段旅程。无论是矿工,工程师还是投资者,对测试网络的数据都非常感兴趣。尤其感兴趣的就是爆块率和算力排名。也有人在拿出块率和算力一起做综合比较。但是,多数人迈入了误区。没有理清其中的关系,本文通过模拟来做一点数据透视,希望提供一些帮助。
要点
- Testnet/2 并未完全实现按照算力等比例概率获得区块奖励,Testnet/3将补上这个部分
- 爆块率与区块奖励并非成正比
- 尽管设置为每个高度期望赢得选举的票数为 5,并不意味着平均每一轮平均产生5个区块,理论上,仅在3.38左右
- 由于孤块的存在,实际爆块率和区块奖励会低于预期
爆块数量及爆块比率
下面这张图大家再熟悉不过了。此图中占据大幅版面的是最近一段时间的每个高度上的区块数量,同时用不同颜色来显示这些区块是由哪一个矿工产生的。此图的右侧是一个平均爆块率排行榜,这个排行榜的计算是依据近一个小时的爆块数据进行统计的。
拿第一个矿工举例,其爆块率为0.73,表明在近一个小时之内,有73%的高度上,此矿工有爆块。在Testnet/2中,区块时间为45秒,那么一个小时总共包含 60*60/45 = 80个高度(epochs),也就是说,有大约58个高度上有所收获 - 爆块并获得区块奖励。
有些人注意到了,右侧的数加起来不等于1。是的,不等于1。这是因为每一轮产生的区块数量并不是1。如果我们统计所有矿工的爆块比率,那么所有这些比率加起来应该等于每一轮爆块数量的平均值。这个值就是下面这个图显示的:
拿当前这个例子来说,应该等于3.0。但其实你如果算一下,是小于3.0的。原因在于第一个图中右侧的排行榜仅列出了排名靠前的矿工。
有一些喜欢研究的投资者或工程师有问题了,这个爆块率带来奖励,那么算力高的爆块率高可以理解,但是,似乎爆块率与算力显示不成比例,尤其是大矿工,好像反而比较低,这是怎么回事呢?
有些人一个区块可以得到多份奖励
换句话说,就是不同的区块奖励可能有所不同,从概率上来将,大矿工很可能在一个挖到的区块上获得两倍或者三倍的奖励。但不要误解,从总的概率而言,理论上大家的收益和算力还是成正比的。这个似乎有点难理解了,谁挖出区块谁就得一份奖励。为什么要设计成不同的区块奖励可以不同呢?这里有比要带大家温习一下 【Filecoin】Filecoin的区块架构 - Tipsets 这篇文章。
Filecoin每一轮出的是一个区块集合,成为tipset。这么做的目的是什么呢?答案是尽量减少没有区块的轮次(即空块轮次)。一个简单的办法就是提高出块数量的预期,这个值目前设计为 5。也就是说,如果还是按照原来的方式来出块的话,每一个矿工每轮出块的概率增加到原来的 5 倍。但是,这样一来,必然会出现一种可能,就是一些矿工在一轮中可能出2个或者更多的块。但是这个就显得多余了,因为你只要出一个块就这一轮就不会跳空了。出多个就是浪费空间和带宽。但是出少了,不是奖励就少了吗?不公平啊。
解决方案就是折衷一下,如果矿工在同一轮中有多个出块权,那么,还是出一个区块,但在区块内表明有几个出块权。只要通过验证,就按照出块权的数量来给予奖励即可。完美解决。
因为出块权与算力成正比,那么算力高的获得出块权的概率就高,在一轮中有多个出块权的概率也大一些。
但是,回到Testnet/2,当前实际上并没有按照出块权来给予区块奖励,这部分实现放到了 Testnet/3。也就是说,从Testnet/3开始,你将看到与主网基本一致的区块奖励实现。
区块奖励与赢得的选票成正比
通过上面的说明,可以理解,一个矿工至少要有一个出块权(赢得的出块选票)才可以出块,有多个出块权时,也仅仅出一个区块即可。奖励按照赢得的选票数来分发。在目前的设计中,每一轮全网所有矿工预期赢得选票数的平均值设为 5。那就是每一轮 5 张选票,谁能拿到,谁就可以出块。
考虑一种理想情况,每一个拿到选票的人都能够出块,而且,所有的区块都能够被网络接收,并进入主链。那么,我们看到的平均区块数量和奖励情况将会是怎样的呢?
我们来模拟一下,根据当前测试网络的运行情况,我们假定:
- 预期每轮能够赢的选票数为 5 (符合 Testnet/2 的设定)
- 假设全网矿工数量为11个,满足二项式分布 (这个比较符合现在测试网的情况,而且根据之前的网络模拟,这个规模可以简单地反应大型网络的情况)
- 网络符合上面提到的理想情况,即所有矿工工作正常,出块正常,没有孤块
此次模拟中,矿工#1占据全网算力的 24.61%,基本可以反应当前网络中排名第一的矿工,其算力占比为:758.47T/3.110P = 24.39%。
第二列为第一个矿工的理论上的出块概率,分别说明一下:
- 算力占比:24.61%
- 无出块权概率:29.13%,也就是说,理论爆块率为 70.87% (1-29.13);与第一张图比较,符合预期
-
包含 1, 2, 3, 4, 5, 6, 7 份出块权的爆块概率分别为:
- 36.02%, 22.18%,9.07%, 2.77%, 0.67%, 0.14%, 0.02%
那么我们换一个角度来看一下, 比较一下上述11个矿工他们每一个人的爆块率和出块权票数之间的关系,见下表:
还是来看第二列,即第一个矿工的情况,尽管其理论爆块概率仅仅为 70.87%,但是其实际出块权选票的获得率为 123.05%。也就是说其爆块获取的区块奖励将是只有一个选票的区块的 123.05/70.87 ~= 1.736 倍。
所以,不要简单地看爆块率,如果不进一步分析,你会被蒙蔽的。
更多的指标:平均区块数量
我们回头看一下,这样的设计能够满足最初的愿景吗?也就是跳空的轮次降到很低(不可能完全没有,这是个概率问题)。按照上面的模型,通过推算,我们得出如下网络理论数据:
- 每轮平均区块数量:3.38233;注意,这个数与定义的预期每轮平均出块权(5)差别不小
- 出现空块轮次的概率:0.006656;也就是说,在一千个高度中,大约会出现 6~7次空块的轮次;还不错了。
- 每轮出块权的总和平均:5;当然是5了,至少理论上是的。
现实没有那么丰满:你的块被弄丢了
因为网络的复杂情况,也因为设备运行故障,也可能因为你就是出块慢了一些,那么,不好意思,你的区块可能就被主链抛弃了。被抛弃的区块被成为孤块(Orphan Blocks)。孤块将不能得到奖励,白挖了。网络中总是有一定的孤块率的,我们希望一个好的网络中孤块率越低越好。但是也希望,即使在孤块率比较高的情况下, 网络安全不受影响。
我们通过设置不同的孤块率来模拟不同的网络情况。
-
理想情况,孤块率=0 时
-
孤块率=10% 时
-
孤块率=20%
-
孤块率=30%
共性与个性:你的孤块率可能很不一样
可以想见,孤块率并不是针对每一个矿工平均分布的。由于网络、系统稳定性和算法等等原因,可能有些矿工的孤块率就要低一些,有些则要高一些。再次回到我们目前的测试网络,目前孤块率略高于10%。那么我们来具体考察几个矿工,参照下表:
就排名靠前的几个看一下,前面提到了,
第一位:算力占比约为:24.3%,基本符合本文中模拟场景的第一名
第二位:算力占比约为:14.94%,略高于我们模拟网络的第四位
第三位:算力占比约为:11.58%,基本等同与我们的第四位
第四位:算力占比约为:9.17%,略低于我们模拟网路的第四位
这几位的爆块率分别位:73%,44%,38%,45%
分别对应:
理想情况下的理论指标:70.87%,44.42%+x, 44.42%, 44.42%-x
孤块等于10%的情况下:63.79%,39.98%+x, 39.93%, 39.98%-x
这里 x ~= 3%。
可以看出,在本次取样中,第一位和第四位矿工基本没有收到孤块率的影响。第二和第三略受影响,但影响度也基本符合预期。由此,可以想见,其他矿工可能受影响大一些。不过,这在测试网络中非常正常。因为程序不稳定,许多人还在调试,不停地有新矿工加入,这样新进入的矿工或处于调试中的矿工自然会拉低平均值。
Testnet/3 需要更多的数据
通过上面的分析,我们知道,出块权非常重要,而且拿到出块权后,能不能完成证明也很重要。这一部分由于目前还没有完全实现,所以官方推出的展示板中并没有显示完整。那么在即将到来的 Testnet/3 中,最好这一部分能够提供可视化的展示。这里透露一个好消息,据可靠情报,目前已经在为大家服务的 filscan.io 会在下一阶段加入出块权的显示,给大家更多的分析数据。
最后提一个问题:
在有孤块存在的情况下,Filecoin真的是6年减半吗?想一想。