Filecoin - 深入理解WindowPoSt

本文详细介绍了Filecoin的WindowPoSt证明逻辑,包括证明周期、Window分配、证明调度和生成过程。WindowPoSt每天进行一次,分为48个半小时窗口,每个窗口需要提交证明来验证Sector数据的正确保存。证明的个数取决于窗口中的Sector数量和分区设置,每个分区的Sector需要挑战10个叶子节点以生成零知识证明。
摘要由CSDN通过智能技术生成

Lotus的PoSt算法,分成两个场景:Winning PoSt和Window PoSt。Winning PoSt是在出块时,对已经提交的Sector数据进行证明。Window PoSt,每隔一段时间对提交的Sector的数据进行证明,证明Sector数据依然正确保存。Winning PoSt的逻辑,可以查看之前文章:

https://blog.csdn.net/StarLi2020/article/details/108816235?spm=1001.2014.3001.5502

本文详细介绍Window PoSt的逻辑。要理解Window PoSt的逻辑,需要从Sector在智能合约中的管理讲起。本文涉及的智能合约代码(specs-actors)的最后一个提交信息如下:

commit 382017dd33e9e818a51503893433628fab643dd3
Author: Alex North <445306+anorth@users.noreply.github.com>
Date:   Wed May 6 10:08:31 2020 +1000

    Set ConsensusMinerMinPower to 10TiB (#344)

###Miner’s State (矿工状态)

矿工的状态中存储了矿工信息,矿工的抵押信息以及Sector的各种状态。挑选和WindowPoSt相关的字段:

 type State struct {
 		 ...
     ProvingPeriodStart abi.ChainEpoch
     NewSectors *abi.BitField
     Deadlines cid.Cid
     ...
}

ProvingPeriodStart - 每次证明的起始区块时间

NewSectors - 新区块信息

Deadlines - 每个挑战时间,分割成多个"window",每个window又称为一个Deadline。WindowPoSt名称中的Window就是得名于此。

1.1 Proving Period(证明间隔)

WindowPoSt相关的配置定义在specs-actors/actors/builtin/miner/policy.go文件中:

 const EpochDurationSeconds = 25
 const SecondsInYear = 31556925
 const SecondsInDay = 86400
 
 const WPoStProvingPeriod = abi.ChainEpoch(SecondsInDay / EpochDurationSeconds)

 const WPoStChallengeWindow = abi.ChainEpoch(1800 / EpochDurationSeconds) // Half an hour (=48 per day)
 
 const WPoStPeriodDeadlines = uint64(WPoStProvingPeriod / WPoStChallengeWindow)
 
 const WPoStChallengeLookback = abi.ChainEpoch(20) 

WPoStProvingPeriod - 证明周期,每天需要证明一次。

WPoStChallengeWindow - 每半个小时是一个ChallengeWindow。每个证明周期,分为48个ChallengeWindow。

WPoStPeriodDeadlines - 每个ChallengeWindow,都是一个挑战窗口期,每个ChallengeWindow的结束时间都是Deadline。

WPoStChallengeLookback - 每个ChallengeWindow,从链上获取随机数信息,向前推算的区块时间。

简单的说,WindowPoSt的周期是一天,分成48个Window。在不同的Window时间段中的Sector的信息不同。每个Window都需要提交WindowPoSt的证明,Window中分配的Sector的个数决定了WindowPoSt证明的个数。具体的逻辑后面会介绍。

1.2 Deadline

Deadline的具体定义在specs-actors/actors/builtin/miner/deadlines.go中:

 type DeadlineInfo struct {
     CurrentEpoch abi.ChainEpoch // Epoch at which this info was calculated.
     PeriodStart  abi.ChainEpoch // First epoch of the proving period (<= CurrentEpoch).
     Index        uint64         // Current deadline index, in [0..WPoStProvingPeriodDeadlines), or WPoStProvingPeriodDeadlines if period elapsed.
     Open         abi.ChainEpoch // First epoch from which a proof may be submitted, inclusive (>= CurrentEpoch).
     Close        abi.ChainEpoch // First epoch from which a proof may no longer be submitted, 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值