midnight-transactions について
Midnightネットワークでのトランザクション処理を解説する技術スキルです。dApp開発者やノード運用者向けに、証明ベースの形式、プール検査、ランタイム実行、ファイナリティを説明します。
主な機能
- 01Midnightのトランザクションライフサイクル概要
- 02証明ベースの検証モデル
- 03プールとランタイムの検査の違い
- 04デプロイ、呼び出し、ZSwapのトランザクション種別
- 05送信とファイナリティの段階
活用シーン
- 01dAppからのトランザクション送信方法の把握
- 02プール検査と証明検証の区別
- 03コントラクトまたはZSwapの状態更新の追跡
- 04ノード運用におけるトランザクション処理の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ kali-decoder/ midnight-skills --skill midnight-transactionsインストール後、Claude Code で/midnight-transactionsを入力して読み込まれたか確認します。
詳細
トランザクション
Midnight ノードは標準の Polkadot SDK トランザクション形式をサポートしていますが、Substrate スタイルのデフォルトの署名付きエクストリンシックは、実際にはあまり使われません。Midnight は、Midnight Ledger と密接に連携した証明ベースの検証モデルを採用しています。
ライフサイクルの概要
flowchart TB
Build["Build transaction + ZK proof<br/>(wallet / SDK)"]
Submit["Submit to node RPC / P2P"]
Pool["Transaction pool<br/>well-formedness check"]
Block["Included in block"]
Verify["Runtime verifies embedded proof"]
Execute["Execute state transition"]
Commit["Commit to trie + ledger commitment"]
Build --> Submit --> Pool
Pool -->|Valid structure| Block
Pool -->|Reject| Reject["Dropped from pool"]
Block --> Verify
Verify -->|Invalid proof| Fail["Transaction fails"]
Verify -->|Valid| Execute --> Commit
証明ベースのモデル
Midnight のトランザクションのほとんどは署名なしで、Midnight Ledger 形式に従います。
| 従来のチェーン | Midnight |
|---|---|
| 署名によって操作を承認 | 暗号学的証明によって有効性を証明 |
| 公開された署名者のアイデンティティ | 機密データはオフチェーンまたは証明内に保持 |
| 標準的なエクストリンシック形式 | Ledger 固有のトランザクションエンベロープ |
証明により、ネットワークは機密データや生の署名を直接公開することなく、状態遷移を検証できます。
トランザクションの種類
- コントラクトのデプロイ
- コントラクトの呼び出し(回路呼び出し)
- ZSwap アセットの転送
処理段階
1. 送信
クライアント(ウォレット、SDK、dApp)がノードの RPC にトランザクションを送信するか、P2P ゴシップ経由で伝播させます。
2. トランザクションプールでの検証
プールは形式が正しいことを確認します。
- ランタイムと Ledger の仕様に基づく構造上の要件
- 論理的な事前条件(形式、サイズ、基本的な有効性)
- この段階ではまだ証明全体の検証は行いません(ブロックの実行時に行われます)
sequenceDiagram
participant Client
participant Pool as Tx pool
participant Block as Block author
participant RT as Runtime (pallet-midnight)
Client->>Pool: Submit unsigned proof tx
Pool->>Pool: Well-formedness validation
alt Invalid
Pool-->>Client: Reject
else Valid
Pool->>Block: Candidate for inclusion
Block->>RT: Execute in block
RT->>RT: Full proof verification
RT->>RT: State transition + commit
end
3. ブロックへの包含
ブロックプロデューサー(AURA バリデーター)がトランザクションを新しいブロックに含めます。
4. ランタイムでの検証と実行
pallet-midnight:
- 埋め込まれた暗号学的証明を完全に検証します(ネイティブライブラリを使用)。
- 有効な場合、対応する状態遷移を実行します。
- 更新された状態をオンチェーンストレージにコミットします。
5. ファイナリティ
ブロックは包含後、GRANDPA によって非同期にファイナライズされる場合があります。
比較:プールのチェックとランタイムのチェック
| チェック | 場所 | 内容 |
|---|---|---|
| 形式が正しいこと | トランザクションプール | 構造、基本的な有効性 |
| 証明の検証 | ランタイム(pallet-midnight) | 暗号学的な完全検証 |
| 状態遷移 | ランタイム | ZSwap/コントラクト状態の更新 |
| 永続化 | ストレージレイヤー | トライ+Ledger コミットメント |
tx の構築と送信(dApp のコンテキスト)
アプリケーション開発者向け:
| レイヤー | スキル |
|---|---|
| tx の証明と送信 | midnight-js/, 1am-wallet/ |
| コントラクトロジック | compact/ |
| 結果の読み取り | midnight-indexer/, midnight-rpc/ |
ノードオペレーターは、プールサイズ、ブロック制限、RPC の送信エンドポイントに注意します。
関連スキル
midnight-onchain-logic/—pallet-midnightの実行midnight-storage/— コミットが永続化される仕組みmidnight-consensus/— ブロックに tx を含める主体midnight-rpc/— 送信と状態照会のエンドポイントcompact/— コントラクトレベルで証明される内容
コメント
Markdown 対応