Filecoin 解读|赢得PoST的是什么?
LotusPoSt的一部分已从竞选PoSt更改为两个新的PoSt,一个是winningPoSt,另一个是windowPoSt。
让我们先来谈谈winningPoSt。顾名思义,winningPoSt是获胜时的PoSt。所谓获胜就是获得区块权。
简单地说,winningPoSt是一个随机检查的扇区,该扇区中66条随机选择的Merkle路径可以是正确的。然后说说代码逻辑。从Lotus的代码来讲。这一切都从Lotus / miner / miner.go的Miner结构的mineOne函数的块开始。
func (m *Miner) mineOne(ctx context.Context, addr address.Address, base *MiningBase) (*types.BlockMsg, error) {mbi, err := m.api.MinerGetBaseInfo(ctx, addr, round, base.TipSet.Key())rand, err := m.api.ChainGetRandomness(ctx, base.TipSet.Key(), crypto.DomainSeparationTag_WinningPoStChallengeSeed, base.TipSet.Height()+base.NullRounds, nil)
prand := abi.PoStRandomness(rand)
postProof, err := m.epp.ComputeProof(ctx, mbi.Sectors, prand)
其中,MinerGetBaseInfo函数用于获取一些基本信息,包括需要提取的扇区信息。ComputeProof函数用于计算winningPoSt证明。
因为这些逻辑的特定实现是在rust-fil-proofs(即rust语言)中实现的。从防锈到防锈,许多接口被交叉:
仅介绍rust-fil-proofs提供的两个API函数,就不会介绍中间的接口。
在rust-fil-proofs / filecoin-proofs / src / constant.rs中定义了要挑战的扇区数和叶子总数:
pub const WINNING_POST_CHALLENGE_COUNT: usize = 66;
pub const WINNING_POST_SECTOR_COUNT: usize = 1;
也就是说,从有效扇区中提取一个扇区,并在该扇区上选择受挑战的66个叶节点。
generate_winning_post_sector_challenge函数实现部门的质询逻辑。核心逻辑点如何检查部门?具体逻辑是在:
fallback :: generate_sector_challenges函数中:
let mut hasher = Sha256::new();
hasher.input(AsRef::<[u8]>::as_ref(&prover_id));
hasher.input(AsRef::<[u8]>::as_ref(&randomness));
hasher.input(&n.to_le_bytes()[..]);let hash = hasher.result();let sector_challenge = LittleEndian::read_u64(&hash.as_ref()[..8]);
let sector_index = sector_challenge % sector_set_len;
简而言之,它是使用random_provider_id的random_information和该扇区的随机数来计算sha256的哈希值。计算结果和当前有限的扇区数是模数。即,sector_index是最终质询的扇区ID。
generate_winning_post检查由所选扇区组成的Merkle树(replica_r_last)上的叶节点。质询叶节点的计算逻辑是通过fallback :: generate_leaf_challenge函数实现的:
let mut hasher = Sha256::new();
hasher.input(AsRef::<[u8]>::as_ref(&randomness));
hasher.input(§or_id.to_le_bytes()[..]);
hasher.input(&leaf_challenge_index.to_le_bytes()[..]);
let hash = hasher.result();let leaf_challenge = LittleEndian::read_u64(&hash.as_ref()[..8]);let challenged_range_index = leaf_challenge % (pub_params.sector_size / NODE_SIZE as u64);
散列随机信息,扇区ID和质询叶编号。计算结果和叶总数为模。32G扇区有1G树叶。
零知识证明的计算部分可以在rust-fil-proofs / post / fallback目录中查看。
在防锈/后防/后备/circuit.rs中讨论扇区结构。这种结构是一个挑战。从synthesize函数可以看出:
// 1. Verify comm_r
let comm_r_last_num = num::AllocatedNum::alloc(cs.namespace(|| "comm_r_last"), || {
comm_r_last
.map(Into::into)
.ok_or_else(|| SynthesisError::AssignmentMissing)
})?;let comm_c_num = num::AllocatedNum::alloc(cs.namespace(|| "comm_c"), || {
comm_c
.map(Into::into)
.ok_or_else(|| SynthesisError::AssignmentMissing)
})?;let comm_r_num = num::AllocatedNum::alloc(cs.namespace(|| "comm_r"), || {
comm_r
.map(Into::into)
.ok_or_else(|| SynthesisError::AssignmentMissing)
})?;comm_r_num.inputize(cs.namespace(|| "comm_r_input"))?;
comm_r作为公共输入,其他comm_r_last和comm_c作为私有输入。
// 1. Verify H(Comm_C || comm_r_last) == comm_r
{
let hash_num =
cs.namespace(|| "H_comm_c_comm_r_last"),
&comm_c_num,
&comm_r_last_num,
)?;// Check actual equality
constraint::equal(
cs,
|| "enforce_comm_c_comm_r_last_hash_comm_r",
&comm_r_num,
&hash_num,
);
}
验证comm_r是由comm_c和comm_r_last计算得出的。
// 2. Verify Inclusion Paths for(i,(leaf,path))in leafs.iter().zip(paths.iter()).enumerate() {
PoRCircuit::
cs.namespace(|| format!("challenge_inclusion_{}", i)),
Root::Val(*leaf),
path.clone(),
Root::from_allocated::
true,
)?;
验证叶节点可以正确计算Merkle树的根。
Lotus PoSt包括两个部分:winningPoSt和windowPoSt。WinningPoSt是获得块权限时需要提供的PoSt证书。从所有有效扇区中提取一个扇区,并挑战该扇区上的66张叶子。
——End——
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。
-
FIL大涨,灰度入局,如何参与IPFS挖矿
2021-03-23 IPFS挖矿 -
【重磅】A股上市公司斥资5.8亿布局IPFS分布式存储项目
2021-03-17 IPFS -
IPFS官方@你 | 第125期周报
2021-03-08 IPFS -
IPFS周报124期:go-ipfs 0.8.0, 远程数据固定来了!
2021-02-24 IPFS -
最新消息 | Fleek在IPFS上存储和提取文件
2021-02-24 IPFS
更多 推荐专栏
- 吴说区块链
- 知名自媒体,作者曾获中国新闻奖。为您提供加密行业、科技公司独家可靠的信息与观点。
- 挖币网评测
- 挖币网专业测评
- 区块鲁班
- 元宇宙工程师——区块鲁班,是一个具备全球化服务能力的公司品牌。提供矿机采购、维修、测试、托管、运维、出口等一站式服务。我们与比特大陆、比特微、嘉楠国际、芯动科技等全球头部矿机生产厂家建立了良好的合作关系,共同开创矿机国际化服务标准,并携手在全球布局矿机服务中心,为全球加密货币行业参与者提供专业、高效、全面的解决方案。
- HashPool
- 多币种数字货币矿池,关注最新最有潜力币种 HashPool 链接每一个算力
- 巴比特资讯
- 巴比特是国内领先的区块链信息服务商,以价值投资为导向,为区块链创新者服务。 我们以论坛启锚远征,让资讯为瞭望景观,聚集区块链技术和应用弄潮儿。目前已发展成集资讯内容、线下活动、培训、孵化器、投资和区块链技术落地应用于一体的生态体平台。全网覆盖用户超100万人,遍及中国大陆、韩国,日本,美国,香港等国家和地区。