midnight-onchain-logic について
Polkadot SDKランタイムとFRAMEパレットに基づく、Midnightのオンチェーンロジックと状態モデルを解説するスキルです。pallet-midnightによる証明付き台帳トランザクションの処理と、台帳状態のコミットおよび検証方法を説明します。
主な機能
- 01WASMランタイムとFRAMEパレットの概要
- 02Midnight主要パレットの役割
- 03証明付き台帳トランザクションの処理
- 04Patricia-Merkleによる状態保存
- 05公開状態と選択的に開示される状態
活用シーン
- 01Midnightのオンチェーンロジックの実行場所を理解
- 02ZSwap送金とコントラクト操作の追跡
- 03台帳状態がブロックごとにコミットされる仕組みの把握
- 04ランタイムストレージと台帳状態の区別
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ kali-decoder/ midnight-skills --skill midnight-onchain-logicインストール後、Claude Code で/midnight-onchain-logicを入力して読み込まれたか確認します。
詳細
オンチェーンのロジックと状態
Midnight ノードは標準的な Polkadot SDK モデルに従います。ネイティブのプリコンパイルを除くコアロジックは WebAssembly(WASM) にコンパイルされ、ランタイム を構成します。ランタイムは、すべてのノードで同一に実行される状態遷移関数です。
ランタイムアーキテクチャ
flowchart TB
subgraph Runtime["WASM Runtime"]
direction TB
PA["pallet-aura"]
PG["pallet-grandpa"]
PS["pallet-partnerchains-session"]
PVM["pallet_session_validator_management"]
PM["pallet-midnight ★"]
Other["Other FRAME pallets"]
end
Block["Incoming block + extrinsics"] --> Runtime
Runtime --> Trie["Patricia-Merkle trie commit"]
Trie --> DB["ParityDB persistence"]
PM --> Ledger["Midnight Ledger state commitment"]
FRAME パレット
各 FRAME パレット はオンチェーンロジックの領域をカプセル化し、次の要素を定義できます。
- ストレージ(マップ、マルチマップ、リスト、値)
- イベント
- ディスパッチ可能な関数(トランザクション)
- オフチェーンワーカー
- フック
- ホスト公開関数
- RPC メソッド
このモジュール設計はスマートコントラクトのフレームワークと考え方が似ていますが、ロジックは 事前にコンパイル され、チェーンレベルで管理 されます。
Midnight の主要なパレット
| パレット | 役割 |
|---|---|
pallet-aura | AURA によるブロック生成 |
pallet-grandpa | GRANDPA によるファイナリティ |
pallet-partnerchains-session | Partnerchain コンテキストでのセッションローテーション |
pallet_session_validator_management | バリデーターセットの調整 |
pallet-midnight | プライバシーを保護するコアトランザクションロジック |
pallet-midnight:台帳の状態機械
pallet-midnight は内部で管理され、Midnight Ledger の状態機械をカプセル化します。
sequenceDiagram
participant Tx as Ledger transaction
participant Pool as Transaction pool
participant PM as pallet-midnight
participant Lib as Native proof libraries
participant State as On-chain storage
Tx->>Pool: Submit (unsigned, proof-embedded)
Pool->>Pool: Well-formedness check
Pool->>PM: Included in block
PM->>Lib: Verify cryptographic proof
Lib-->>PM: Valid / invalid
PM->>State: Execute state transition
State->>State: Commit trie + ledger commitment
処理対象
- ZSwap の資産移転
- コントラクト操作(デプロイ、呼び出し)
- Midnight Ledger 形式の特殊なトランザクション
検証モデル
- 台帳トランザクションには、従来の署名ベースのディスパッチを 使用しません。
- 各トランザクションには、有効性を証明する 暗号学的証明 が含まれます。
- ネイティブライブラリが証明を検証し、対応する状態遷移を実行します。
状態コミットメント
実行後:
- 新しい状態がオンチェーンにコミットされます。
- 正規の台帳状態は、キーバリューデータベースを基盤とする Patricia-Merkle トライ に格納されます。
- Midnight Ledger の全状態に対するコミットメント がブロックごとに永続化されます。改ざんが不可能で、検証可能です。
パブリック状態と台帳状態
| 状態の種類 | 保存場所 | 可視性 |
|---|---|---|
| Substrate ランタイムストレージ | Patricia-Merkle トライ | 標準的なオンチェーンクエリ |
| Midnight Ledger コミットメント | ブロックごとに永続化 | 台帳の検証可能なスナップショット |
| コントラクトの台帳フィールド | Compact の disclose() 経由 | コントラクト設計に応じて選択的に公開 |
アプリケーションレベルのプライバシーパターンについては、why-midnight/ と compact/ を参照してください。
関連スキル
midnight-consensus/— AURA および GRANDPA パレットmidnight-transactions/— トランザクションプール → ランタイム → コミットのライフサイクルmidnight-storage/— ParityDB とトライの詳細midnight-rpc/— RPC によるコントラクト状態と台帳状態のクエリ
コメント
Markdown 対応