作者:StevenLi
来源:IPFS原力区
Filecoin测试网第二阶段已经进行了一月有余,本周进行重置。让人略感吃惊的是,很多矿工还是老套路,竞争算力排名,或者比拼挖矿效率。为什么?市场宣传的需要使然吧。但是这个时候这些数据并不能真正说明问题,因为实际上,在当前的算法下,算力高可能意味着吃亏,而且出块权的计算方式仍在改变。
被谁带跑了节奏
周五晨8:00,Filecoin测试网按计划重置了。这次重置是因为很多改变与原实现不兼容,为了节省时间,不通过兼容原链利用分叉的方式进行升级,而是直接重置。好处是节省时间,这也是为了让开发团队集中精力在实现奖励阶段的实现上,而不用花很多时间来进行链的维护。
我们仍然看到,重置之后不少团队的宣发,主要还是集中在:1)算力排名;2)出块效率;3)Seal速度。可以理解,大家都需要做市场,做宣传,推动生态发展。总要宣传点什么。
但是,在目前阶段仅关注这几个方面,可能进行一些误导。一方面是广大受众并不一定能有一个准确的判断,另一方面,信息也并不一定准确。之所以这么说,是因为就目前的实现而言:
算力占比过高,实际上代币收益是吃亏的
在现在的网络中,算力占比较小者理论上更占优势,但与网络状况和同步效率关系较大
Seal速度展示了一定的优化能力,但是有时候和效率是相悖的。同时,Seal速度的展示是可以伪造的*。
*注:这里并不是说一定有人伪造,只是说技术上可行。我们当然希望看到大家都能够尽可能地提升性能。
那问题来了,为什么这个阶段大家还抓住这些点不放呢?重复之前的各种指标。可能是因为节奏被带成这个样子了。然而,可惜的是这次没人带新节奏。
20%的警戒线
为什么说算力占比过高,实际上代币收益是吃亏的。因为测试网第二阶段开始,算法又变了。判断一个矿工能否赢得一轮挖矿权利依靠下面一个简单判断:
这里h(vrfout)是一个随机数;e是预期每个高度的区块数,目前设置为5;myPower/totalPower是矿工的算力占比。
上面公式的意思是:如果你的算力占比是r=myPower/totalPower,那么你获得选举的概率就是r*e。问题来了,因为e=5,因此当你的算力超过20%时,你一定能够赢得出块权。超过多少无所谓。
也就是说,无论你的算力是20%,还是21%,还是60%,80%,理论上你都应该每一轮都能够出块,获得区块奖励。这样的话,超出20%部分的算力就没有意义了。
相反,如果你拥有10%的算力,理论上你应该拥有50%的出块权,也就是有一半的机会出块。大家可以自己权衡一下,是否达到了这个指标。一般说来,因为受到各种因素的干扰,实际成功出块并加入最重链的几率要小于理论出块权的。
出块权和安全的权衡
为什么改成现在这个样子呢?一句话,为了稳定和安全作出的权衡。这里主要考虑如下几个因素:
区块奖励和算力占比成正比-公平性
Filecoin网络出块更稳定,消息打包更完备-可扩展性
系统安全性提升-安全性
为达到这些目的,Filecoin团队做了不少的探索。在最初的设计和去年的开发网阶段,基本上是考虑每一个高度平均一个区块。这样比较容易实现出块和奖励的公平性,但是有一个让人很不舒服的问题,空块的轮次太多了,我们在理论上做过计算,在一个正常的泊松分布的模式下,空轮比例达到30%以上。
怎么办呢?在测试网第一阶段做出了一个简单的有意思的改进:增大每一个矿工的出块率。推出一个新概念:ExpectedBlocksPerEpech,也就是e,目前这个值设为5,也就是说每一轮的出块数为5。并在其中采用了复杂的GenerateCandidates机制,按照sector的固定比例来计算,推出选票制,按照选票来计算区块奖励。如论一个矿工赢得几张选票,出一个区块就可以了。这个机制比较复杂。但是还是非常公平的。
据测算,在采用选票制的情况下,每一轮理论的区块数并不能达到e(5),而是选票数平均为e。平均出块数大概在3.8左右,根据不同的分布有差异。
但是,这种算法仍然隐含着问题,主要是在算力增大的情况下,在一个区块时间内的计算量呈线性增加,然而,区块时间是固定的,计算量逐步增大不合理。
因此,测试网第二阶段开始前,算法进一步改进。主要的改进就是简化,也就是当前的算法。前面讲到了,算法很简单,去掉了选票制。每一个矿工出块奖励都一样。但是,这里出现了一个20%上限的问题。
POS的秘密
20%上限,看起来不公平,因为对于大于20%算力的矿工而言肯定是吃亏了。但是,这重要吗?不重要。因为它对于算力小于20%的矿工而言是公平的。如果全网每一个矿工的算力都小于20%,就公平了。
也就是说,这个算法,实际上是设置了一条算力的软上限。你可以超越这条线,但没有一丝好处。这样的设置,对于去中心化而言反而是有帮助的。所以团队在设计时对此并不在意。但是矿工不可不在意。但确实,这个上限确实被不少矿工有意无意地忽视了。
既然如此,这个算法是否就没问题了?其实不然。
这个算法有一个很大的问题,没有秘密了。区块链出块的一个重要的安全因素就是随机性和不可预测性,也就是秘密选举。但是,在目前的算法中,一个算力达到20%以上的矿工每一轮理论上都可以赢得选举,这就没有秘密可言了。没有秘密,那好多事就好办了。比如几个大矿工一起做点什么坏事就太简单了。
Filecoin的出块权选举是POS机制,相对于POW而言,POS在权益比例方面已经没有秘密了,都是公开的。这个POW完全不同,POW的工作量是事先不知道的,没有状态记录,只有通过事后的统计来进行判断,而且出块也是完全随机的。而POS的权益比例已经公开了,在这个秘密选举的世界,公开的信息越多就越容易被利用。那么如果一个算法能够被利用来推算出谁能够肯定赢得选举,这就不太妥当了。
没有秘密的选举,缺失了随机性,就增加了一份危险。
更好的算法?
是的,我们需要更好的算法。更安全,更随机地选举机制,来保证链的安全。这个问题一旦提出,大家头脑风暴一番,方案可能不少。比如:
还是加入选票制,减小大矿工的出块几率,提高选票权重来调节出块奖励
另外设置一个出块权概率的上限
让每一个矿工在每一个高度进行多轮选举
我个人倾向于简单地设置上限的方式来解决问题,这样代码改变较小,可以兼顾效率和工程实现。但出块权不是小事,一定要慎重考虑和分析。
期待下一次的改进吧,应该很快就会发生了。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。