mcpField
M
midnight-storage

midnight-storage

github.com/kali-decoderデータ・データベース18123 回インストール1 日前に更新
リポジトリ

midnight-storage について

Midnightのストレージ構成を解説するスキルです。ブロックチェーンの状態の編成、コミット、照会を調べる人向けに、ParityDB、Patricia-Merkle Trie、ストレージキーのハッシュ、クエリ経路を説明します。

主な機能

  1. 01ParityDBによる状態の永続化
  2. 02Patricia-Merkle Trieの状態コミットメント
  3. 03twoxhashによるストレージキー生成
  4. 04ブロックごとの状態コミット処理
  5. 05RPCとGraphQLのクエリ経路

活用シーン

  1. 01Midnightの状態永続化の理解
  2. 02状態ルートの計算方法の確認
  3. 03コントラクト状態の照会経路の特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kali-decoder/midnight-skills --skill midnight-storage

インストール後、Claude Code で/midnight-storageを入力して読み込まれたか確認します。

詳細

ストレージ

Midnight は Polkadot SDK(Substrate) 上に構築されており、デフォルトのデータベースバックエンドとして ParityDB を使用します。

ストレージスタック

flowchart TB
  subgraph Runtime["Runtime execution"]
    STF["State transition function (WASM)"]
    PM["pallet-midnight + other pallets"]
  end

  subgraph Trie["State layer"]
    MPT["Patricia-Merkle trie"]
    T2H["twoxhash — storage key generation"]
    MPT --- T2H
  end

  subgraph Persist["Persistence"]
    PDB["ParityDB — key-value store"]
  end

  STF --> PM
  PM --> MPT
  MPT --> PDB
  MPT --> Commit["State root commitment per block"]

ParityDB

ParityDB は、ブロックチェーンのワークロード向けに設計された高速なキー・バリューストアです。

  • すべてのオンチェーン状態を保存します。
  • Midnight を含む Substrate/Polkadot SDK チェーンのデフォルトバックエンドです。
  • ブロックのインポートと状態のコミット時に、高い書き込みスループットを実現するよう最適化されています。

パトリシア・マークル・トライ

トライは、状態コミットメントの基盤となるデータ構造です。

特性利点
マークル構造ブロックごとに改ざんを検知できる状態ルート
包含証明コントラクトの状態や残高などを効率的に検証
増分更新ブロックごとに変更されたパスのみを再計算

ランタイムパレット(pallet-midnight を含む)の正規台帳状態はこのトライに整理され、ParityDB を介して永続化されます。

flowchart LR
  BlockN["Block N state root"] --> Root["Trie root hash"]
  Root --> Leaf1["Storage item A"]
  Root --> Leaf2["Storage item B"]
  Root --> Leaf3["Contract state …"]
  Query["RPC / light client"] --> Proof["Merkle inclusion proof"]
  Proof --> Leaf2

twoxhash(ストレージキー)

twoxhash は、トライ内のストレージキーを生成します。

項目詳細
種類非暗号学的ハッシュ
用途内部での高速なキー・バリュー検索
特性高速で、衝突率が低い
用途外セキュリティが重要なハッシュ処理(Blake2-256 を使用)

twoxhash は、キーの導出ごとに暗号学的ハッシュを計算するコストをかけずに、マップ検索のトライ性能を大幅に向上させます。

ハッシュと署名の使い分けについては、midnight-cryptography/ を参照してください。


状態のコミットフロー

各ブロックでは、次の処理が行われます。

  1. ランタイムがトランザクションを実行し、パレットのストレージを更新します。
  2. 変更されたトライノードを計算し、状態ルートを導出します。
  3. Midnight Ledger コミットメントを、標準の Substrate 状態とともに永続化します(pallet-midnight)。
  4. ParityDB が、更新されたトライの基盤ストアを永続化します。
sequenceDiagram
  participant RT as Runtime
  participant Trie as Patricia-Merkle trie
  participant PM as pallet-midnight
  participant DB as ParityDB

  RT->>Trie: Apply storage writes (twoxhash keys)
  RT->>PM: Commit ledger state
  Trie->>Trie: Compute new state root
  PM->>DB: Persist ledger commitment
  Trie->>DB: Persist trie nodes

ストレージのクエリ

アクセス方法用途
state_getStorage(RPC)生のストレージキーの読み取り
midnight_contractState(RPC)コントラクト固有の状態
インデクサー GraphQLアプリケーションで使いやすいコントラクト/イベントのクエリ

関連スキル

  • midnight-onchain-logic/ — ストレージに書き込まれる内容
  • midnight-cryptography/ — Blake2-256 と twoxhash の違い
  • midnight-rpc/ — JSON-RPC を介した状態の読み取り
  • midnight-transactions/ — トランザクションによるストレージ更新の仕組み

コメント