世界
Worldは,他のエンティティを含むグローバル・エンティティである. Worldは,以下で構成されている:
- Iroha コンフィギュレーションパラメータ
- 登録された同級生
- 登録ドメイン
- 登録された 触発機
- 登録されている 役割
- 登録された 許可証の定義
- すべてのアカウントの許可トークン
- 実行時間の検証器の連鎖
ドメイン,ペア,またはロールが登録されている場合, World は (非) 登録 指示の対象である.
世界状態の見方 (WSV)
World State View は,現在のブロックチェーン状態の内存表示です. World,コミットされたブロックハッシュ,トランザクションインデックス,そして当代時代に選ばれたピアを含みます.完全なブロック用荷物は,変形可能な WSV データとして重複するのではなく,Kura から配信されます.
WSV は,クエリが読み取られ,ブロック実行が変異する状態である.それ自体には恒久的な真実の源ではない.恒久的な歴史はKuraに保存されている.そして WSV は, Kura ブロックから再構築するか,状態のスナップショットから読み込み,そして新しい Kura ブロックを再再生することによって捕らえることができる.
WSV の 痕跡
WSV は World オブジェクトよりも広い.実際には,以下のものが含まれます:
World:パラメータ,ペア,ドメイン,アカウント,資産, NFTs,役割,許可,トリガー,実行データ,およびその他の登録されたデータモデルオブジェクト- 約束されたブロックハッシュと最後の約束された高度
- 問い合わせや領収で使用されるトランザクションからブロックへの指数
- 合意によって使用された現在のおよび以前のコミットトポロジー
- 約束されたブロックから派生した内メモリインデックス,例えばデータ可用性コミットメント,受信カーサー,ピン意図,クエリプロジェクションマーカーなど
- 決算式ブロック実行に必要なランタイム設定スナップショット,例えば暗号化,ガバナンシング,パイプライン,コンテンツ,決済,および Nexus 設定
查询は通常,これらの構造の上に読みのみの StateView を受信する.ビューは查询実行のための一貫したスナップショットである;これは WSV の直接変異を許さない.
WSV の 変化 に つい て
WSV の変更は,実行される前に段階化されます.ブロック実行はブロックスケープ状態のオーバーレイを作成し,受け入れられたすべてのトランザクションは取引スケープ上のオーバーレイで指示を適用します.これらのトランザクションが同じブロックコンテキストで実行する際に誘発されたデータは起動します.ブロックのトランザクション効果後,タイムトリガーが評価されます.
コンセンサスがブロックを委ねた後,ピアは最初に Kura でコミットされたブロックを排列する.この排列ステップが失敗した場合, WSV は進んでおらず,コンセンサスループはブロックの役に立たない負荷を再試しまたは排列します.ブロックが Kura のキューに受け入れられると, Iroha は実行後のブロック効果を適用し,生成されたインデックスを更新し,ステートビューロックの下で段階的な WSV 変更を実行します.これは読者が部分的にコミットされたブロックを観察するのを防ぐ.
コンセンサス・クリティカルな規則は,同等のブロックから同じ WSV に到達する必要があります. WSV データをバイパスする指示に直接ローカル編集を行い,検証または再再生中に同等の意見が異なってきます.
スタートアップとリプレイ
起動時に, Iroha は最初に Kura を初期化し,保存されたブロック高度を学習します.その後,ステートスナップショットをロードしようとします. スナップショットが利用できない場合,またはリクアブルとしてスナップшотが拒否される場合は, Iroha が初期状態を作成し, Kura からコミットされたブロックを再現します.Kura 以降の瞬間撮影が有効である場合,欠落した高度範囲のみを再生されます.
リプレイは,保存された各ブロックを検証し,その高度のためのコミットリストを再構築し,ブロック効果を WSV に適用し,結果となる状態をコミットします.これは Kura が WSV の復元経路であり,スナップショットは全連鎖のリプレイを回避する最適化です.
Kura 保存
Kura は, Iroha の持続的なブロックストレージである. 署名されたブロックと復元メタデータを保存する. WSV の第2の変形複製を保存しない.
Kura ストレージはkura.store_dir でルーティングされます.そのルーツ内で,ブロックデータはレーンまたはセグメントに分けられます.セグメントの主要なファイルは:
| 経路 | 目的 |
|---|---|
blocks/<segment>/blocks.data | 連続した Norito 枠付きの署名ブロック用荷物. |
blocks/<segment>/blocks.index | 固定サイズ (start, length) は,マップブロックの高度を blocks.data のバイトに入力します. |
blocks/<segment>/blocks.hashes | スピード検索と起動認証のために ハッシュを高度でブロックします. |
blocks/<segment>/blocks.count.norito | ブロックインデックスエントリの安全性を記録する耐久的なコミットマーカー. |
blocks/<segment>/da_blocks/ | blocks.data の外に保持されたブロックの役に立たない負荷は,ディスク予算執行が古いボディをホットファイルから移動するときに. |
blocks/<segment>/pipeline/sidecars.noritoと sidecars.index | パイプライン復旧サイドカーは ブロックの高さによって鍵付けされます. |
blocks/<segment>/pipeline/roster_sidecars.noritoと roster_sidecars.index | ブロックシンクロンとリプレイで使用された近年のコンミットロスターサイドカー. |
merge_ledger/<segment>.log | 合併簿のエントリは,コミットブロックに並べられた. |
commit-rosters.norito | 最近のブロックに対するコミット証明書と検証チェックポイントを保持する. |
Kura は連鎖にコンパクトな内存ベクトルを保持する.各高度にはブロックハッシュと,オプションとしてブロックボディがあります.ジェネシスブロックはキャッシュで保存されていて,最新のkura.blocks_in_memory非ジェネシズブロックは自分の体をメモリに保存します.古いブロックボディはメモリから削除され,必要に応じて Kura ファイルから再充電されます.
初期化中に, strict モードはブロックの役に立たない負荷から保存されたブロックを検証し,必要に応じてハッシュファイルを書き直します. fast モードは保存されたハッシュ/インデックスメタデータから開始され,そのメタデータは不一致である場合,厳格な初期化に戻ります.Kura が破損した尾を検出した場合,最後の検証されたブロックまで貯蔵量を切り離します.
Kura は,バックグラウンドライターを通じて新しいブロックを書き込みます.ライターはブロックの役に立たない負荷,ハッシュ,インデックスエントリを追加し,設定した fsync ポリシーに従って耐久数値マーカーを進みます.Kura は,ディスク・予算執行が活発である場合,有効化および検索のためにハッシュとインデックスエントリを保持しながら,退職したセグメントを解除または古いブロックボディを da_blocks/ に追い出すことができます.