okx

赢得PoST的是什么- 解读Filecoin

时间:2023-08-12|浏览:171

LotusPoSt的一部分已从竞选PoSt更改为两个新的PoSt,一个是winningPoSt,另一个是windowPoSt。

让我们先来谈谈winningPoSt。顾名思义,winningPoSt是获胜时的PoSt。所谓获胜就是获得区块权。

简单地说,winningPoSt是一个随机检查的扇区,该扇区中66条随机选择的Merkle路径可以是正确的。然后说说代码逻辑。从Lotus的代码来讲。这一切都从Lotus/miner/miner.go的Miner结构的mineOne函数的块开始。

func(m*Miner)mineOne(ctxcontext.Context,addraddress.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中定义了要挑战的扇区数和叶子总数:

pubconstWINNING_POST_CHALLENGE_COUNT:usize=66;pubconstWINNING_POST_SECTOR_COUNT:usize=1;

也就是说,从有效扇区中提取一个扇区,并在该扇区上选择受挑战的66个叶节点。

面临挑战的行业选择逻辑

generate_winning_post_sector_challenge函数实现部门的质询逻辑。核心逻辑点如何检查部门?具体逻辑是在:

fallback::generate_sector_challenges函数中:

letmuthasher=Sha256::new;hasher.input(AsRef::<[u8]>::as_ref(&prover_id));hasher.input(AsRef::<[u8]>::as_ref(&randomness));hasher.input(&n.to_le_bytes[..]);lethash=hasher.result;letsector_challenge=LittleEndian::read_u64(&hash.as_ref[..8]);letsector_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函数实现的:

letmuthasher=Sha256::new;hasher.input(AsRef::<[u8]>::as_ref(&randomness));hasher.input(&sector_id.to_le_bytes[..]);hasher.input(&leaf_challenge_index.to_le_bytes[..]);lethash=hasher.result;letleaf_challenge=LittleEndian::read_u64(&hash.as_ref[..8]);letchallenged_range_index=leaf_challenge%(pub_params.sector_size/NODE_SIZEasu64);

散列随机信息,扇区ID和质询叶编号。计算结果和叶总数为模。32G扇区有1G树叶。

zk-SNARK电路

零知识证明的计算部分可以在rust-fil-proofs/post/fallback目录中查看。

在防锈/后防/后备/circuit.rs中讨论扇区结构。这种结构是一个挑战。从synthesize函数可以看出:

//1.Verifycomm_rletcomm_r_last_num=num::AllocatedNum::alloc(cs.namespace(||"comm_r_last"),||{comm_r_last.map(Into::into).ok_or_else(||SynthesisError::AssignmentMissing)})?;letcomm_c_num=num::AllocatedNum::alloc(cs.namespace(||"comm_c"),||{comm_c.map(Into::into).ok_or_else(||SynthesisError::AssignmentMissing)})?;letcomm_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.VerifyH(Comm_C||comm_r_last)==comm_r{lethash_num=::Function::hash2_circuit(cs.namespace(||"H_comm_c_comm_r_last"),&comm_c_num,&comm_r_last_num,)?;//Checkactualequalityconstraint::equal(cs,||"enforce_comm_c_comm_r_last_hash_comm_r",&comm_r_num,&hash_num,);}

验证comm_r是由comm_c和comm_r_last计算得出的。

//2.VerifyInclusionPathsfor(i,(leaf,path))inleafs.iter.zip(paths.iter).enumerate{PoRCircuit::::synthesize(cs.namespace(||format!("challenge_inclusion_{}",i)),Root::Val(*leaf),path.clone,Root::from_allocated::(comm_r_last_num.clone),true,)?;

验证叶节点可以正确计算Merkle树的根。

摘要

LotusPoSt包括两个部分:winningPoSt和windowPoSt。WinningPoSt是获得块权限时需要提供的PoSt证书。从所有有效扇区中提取一个扇区,并挑战该扇区上的66张叶子。

——End——

友情提示:

在星际视界(IPFSNEW)公众号回复关键字

1.回复"Filecoin"即可获得Filecoin项目中文版、英文版白皮书

2.回复"IPFS"即可获得IPFS项目中文版、英文版白皮书

编辑:星际视界IPFSNEWSSue

« 上一条| 下一条 »
区块链交流群
数藏交流群

合作伙伴

币圈官网 去玩呗SPA 数字财经 百科书库 币爸爸 减肥瘦身吧 币圈论坛 谈股票 金色币圈 趣玩币 借春秋 宠物丫 借春秋财经 玩合约 佩佩蛙官网 趣开心资讯 爱网站 代特币圈 百悦米 币圈交流群 今日黄金 玩票票财经 茶百科 起名取名网 天天财富 培训资讯网 美白没斑啦 數字黃金 兼职信息网 聚币网 装修装饰网 宝宝起名 币圈ICO官网 免费电影 黄金行情 周公解梦 秒懂域名 二手域名 妈妈知道 元宇宙Web 旅游资讯网 皮卡丘资讯 谷歌留痕 非小号行情
在区块链世界中,智能合约不仅是代码的信任,更是商业的革命。通过了解其在供应链、版权保护等领域的应用,您将真正体验到智能合约的无限可能性
区块链世界GxPiKaQiu.com ©2020-2024版权所有 桂ICP备16002597号-2