1. IPFS点滴资讯首页
  2. 技术分享

揭秘Filecoin的设计文档丨第五部分:预期共识

本文主要讲述了Filecoin预期共识方面的问题

此文译自Filecoin设计文档https://github.com/filecoinproject/specs

设计文档,从设计的角度,分别介绍数据结构,挖矿机制,共识机制,支付方式,虚拟机执行 ,状态机存储角色等等。

FileCoin是一个分布式存储网络,共享状态持久存在于区块链中。揭秘Filecoin的设计文档丨第二部分

票据ticket:在EC领导人选举中,票是随机性的来源。每个块都取决于票的选举权。每个新块至少生产一张新票。

选举证明ElectionProof:是从过去的记录单派生的,包含在每个块标题中。选举证明矿工有资格在那一轮开采一个区块

一轮round:是指矿工进行领导人选举,试图产生新的区块的时期。在每一轮生成一个新的票据,因此一轮的持续时间当前受为生成票据而运行的可验证延迟函数的持续时间的限制。门票可按轮计票,每轮一张。

高度hight:  是指自创世以来,给定块建立在其上的顶点集的数量(高度0)。一个集内的多个块具有相同的高度。

时期epoch:新块产生的时期。一个时代可能有多轮。

TipSet:是一组具有相同父集和相同数量的记录单的块(这意味着它们将在相同高度进行挖掘)

预期共识

预期共识是一种概率的拜占庭容错共识协议。在高层次上,预期共识的运作方式是每轮进行一次领导人选举,在这轮选举中,预期一名参加者可能有资格提交一个区块。以给定的整数形式提交的所有有效块都是一个Tipset。Tipset中的每一块都会给链条增加重量。“最佳”链条是指重量最大的链条,也就是说,选择叉的规则是选择已知最重的链条。有关详细信息,请参见链选择。

基本算法如下:

  • 收集所有传入的块。
  • 检查其有效性,如挖掘规范所示。
  • 对于每个有效且不知道是基于坏链的块,将其放入chainTipsManager。
  • 检查矿工是否赢得第N轮比赛:
    • 采样n-k轮的安全链随机性以接收一张票(有关详细信息,请参见票)。k被称为随机性回望参数,当前设置为1。
      用这张票作为输入,计算一个选举证明。
    • 如果在第n-l轮结束时,选举证明的散列值小于矿工的权力与网络中总权力的比率,则矿工有一张中奖票。l被称为committelookback参数,当前设置为1。
    • 选举证明将包括在新的标题栏中。
  • 如果矿工是赢家,则生成一个新块:
    • 从 N-1轮最重的TipSet中选择最小的票。
    • 从中生成要包含在新块中的新票证。
    • 生成新块,如挖矿规范所示。

未完待续:详细说明此比较是如何工作的
未完待续:获取K和L的精确估计值,可能将两者合并为一个参数。
:超过适当票据生成(定义见下文)的块的有效性由使用EC的特定协议定义。有关有效块的filecoin定义,请参见挖矿规范部分。

基本算法可以通过依次查看它的两个主要组件来分解:

  • 领导人选举
  • 链式选择

秘密领导人选举

预期共识是一种共识协议,其工作原理是从一个与权力成比例的加权集合中选出一个矿工。在FileCoin的情况下,参与者和权力从存储权力表中提取,其中权力相当于通过时间提供的存储。

在预期共识中,领导人选举必须是秘密的、公平的和可核实的。这是通过利用选举中的随机性来实现的。在FileCoin使用EC的情况下,区块链跟踪一个独立的票链。这些票被用作领导人选举的随机性。每个生成的块都引用了一个选举证明,该选举证明是从以前的记录单派生的。每一次尝试的选举都会产生一张新的罚单的矿工扩展罚单链。

如果某一回合中任何矿工都没有发现中奖票(即网络上没有开采区块),则矿工们将前往该票链中的下一张票,尝试新的领导人选举。当这种情况发生时,矿工应在新的领导人选举之前生成一张新的罚单,从而适当延长罚单链(区块链永远不能长于罚单链)。这种情况在“输掉的票”部分得到了充分的体现。

