合约解读ProveCommitSector/Aggregate

扇区是协议实验室官方存储的基本单元,目前协议支持封装32GiB和64GiB扇区。存储提供者获取订单数据后,会把数据分成一个个扇区,需要经过PreCommit1,PreCommit2,Commit1,Commit2四个阶段对扇区进行密封,才能形成有效算力。


我们将详细解读合约ProveCommitSector、ProveCommitSectorBatch。这是扇区预提交成功后,提交扇区证明信息生成算力,对应状态机中的状态如下:


合约解读--ProveCommitSector/Aggregate


1. ProveCommitSector


//1.1 入参

type ProveCommitSectorParams struct {
SectorNumber abi.SectorNumber
Proof []byte
}


SectorNumber为一个扇区的ID,以int64形式表示,Proof为扇区的零知识证明。


// 1.2 参数检查

· 扇区号必须小于int64最大值

· 扇区PreCommit证明的大小必须小于指定类型的大小,如32GiB V1_1扇区证明大小为1920

· PreCommit到当前时间的间距超过ProveCommit最大时延则跳过,其中ProveCommit最大时延V1扇区为1天+150Epoch,V1.1扇区为30天+150Epoch


//1.3 链上状态更新

·getVerifyInfo获取验证信息

·调用合约Power.SubmitPoRepForBulkVerify方法·提交证明,更新链上状态

·如果st.ProofValidationBatch不为空,则加载证明的批量集合,否则创建一个空的验证集合

·获取存储提供者的密封验证信息,在一个Epoch中每个存储提供者PreCommit的数量不能超过200

·将证明插入到批次中并刷新批次

·支付Gas费,OnSubmitVerifySeal的Gas数量为34721069


2. ProveCommitAggregate


//2.1 入参

type ProveCommitAggregateParams struct {
SectorNumbers bitfield.BitField
AggregateProof []byte
}

SectorNumbers使用bitfield表示,并通过RLE+编码压缩,减少了占用链上数据空间。


AggregateProof聚合了证明需要的信息,包括每个扇区的扇区号、随机数信息、CommR、CommD、密封类型、聚合类型和C2生成的零知识证明。


//2.2 参数检查

·聚合扇区数量大小必须位于[4,819]


·扇区聚合证明大小<=81960


·PreCommit到当前时间的间距超过ProveCommit最大时延则跳过,其中ProveCommit最大时延V1扇区为1天+150Epoch,V1.1扇区为30天+150Epoch


·确保每个扇区的sealProof相同


·请求市场合约,来从扇区交易中计算未密封扇区CommD作为扇区CID


·验证聚合密封的每个扇区CommR和CommD与PreCommit提交的信息是一致的


·验证扇区proof是有效的,对于每个precommit,如果交易ID存在,则激活市场合约激活交易,并记录需要替换数据的扇区。


//2.3 链上状态更新

将被替换扇区的到期时间设置为它的下一个deadline。


对于每个有效的PreCommit,确认扇区的过期时间超过180天,计算其对应的算力,存储质押和初始质押,以及替换数据扇区对应的质押和奖励,最后构建所有新的的扇区信息并提交到链上。


修改链上状态信息,放入新的扇区,删除PreCommited扇区,分配新的扇区deadlines,释放PreCommit的押金,增加初始质押,确认余额足以支付押金。


//2.4 密封扇区对应的算力

合约解读--ProveCommitSector/Aggregate

为了量化扇区中不同部分对网络共识的贡献,设置了如下几个参数:


扇区时空(SectorSpaceTime): 扇区的大小×承诺时长


交易权重(Deal Weight): 交易占用时空转换的算力,已验证客户交易的权重称为已验证交易权重,将大于常规交易权重


交易质量乘数(Sector Quality Multiplier):分别给承诺容量、常规交易和已验证交易乘数分别为10,10,100


根据代码可知,扇区质量(Sector Quality)=1 + 9*验证交易时空/扇区时空,常见的扇区质量大小如下:

合约解读--ProveCommitSector/Aggregate


最后提供的算力=扇区质量*扇区大小,经过PreCommitSector和PreCommitSectorBatch后,扇区质量会被计算出并存储在扇区信息中提交到链上。


//2.5 聚合证明费用

合约解读--ProveCommitSector/Aggregate


其中BatchBalancer为2nanoFIL,EstimatedSingleProofGasUsage为65733297,BatchDiscount为1/20。


当BaseFee


总结


算力与存储提供者的奖励息息相关,算力越高相同时间内获得的奖励便越多,所以密封算力是存储提供者服务过程中的关键任务之一。


在密封流程中,首先调用合约方法PreCommitSector/Batch将要密封的扇区信息提交到链上。


第二步便是调用合约方法ProveCommitSector/Aggregate,检查相应PreCommit扇区的状态,并验证这些扇区的复制证明是否有效,如果有效就会激活扇区交易,扇区被放入deadline,移除扇区的precommit状态,并生成算力。



展开阅读全文

页面更新:2024-03-21

标签:合约   乘数   间距   权重   押金   提供者   大小   状态   时空   参数   类型   质量   时间   数据   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top