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(&sector_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树叶。 zk-SNARK电路 零知识证明的计算部分可以在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 = <Tree::Hasher as Hasher>::Function::hash2_circuit(? ? ? ? ? ? ? ?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::<Tree>::synthesize(? ? ? ?cs.namespace(|| format!("challenge_inclusion_{}", i)),? ? ? ?Root::Val(*leaf),? ? ? ?path.clone(),? ? ? ?Root::from_allocated::<CS>(comm_r_last_num.clone()),? ? ? ?true,? ?)?; 验证叶节点可以正确计算Merkle树的根。 摘? 要 Lotus PoSt包括两个部分:winningPoSt和windowPoSt。WinningPoSt是获得块权限时需要提供的PoSt证书。从所有有效扇区中提取一个扇区,并挑战该扇区上的66张叶子。 ——End—— 友情提示: 在星际视界(IPFSNEW)公众号回复关键字 1.回复“Filecoin”即可获得Filecoin项目中文版、英文版白皮书 2.回复“IPFS”即可获得IPFS项目中文版、英文版白皮书 编辑:星际视界IPFSNEWS Sue —- 编译者/作者:星际视界IPFSNEWS 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
Filecoin解读|赢得PoST的是什么?
2020-08-08 星际视界IPFSNEWS 来源:区块链网络
LOADING...
相关阅读:
- 没有规矩,不成方圆,PWE用制度来为数字经济护航2020-08-08
- 生日快乐Brendan Blumer-密码学家2020-08-08
- HBA公链|TikTok内容平台盈利难区块链分布式存储将带来解决方案2020-08-08
- 多省市出台关于区块链人才引进的计划2020-08-08
- 大饼:你们还想着我不停的往上涨?2020-08-08