Filecoin の解釈 | PoST の勝者は誰でしょうか?

Filecoin の解釈 | PoST の勝者は誰でしょうか?

LotusPoSt の一部が、キャンペーン PoSt から 2 つの新しい PoSt に変更されました。1 つはwinnerPoStで、もう 1 つは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 から Rust へ、多くのインターフェースが交差します:

rust-fil-proofs によって提供される 2 つの 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 関数内:

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]);
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 関数によって実装されます

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()[..]);
hash = hasher.result(); leaf_challenge = LittleEndian::read_u64(&hash.as_ref()[..8]); challenged_range_index = leaf_challenge % (pub_params.sector_size / NODE_SIZE as u64);

ランダム情報、セクター ID、チャレンジ リーフ番号をハッシュします。結果は葉の総数を法として計算されます。 32G セクターには 1G のリーフがあります。

zk-SNARK回路

ゼロ知識証明の計算部分は、rust-fil-proofs/post/fallback ディレクトリで確認できます。

rust/background/fallback/circuit.rs のセクター構造に関する議論。この構造は挑戦的です。合成関数から次のことがわかります。

// 1. comm_r を検証する
comm_r_last_num = num::AllocatedNum::alloc(cs.namespace(|| "comm_r_last"), || { とします。
comm_r_last
.map(Into::into)
.ok_or_else(|| 合成エラー::割り当て不足)
})?;let comm_c_num = num::AllocatedNum::alloc(cs.namespace(|| "comm_c"), || {
通信
.map(Into::into)
.ok_or_else(|| 合成エラー::割り当て不足)
})?;let comm_r_num = num::AllocatedNum::alloc(cs.namespace(|| "comm_r"), || {
通信者
.map(Into::into)
.ok_or_else(|| 合成エラー::割り当て不足)
})?;comm_r_num.inputize(cs.namespace(|| "comm_r_input"))?;

comm_r をパブリック入力として使用し、その他の comm_r_last と comm_c をプライベート入力として使用します。

// 1. H(Comm_C || comm_r_last) == comm_r を検証する
{
hash_num = とします::関数::hash2_circuit(
cs.namespace(|| "H_comm_c_comm_r_last"),
&通信番号、
&comm_r_last_num,
)?;// 実際の等価性をチェック
制約::等しい(
cs、
|| 「enforce_comm_c_comm_r_last_hash_comm_r」、
&通信番号,
&ハッシュ番号,
);
}

comm_r が comm_c と comm_r_last から計算されていることを確認します。

// 2. 包含パスを検証する for(i,(leaf,path))in leafs.iter().zip(paths.iter()).enumerate() {
PoR回路:: ::合成(
cs.namespace(|| フォーマット!("challenge_inclusion_{}", i)),
ルート::Val(*リーフ)、
パス.clone()、
ルート::from_allocated:: (comm_r_last_num.clone())、
真実、
)?;

リーフ ノードが Merkle ツリーのルートを正しく計算できることを確認します。

抽象的な

Lotus PoSt は、 winningPoSt と windowPoSt の2 つの部分で構成されます。 WinningPoSt は、ブロック権限を取得するときに提供する必要がある PoSt 証明書です。すべての有効なセクターからセクターを抽出し、そのセクターの 66 枚の葉に挑戦します。

- 終わり -


<<:  425万フィルの報酬はいつ開始されますか?当局者はこう語った。「起動時間についてはマイナーが最終決定権を持つ!」

>>:  [Filecoinに関する100の質問と回答(写真付き)] 質問27:Tipsetとは何ですか?

推薦する

マウントゴックス元CEOが刑務所から釈放され、70ポンド減量し、警察に供述書に署名すると噂されている

日本のメディア報道によると、悪名高いマーク・カルプレス氏(マウントゴックス取引所のCEO)が昨日保釈...

Liandaodaoライブルーム丨韓国初のWeb 3.0 Foundation Grantプロジェクト標準との対話

2021年4月28日夜20時、Liandaodaoライブ放送室のビッグネーム共有セッションでは、St...

Google、6月から暗号通貨とICOの広告を禁止へ

検索エンジン大手のグーグルは今年6月に、暗号通貨関連の広告の禁止を含む金融商品戦略を変更する予定だ。...

興味深いアニメーション: BSN はどのようなグローバル ブロックチェーン インフラストラクチャ ネットワークを構築しているのでしょうか?

ブロックチェーン サービス ネットワーク (BSN) は、国家情報センターによって開発および設計され...

傾向は良好で、市場はさらに回復しています | 2019年3月の鉱業収益レポート

このレポートでは、主に2019年3月1日から3月31日までのデジタル通貨市場の変化の簡単な分析に基づ...

コインゾーントレンド: 今週のビッグデータに基づくビットコインの価格動向 (2017-01-06)

ロング・キリング・ロング市場は終了し、中期トレンドはまだ分からない1. 市場動向<br/>...

ビジネス、群れ、そして専制政治について - ブロックサイズ拡大をめぐる戦い

ビジネスを行う際に、考え方の流派による区別はありません。世の中には、お金を稼ぐビジネスマンと稼げない...

ほとんどのビットコインプラットフォームは DDoS 攻撃に直面しています。ヤピゾンは約3,800ビットコインを失う

Golden Finance News -隠されたビットコインプラットフォームは、常にハッカーやサイ...

Plutusクラウドファンディングは、POS端末を通じて携帯電話でビットコインやイーサリアムの支払いを行い、9日間で100万ドル以上を調達した。

タップ&ペイの非接触型暗号通貨決済ソリューションであるPlutusは、10日以内に100万ドルを超え...

Digix は物理的な金をデジタル化し、イーサリアムベースのトークンを発行します

Ethereum は、チューリング完全なブロックチェーン プラットフォームの新世代です。イーサリアム...

違法行為はもはやビットコインの主な用途ではない、と調査で判明

クレイジーな解説:英国、ドイツ、米国の大学は、ビットコイン取引の主な参加者を4つのカテゴリーに分類し...

ブロックチェーンは世界を席巻し、伝統的な金融の基本技術を覆している

ブロックチェーン: 伝統的な金融を覆す基礎技術概要: テクノロジーは世界を変えています。 FinTe...

ボラティリティの低下に伴い仮想通貨の売りが一服し、ビットコインは4万ドルで抵抗に直面

火曜日、市場のボラティリティが沈静化したため、ほとんどの暗号通貨は安定した。マクロ経済と地政学的な不...

最初のビットコインジャンク債が発行されたばかりで、連邦準備制度理事会はすでに少量を購入している可能性がある。

原題:「顔を平手打ちせざるを得ない!初のビットコインジャンク債が発行されたばかりで、連邦準備制度理事...

分析:4月が6万ドルで終了した場合、39億ドルのビットコインオプションの満期は「目立たない」ものになる

4月14日、ビットコインの価格は64,900ドルでピークに達し、その後27%の調整が起こり、ビットコ...