距离Filecoin测试网上线倒计时:61天
星际视界将持续翻译和整理官方正在编写的Filecoin网络协议的详细说明,并通过连载的方式,提供给中国研究者交流参考。
区块生成
链的选择
链的权重
在等重的提示集之间进行选择
削减EC
预期共识
块创建
刮刮一张中奖彩票并配备有效的ElectionProof
,矿工现在可以发布一个新的区块!
要创建区块,合格的矿工必须计算一些字段:
Tickets
-包含新票证的数组,如果适用,还包含生成的任何中间票证,以证明对任何失败的选举尝试都有适当的延迟。ElectionProof
-来自Tickets
数组证明的最终票证的签名。ParentWeight
-如链式Parents
-父块的CID。ParentState
-请注意,它不会以新生成的块结尾,但是必须进行计算才能生成其他字段。要计算这个:-取ParentState
的块中的一个的设置中所选择的父(不变的:这是一种用于在给定父集的所有块的值相同)。MsgRoot
-计算:Message
s插入sharray中。-将所有的bls签名汇总到一个签名中,并使用它来填写BLSAggregate
字段-对于secpk消息:-将每个secpk SignedMessage
插入sharray-创建一个TxMeta
对象并填写其每个字段,如下所示:-
blsMessages
:bls消息sharray的根cid-
secpkMessages
:secp消息sharray的根cid-该TxMeta
对象的cid 应该用于填充MsgRoot
块头的字段。BLSAggregate
-使用BLS签名的块中所有消息的聚集签名。StateRoot
-将每个选定的消息应用于ParentState
即可。ReceiptsRoot
-计算:Timestamp
-创建块时生成的Unix时间戳。我们使用无符号整数表示UTC时间戳(以秒为单位)。新创建的块中的时间戳必须满足以下条件:-
BlockSig
-在整个区块上带有矿工私钥的签名(还必须与票证签名匹配)。这是为了确保在将区块传播到网络之后,没有人会篡改区块,因为与普通的PoW区块链不同,发现中奖彩票的方式与区块生成无关。合格的矿工可以先填写Parents
,Tickets
然后ElectionProof
使用票务检查过程中的值。接下来,他们计算所选父块的汇总状态ParentState
。这是通过获取块的父提示集的聚集父状态,按票证对父块进行排序并将每个块中的每个消息应用于该状态来完成的。
在较早的块中已被使用过的任何消息(重复消息)都应被跳过(无论如何,此消息的应用都将失败)。
请注意,重新应用的消息可能会导致收到的收据不同于其原始块中产生的收据,一个悬而未决的问题是如何表示此技巧组“虚拟块”的收据特里。
一旦矿工有了总量ParentState
,他们就必须应用集体奖励。这是通过在状态树中将正确的块奖励金额添加到矿主的帐户余额中来完成的。奖励将立即在此区块中使用。
现在,选择一组消息放入该块中。对于每条消息,矿工msg.GasPrice * msg.GasLimit
从发件人的帐户余额中扣除,如果发件人没有足够的资金(此消息不应包含在链中),则返回致命的处理错误。
然后,他们应用消息状态转换,并为其生成收据,其中包含执行实际使用的总气体,执行退出代码和返回值。然后,他们退还给发件人金额为(msg.GasLimit - GasUsed) * msg.GasPrice
。如果出现消息处理错误,则将剩余的气体退还给用户,并恢复所有其他状态更改。(注意:这与以太坊的处理方式有所不同)
除非该消息执行失败,否则应将每个消息应用于上一个消息执行的结果状态,在这种情况下,将丢弃该消息引起的所有状态更改。此过程之后的最终状态树将是块的StateRoot
。
矿工将选定的消息集合存储起来,并将根放在中MsgRoot
。他们将每次执行的收据收集到一个集合中,对它们进行折算,然后将其根放入ReceiptsRoot
。最后,他们将StateRoot
字段设置为结果状态。
请注意,ParentState
预期共识文档中的字段被忽略了,这是为了帮助最小化块头的大小。任何给定父集的父状态应由客户端计算并本地缓存。
最后,矿工可以生成一个Unix时间戳以添加到其块中,以表明该块的生成已适当延迟。
自从生成父集中的最新块到时间戳并发送其块以来,矿工将一直等到BLOCK_DELAY过去。
我们建议使用NTP或其他时钟同步协议,以确保正确生成时间戳(不拒绝该块)。
虽然此时间戳无法提供硬性证明区块被延迟(我们依靠票证链中的VDF来做到),但它可以通过确保诚实的矿工拒绝未延迟的区块来提供某种较软的区块延迟形式。
现在该块已完成,剩下的就是对其进行签名。矿工立即序列化该块(没有签名字段),获取它的sha256哈希,并对该哈希进行签名。他们将结果签名放置在BlockSig
字段中。
正如在一轮中可以赢得0名矿工一样,在一轮中可以选举出多个矿工。这又意味着可以在一轮中创建多个块。为了避免浪费矿工完成的有效工作,EC使用了在一轮中生成的所有有效块。
叉子可能会在“预期共识”中自然出现。EC依靠加权链来快速收敛到“一条真实链”,而每个区块都会增加链的权重。这意味着最重的链应该反映出所执行的工作量最多,或者在Filecoin的情况下,应提供最多的存储量。
简而言之,每个块的权重等于其ParentWeight
加上该块的增量权重。三角洲权重是一个由以下要素组成的术语:
-wForkFactor:它旨在减少源自轮次的权重,在轮次中,产生的技巧与诚实链可能产生的结果不符(指向自私的采矿或其他非自发采矿)。协作矿工行为)。
-wPowerFactor:与链的总功率成正比地增加链的权重,即在链的功率表中考虑。-wBlocksFactor:在给定回合中挖掘的块数成比例地增加链的权重。像wForkFactor一样,它奖励矿工的合作(根据期望,每轮将产生更多的区块)。
我们有:w [r + 1] = w [r] +地板(1000 *(wForkFactor(wPowerFactor [r + 1] + wBlocksFactor [r + 1])))
对于给定的提示集ts在回合r + 1中:
权重应使用大整数算法并按上述操作顺序进行计算。乘以1,000和下限意味着在整个实现中帮助产生均匀的权重。
Note that if your implementation does not allow for rounding to
the fourth decimal, miners should apply the [tie-breaker below]
(#selecting-between-tipsets-with-equal-weight). Weight changes will be on the order of single digit numbers on expectation, so this should not have an outsized impact on chain consensusacross implementations.
Filecoin的链加权
这些参数的确切值有待确定,但出于测试目的,您可以使用:vt = 350
--vs = E-5
ParentWeight
是给定块的父集的总链权重。
它是通过其ParentWeight
任何父块(每个给定Tipset中的所有块都应具有相同的ParentWeight
值)加上每个父块的增量权重来计算的。
为了简化计算,将一个块ParentWeight
存储在块本身中(否则,可能需要进行长链扫描才能计算给定块的权重)。
在权重相等的提示之间进行选择时,矿工会选择最终票证最小的提示。
如果两个权重相同的小提示具有相同的最小票证,则矿工将比较下一个最小的票证(并选择下一个较小的票证的提示集)。这一直持续到选择了一个“提示”。
上述情况可能在某些块传播条件下发生。假设已经从区块A开采了三个区块B,C和D(分别由矿工1、2和3),并且minTicket(B)<minTicket©<minTicket(D)。
矿工1输出其块B并关闭。矿工2和3都收到B,但没有对方的块。我们让矿工2挖掘由B和C构成的Tipset,而矿工3挖掘由B和D构成的Tipset。
如果现在都成功挖掘了区块,则网络中的其他矿工将收到由重量相同且相同的Tipset构建的新区块。
最小机票(B街区的机票)。由于minTicket©<minTicket(D),他们应该选择在[B,C]顶部挖掘的块。
带有不同块的两个提示集具有所有相同票证的可能性可以认为是微不足道的:这等于在两个256位(或更多)抗碰撞哈希之间找到了碰撞。
由于存在潜在的分叉,矿工可以尝试过分影响协议公平性。这意味着他们可以选择不考虑协议,从而获得通常应从网络存储中获得的功能上的优势。如果矿工被证明偏离了诚实的协议,则应予以削减。
当矿工提交满足以下“削减条件”之一的两个区块时,这是可检测到的:
(1)一个区块在其票证阵列中至少包含一张票证,该票证与另一区块的票证阵列中的票证在同一回合中生成。
(2)一个块的父对象是一个Tipset,根据Tipset有效性规则,它可能已经有效地包含了另一个块,但是第一个块的父对象不包括另一个块。
任何检测到这种情况的节点都应同时使用块头和call storagemarket.SlashConsensusFault
。然后,网络将获取该节点的所有抵押品,将其一部分提供给报告者,其余部分保留。
《Filecoin规范文档》是系星际视界IPFSNEWS旗下【IPFS入门】板块泛IPFS领域知识普及栏目,未来将持续翻译整理Filecoin网络协议的详细说明,并通过连载的方式,提供给中国研究者交流参考。