FIL抢占算力排名很重要嘛?

[复制链接]
10085 |0
发表于 2020-6-21 17:12:00 | 显示全部楼层 |阅读模式

FIL测试网第二阶段已经进行了一月有余,本周进行重置。让人略感吃惊的是,很多矿工还是老套路,竞争算力排名,或者比拼挖矿效率。为什么?市场宣传的需要使然吧。但是这个时候这些数据并不能真正说明问题,因为实际上,在当前的算法下,算力高可能意味着吃亏,而且出块权的计算方式仍在改变。

被谁带跑了节奏

周五(6月19日)晨 8:00,FIL 测试网按计划重置了。这次重置是因为很多改变与原实现不兼容,为了节省时间,不通过兼容原链利用分叉的方式进行升级,而是直接重置。好处是节省时间,这也是为了让开发团队集中精力在实现奖励阶段的实现上,而不用花很多时间来进行链的维护。

我们仍然看到,重置之后不少团队的宣发,主要还是集中在:1)算力排名;2)出块效率;3)Seal速度。可以理解,大家都需要做市场,做宣传,推动生态发展。总要宣传点什么。

但是,在目前阶段仅关注这几个方面,可能进行一些误导。一方面是广大受众并不一定能有一个准确的判断,另一方面,信息也并不一定准确。之所以这么说,是因为就目前的实现而言:

  1. 算力占比过高,实际上代币收益是吃亏的

  2. 在现在的网络中,算力占比较小者理论上更占优势,但与网络状况和同步效率关系较大

  3. Seal 速度展示了一定的优化能力,但是有时候和效率是相悖的。同时,Seal速度的展示是可以伪造的*(具体怎么造请参考第二阶段刚上线的时候的一些讨论,当然也可以通过第三方进行挑战的方式进行证明)。

*注:这里并不是说一定有人伪造,只是说技术上可行。我们当然希望看到大家都能够尽可能地提升性能。

那问题来了,为什么这个阶段大家还抓住这些点不放呢?重复之前的各种指标。可能是因为节奏被带成这个样子了。然而,可惜的是这次没人带新节奏。

20%的警戒线

为什么说算力占比过高,实际上代币收益是吃亏的。因为测试网第二阶段开始,算法又变了。判断一个矿工能否赢得一轮挖矿权利依靠下面一个简单判断:

wk588_com_hts55x5sjd4.jpg

wk588_com_hts55x5sjd4.jpg

这里 h(vrfout) 是一个随机数;e 是预期每个高度的区块数,目前设置为 5;myPower/totalPower 是矿工的算力占比。

上面公式的意思是:如果你的算力占比是 r = myPower/totalPower,那么你获得选举的概率就是 r*e。问题来了,因为 e=5,因此当你的算力超过20%时,你一定能够赢得出块权。超过多少无所谓。

也就是说,无论你的算力是20%, 还是21%, 还是60%, 80%,理论上你都应该每一轮都能够出块,获得区块奖励。这样的话,超出20% 部分的算力就没有意义了。

相反,如果你拥有 10% 的算力,理论上你应该拥有 50% 的出块权,也就是有一半的机会出块。大家可以自己权衡一下,是否达到了这个指标。一般说来,因为受到各种因素的干扰,实际成功出块并加入最重链的几率要小于理论出块权的。

出块权和安全的权衡

为什么改成现在这个样子呢?一句话,为了稳定和安全作出的权衡。这里主要考虑如下几个因素:

  • 区块奖励和算力占比成正比 - 公平性

  • FIL网络出块更稳定,消息打包更完备 - 可扩展性

  • 系统安全性提升 - 安全性

为达到这些目的,FIL团队做了不少的探索。在最初的设计和去年的开发网阶段,基本上是考虑每一个高度平均一个区块。这样比较容易实现出块和奖励的公平性,但是有一个让人很不舒服的问题,空块的轮次太多了,我们在理论上做过计算,在一个正常的泊松分布的模式下,空轮比例达到30% (1/e)以上。

怎么办呢?在测试网第一阶段做出了一个简单的有意思的改进:增大每一个矿工的出块率。推出一个新概念:ExpectedBlocksPerEpech,也就是 e,目前这个值设为 5,也就是说每一轮的出块数为 5。并在其中采用了复杂的 GenerateCandidates 机制,按照sector的固定比例来计算,推出选票制,按照选票来计算区块奖励。如论一个矿工赢得几张选票,出一个区块就可以了。这个机制比较复杂。但是还是非常公平的。

据测算,在采用选票制的情况下,每一轮理论的区块数并不能达到 e (5),而是选票数平均为 e。平均出块数大概在 3.8 左右,根据不同的分布有差异。

但是,这种算法仍然隐含着问题,主要是在算力增大的情况下,在一个区块时间内的计算量呈线性增加,然而,区块时间是固定的,计算量逐步增大不合理。

因此,测试网第二阶段开始前,算法进一步改进。主要的改进就是简化,也就是当前的算法。前面讲到了,算法很简单,去掉了选票制。每一个矿工出块奖励都一样。但是,这里出现了一个 20% 上限的问题。

POS的秘密

20% 上限,看起来不公平,因为对于大于20%算力的矿工而言肯定是吃亏了。但是,这重要吗?不重要。因为它对于算力小于20% 的矿工而言是公平的。如果全网每一个矿工的算力都小于 20%,就公平了。

也就是说,这个算法,实际上是设置了一条算力的软上限。你可以超越这条线,但没有一丝好处。这样的设置,对于去中心化而言反而是有帮助的。所以团队在设计时对此并不在意。但是矿工不可不在意。但确实,这个上限确实被不少矿工有意无意地忽视了。

既然如此,这个算法是否就没问题了?其实不然。

wk588_com_0m3qvtgsid0.jpg

wk588_com_0m3qvtgsid0.jpg

这个算法有一个很大的问题,没有秘密了。区块链出块的一个重要的安全因素就是随机性和不可预测性,也就是秘密选举。但是,在目前的算法中,一个算力达到20%以上的矿工每一轮理论上都可以赢得选举,这就没有秘密可言了。没有秘密,那好多事就好办了。比如几个大矿工一起做点什么坏事就太简单了。

FIL的出块权选举是POS机制,相对于POW而言,POS在权益比例方面已经没有秘密了,都是公开的。这个POW完全不同,POW的工作量是事先不知道的,没有状态记录,只有通过事后的统计来进行判断,而且出块也是完全随机的。而POS的权益比例已经公开了,在这个秘密选举的世界,公开的信息越多就越容易被利用。那么如果一个算法能够被利用来推算出谁能够肯定赢得选举,这就不太妥当了。

没有秘密的选举,缺失了随机性,就增加了一份危险。

更好的算法?

是的,我们需要更好的算法。更安全,更随机地选举机制,来保证链的安全。这个问题一旦提出,大家头脑风暴一番,方案可能不少。比如:

  • 还是加入选票制,减小大矿工的出块几率,提高选票权重来调节出块奖励

  • 另外设置一个出块权概率的上限(也就是把上面的软上限进一步降低)

  • 让每一个矿工在每一个高度进行多轮选举

我个人倾向于简单地设置上限的方式来解决问题,这样代码改变较小,可以兼顾效率和工程实现。但出块权不是小事,一定要慎重考虑和分析。

期待下一次的改进吧,应该很快就会发生了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表