为了使网络集中在一条链上,每个矿工每轮只能提交一个区块(详情可参见削减部分)
未完待续:票链和区块链图片

票据

人们可能会认为,EC的领导人选举是一种可验证的抽奖活动,在这种抽奖活动中,参加者按照他们在网络中的权力比例获胜。

在每一轮开始时从过去提取一张票,在每一轮生成一张新票。票据是独立于主区块链的链。一个记录单只取决于其之前的记录单,而不是块中的任何其他数据。然而,在filecoin中,每个块头都包含一个或多个新的票,从而扩展了票链。矿工在他们的区块内为他们抓取的每一张运行领导选举的票生成一张新的票,从而确保票链至少与区块链一样长。
在高层,票必须做到以下几点:

  • 确保领导者的保密性——这意味着只有当他们将区块发布到网络上时,才会知道区块生产者。
  • 证明领导者选举——意味着一个区块生产者可以被网络中的任何参与者验证。
  • 证明图纸之间存在适当的延迟,从而防止领导者通过提前释放块(以牺牲连通性较差的矿工的公平性为代价)来“匆忙”执行协议。
  • 确保每轮抽一张票——部分来源于上述内容,从而防止矿工在一轮内磨掉票(例如,通过反复抽新票以期获胜)

票据生成

本节讨论如何为票据数组生成票据。
在第 N轮,使用从第 N-1轮的Tipset中提取的票据生成新的票据。这样可以确保矿工在正确的回合之前不能发布新的区块(对应于中奖票k回合生成的选修)

由于一个tipset可以包含多个块(请参见下面的链选择),因此必须绘制tipset中最小的票据,否则该块将无效。
未完待续:绘制TipSet图片

矿工通过一个可验证的延迟函数(VDF)运行先前的记录单,以获得新的唯一输出。这近似于矿工的时钟同步,从而确保矿工在开出新的罚单之前已经等待了适当的延迟。它还建立了不同高度新块生产之间的下限延迟。这有助于确保公平性,因为连通性较低的矿工不会受到惩罚,有机会生产区块。

然后将该输出用作可验证随机函数(VRF)的输入,生成一个不同于任何其他矿工的新记录单。这增加了票链的熵,限制了矿工改变一个区块以影响未来的票(假设矿工不知道谁会先赢得给定的一轮)

检查选举结果

现在,矿工还必须检查他们是否在这一轮中获胜。
过程如下:

  • 在第N轮,矿工将从第 N-K轮的Tipset中提取最小的罚单,其中k是随机回退参数。
    • 如果在 N-K轮有多张票可供选择(即,如果最终创建的Tipset具有多个区块),则矿工应尝试从具有最小最终罚单(即,不一定是在该轮生成的最小罚单)的区块生成的罚单生成其选择证明。
  • 矿工将使用此票据作为VRF(可验证随机函数)的输入,从而确保保密性:没有矿工的私钥,任何其他参与者都无法生成此输出。从这个意义上讲,矿工是否抓到了一张中奖的彩票,一直是一个秘密,直到他们连同一个新的街区一起发布了他们的选举证明。
  • 矿工将把输出与 N-L轮的功率分数进行比较,并将l作为委员会的回溯参数。如果它较小,他们已经赢了,并且可以挖掘一个块,在 N轮产生的块的块头中插入这个获胜的选举证明。否则,他们需要等待收到在这轮产生的另一个块。

重要的是要注意,矿工会生成两个工件:一个是从最后一个区块的票中获得的一张票,以证明他们已经等待了适当的延迟;另一个是从用于进行领导人选举的票k返回获得的选举证明。

通常,一个矿工将生成一张中奖单(参见区块生成,或者在一轮结束时收到一个新区块(或多个区块)的消息(并在这个新Tipset最小的一张罚单上开始挖掘)。这轮谈判也没有成功的矿工。

输掉的票

如果每个人都在某一轮中抽到一张输掉的票(即没有矿工有资格生产区块),那么每个矿工都可以通过“抓取”(试图从中生成新的选举证明)链中的下一张票来再次进行领导人选举。也就是说,矿工们现在将使用票样 K-1 轮返回生成一个新的 ElectionProof。然后,他们可以将该证明与表 N-(L-1) 中的功率进行比较。重复此操作,直到矿工抓取中奖单并可以发布块(请参见块生成)

除了每一次尝试的 ElectionProof生成外,矿工还需要通过生成新的罚单来扩展罚单链。他们使用他们在前一轮中生成的票,而不是前一轮中生成的票(通常使用)。这证明了适当的延迟(考虑到找到一张中奖的票需要多轮)。因此,每次发现没有人在某一回合中获胜时,每个矿工都应使用他们先前生成的票据重复票据生成过程,将所述票据添加到他们将要被阻止的票据数组中。这一直持续到一些矿工找到一张中奖的罚单(见下文),确保罚单链至少与区块链一样长。

如上所述,如果在n-k轮有多张票可供选择(即,如果最终创建的Tipset有多个区块),则矿工应尝试根据区块生成的具有最小最终罚单(即,不一定是该轮生成的最小罚单)的罚单生成其选举证明。换一种方式,使用最小的最终票据的TipSet中的块会延长有效的票据链。

通过查看tickets数组,并确保使用数组中的前一个来生成每个后续票据(导致该数组中的最终票据),可以验证票据是否已在适当的轮数中生成。请注意,这会影响块大小和客户机内存需求,尽管在预期中,票据数组应该只包含一个值。
事实上,在票链中重复输掉的票的长度(相当于单个块引用的生成票的长度,或票数组的长度)在重复输掉的票的数量上呈指数下降(请参阅此处的更多信息)。在不太可能的情况下,由矿工提取的输掉的票的数量增长大于随机性回首k(即,如果矿工用完了作为随机性使用的票链上的现有票),矿工应像往常一样使用在这个时代为随机性生成的新票。这不会影响协议的安全性/有效性。

新块(具有多个票据)将具有一些关键属性:

  • 票阵中的所有票都是由同一个矿工签署的,以避免矿工交换票时出现带外串谋。
  • 从票 K-|Tickets|-1 (票的票列长度)回传正确生成了 ElectionProof 。

这意味着有效的 ElectionProof 可以从 Tickets 数组中间的Tickets生成。

块生成

一旦矿工在 i 轮和 i 相应的票上生成了获胜的选举证明,他们就可以创建一个区块。有关更多信息,请参见挖矿规范部分。

链选择

正如一轮可以有0名矿工获胜一样,多个矿工可以在一轮选举中获胜。这反过来意味着可以在一轮中创建多个块。为了避免浪费矿工完成的有效工作,EC使用一轮生成的所有有效块。

Tipset

在一轮中生成的所有有效块形成一个 TipSet ,参与者将在下一轮中尝试挖矿(见上文)。只要满足以下条件,Tipset就有效:

  • Tipset中的所有块都具有相同的父Tipset
  • Tipset中的所有块在其 TipSet 数组中具有相同数量的Tickets

第一个条件意味着在同一高度开采一个Tipset内的所有区块(记住,高度指的是区块高度,而不是轮票)。这一规则对于帮助确保EC随着时间的推移而收敛至关重要。虽然可以一轮开采多个新块体,但随后的块体都是从Tipset中开采出来的,将这些块体组合在一起。第二条规则是指在同一轮开采一个Tipset中的块体。

由于网络传播延迟,第N+1轮中的矿工可能会从其Tipset中忽略第N轮中挖掘的有效块。这不会使新生成的块无效,但会减少其权重和成为协议中规范链的一部分的机会。

链式权重

待续未完:确保正确且清楚地定义了“算力”

Fork可以在预期的共识中自然出现。EC依赖于加权链,以便快速收敛于“一个真正的链”,每个块都会增加链的重量。这意味着最重的链应该反映出所完成的工作量最大,或者在菲利肯的情况下,反映出所提供的存储量最大。

每个块的权重等于它的parentweight,加上该块的delta weight。delta权重是一个常数v,加上x——功率表中报告的网络总功率的函数。V的精确值和功率比值的大小仍有待确定,但目前V=10和X=log(总功率)

ParentWeight是给定块的父集的聚合链权重。ParentWeight计算其父块(给定Tipset中的所有块都应具有相同的parent weight值)的parent weight加上每个父块的delta weight。为了使计算更简单,块的parentweight存储在块本身中(否则,计算给定块的权重可能需要长链扫描)

当选择等重的Tipset时,矿工选择最小Min票据的Tipset(通过比较)

削减

具体实施见故障说明。
由于存在潜在的分叉,矿工可以试图不适当地影响协议的公平性。这意味着他们可以选择忽略协议,以获得比他们通常从网络存储中获得的能量更大的优势。如果一个矿工明显背离了诚实的协议,就要被削减。

在以下情况下会发生削减:

  • 矿工为同一轮提交两个区块。
  • 一个矿工在一个应该有自己的矿块(同样的高度,同样的父级)但没有的矿尖上采矿。
    • 如果矿工在父母的小费中找到一张中奖票,尽管他们自己提交了一张较小的(输掉的)票,但他们可以省略自己的街区。虽然不能证明tipset中的块省略是恶意的(即网络延迟可能仅仅意味着矿工没有收到特定的块),但很明显,矿工必须知道他们先前挖掘的块。
  • 另请访问:https://github.com/filecoin project/consension/issues/45 issuecomment-468035739

任何检测到这一情况的节点都应同时使用块头,并调用 storagemarket.SlashConsensusFault。然后,网络将获取该节点的所有抵押品,将其中一部分提供给报告者,并保留其余部分。

待续未完:目前还不清楚,给报告者的报酬是否比gas fees多是一件正确的待做的事。跟踪问题:https://github.com/filecoin-project/specs/issues/159

注意:人们可能会想,是什么阻止了矿工们简单地将他们的权力分解成多个不可链接的矿工行为体(或Sybils),这些行为体将能够在多个链上开采,而不会同时在同一轮中被抓获。我们称之为“whyruslashing”攻击。

实施说明

  • 当从mempool中选择要包含在块中的消息时,请注意,其他矿工也可能在这一轮中生成块,为了最大化费用收益,最好随机选择一些消息(第二个消息在副本中不赚取费用)

开放性问题

  • 参数k,参数l
  • 检查点策略
  • 块确认时间
  • 当在两个等重的叉子之间选择时,一种策略可能是为给定的块高度和重量选择具有最少链接票数的“tipset”。
    参与协商进程是否需要最低限度的权力?
  • “有效”候选块应该保留多长时间?本质上的问题是:最终性是什么时候?
  • 如何在预期共识设置中分配区块奖励?
  • VDF难度调整

下篇文章我们会介绍Filecoin的状态机等相关内容,请持续关注我们~

点对点科技简介

点对点科技深耘IPFS与Filecoin技术,坚持区块链技术改变未来的信念。点对点 IPFS 数据中心是目前国内技术领先,性价比高、保障优的投资标的。自建杭州数据中心,合作数据中心分布于上海、宁波、河北、香港、斯德哥尔摩(瑞典)等地。点对点数据中心具有优秀的硬件配置与目前国内优质的网络节点资源。点对点科技力求将IPFS爱好者升级为IPFS领军者与受益者,让IPFS颠覆传统互联网,共同开启 WEB 3.0时代。

想了解更多区块链知识吗?关注我吧!

Filecoin测试网二阶段昨日重启,点对点出块第一! | 点滴资讯

原创文章,作者:三色団子,如若转载,请注明出处:https://ipfsdrop.com/tech/8765/

发表评论

电子邮件地址不会被公开。 必填项已用*标注