midnight-rpc について
DApp、ウォレット、ブロックエクスプローラー、サービスを Midnight ノードに接続する開発者向けの技術リファレンススキルです。コントラクトや台帳データ、システム情報、Partnerchain 操作の JSON-RPC メソッドを説明します。
主な機能
- 01JSON または生形式のコントラクト状態を取得
- 02ZSwap 状態と未請求報酬を照会
- 03API と台帳のバージョンを確認
- 04Polkadot SDK の標準 RPC メソッドを利用
- 05Partnerchain のコンセンサスとファイナリティ情報を取得
活用シーン
- 01Midnight ノードからコントラクト状態を読む
- 02ノードの健全性と対応 RPC メソッドを確認
- 03Partnerchain データをサービスに組み込む
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kali-decoder/ midnight-skills --skill midnight-rpcインストール後、Claude Code で/midnight-rpcを入力して読み込まれたか確認します。
詳細
RPC インターフェース
**リモートプロシージャコール(RPC)**層を使用すると、外部クライアント(dApp、ウォレット、エクスプローラー、サービス)が、HTTP/HTTPS または WebSocket 経由で稼働中の Midnight ノードとやり取りできます。
Midnight RPC は JSON-RPC 標準に準拠しています。
クライアント ↔ ノードのフロー
flowchart LR
subgraph Clients
DApp["dApp / wallet"]
Explorer["Block explorer"]
Svc["Backend service"]
end
subgraph Node["Midnight node"]
RPC["JSON-RPC layer"]
RT["Runtime / pallet-midnight"]
Store["State storage"]
end
DApp -->|HTTP / WSS| RPC
Explorer --> RPC
Svc --> RPC
RPC --> RT
RT --> Store
RPC で可能になること
- トランザクションの送信(状態遷移)
- オンチェーンのコントラクト状態の照会
- 補助データの取得(オフチェーンの値、メタデータ)
Midnight のコア RPC メソッド
台帳の状態、コントラクトの状態、システム情報に特化したカスタムメソッドです。
| メソッド | 目的 |
|---|---|
midnight_jsonContractState | JSON エンコードされたスマートコントラクトの状態 |
midnight_contractState | ブロック時点のバイナリーエンコードされたコントラクトの状態 |
midnight_unclaimedAmount | 受益者が未請求のトークン/報酬 |
midnight_zswapChainState | コントラクトの ZSwap チェーン状態 |
midnight_apiVersions | サポートされている RPC API バージョン(ツールとの互換性) |
midnight_ledgerVersion | ブロック時点の台帳バージョン |
メソッドのシグネチャ(リファレンス)
#[method(name = "midnight_jsonContractState")]
fn get_json_state(
&self,
contract_address: String,
at: Option<BlockHash>,
) -> Result<String, StateRpcError>;
#[method(name = "midnight_contractState")]
fn get_state(
&self,
contract_address: String,
at: Option<BlockHash>,
) -> Result<String, StateRpcError>;
#[method(name = "midnight_unclaimedAmount")]
fn get_unclaimed_amount(
&self,
beneficiary: String,
at: Option<BlockHash>,
) -> Result<u128, StateRpcError>;
#[method(name = "midnight_zswapChainState")]
fn get_zswap_chain_state(
&self,
contract_address: String,
at: Option<BlockHash>,
) -> Result<String, StateRpcError>;
#[method(name = "midnight_apiVersions")]
fn get_supported_api_versions(&self) -> RpcResult<Vec<u32>>;
#[method(name = "midnight_ledgerVersion")]
fn get_ledger_version(&self, at: Option<BlockHash>) -> Result<String, BlockRpcError>;
ほとんどのメソッドでは、ブロックハッシュ at を省略可能です。省略すると最新のブロックが使用されます。
flowchart TB
Q["Client query"] --> M{"Method type"}
M -->|Contract| CS["midnight_contractState / jsonContractState"]
M -->|ZSwap| ZS["midnight_zswapChainState"]
M -->|Rewards| UA["midnight_unclaimedAmount"]
M -->|Meta| LV["midnight_ledgerVersion / apiVersions"]
CS --> Block["Resolve at block hash or latest"]
ZS --> Block
UA --> Block
LV --> Block
Polkadot SDK の RPC サポート
Midnight は、次のような Polkadot SDK のデフォルトメソッドも公開しています。
| メソッド | 目的 |
|---|---|
system_health | ノードの健全性ステータス |
chain_getBlock | ハッシュでブロックを取得 |
state_getStorage | キーに対応するストレージを読み取り |
rpc_methods | サポートされているすべての RPC エンドポイントを一覧表示 |
ノードで利用可能なメソッドの全一覧は、いつでも rpc_methods を呼び出して確認できます。
注: 一部の Midnight RPC メソッドは Polkadot JS Apps に表示されない場合があります。共通するメソッドについては、Polkadot SDK RPC ドキュメントを参照してください。サポート状況はノードのバージョンと設定によって異なります。
アプリケーションレベルの読み取りには、多くの dApp が Indexer GraphQL API を選択します。midnight-indexer/ を参照してください。
Partnerchain RPC
Midnight は、ブロックプロデューサーやサイドチェーンとの統合に向けて、Partnerchain 固有の RPC メソッドを公開しています。
- コンセンサスシグナルの照会
- ファイナリティ情報の中継
- クロスチェーン操作の調整
セキュリティ:ブロックプロデューサー
警告: すべての RPC メソッドが、パブリックノードや本番ノードで公開しても安全とは限りません。
ブロック生成ノードを実行する場合:
| リスク | 緩和策 |
|---|---|
| 機密データの漏えい | --rpc-methods Safe を使用する |
| 外部からの攻撃対象領域 | 必要な場合を除き、--rpc-external を避ける |
| パフォーマンスの悪用 | 運用上の役割に必要なエンドポイントだけを公開する |
flowchart TD
Role{"Node role?"}
Role -->|Validator / block producer| Safe["--rpc-methods Safe<br/>No --rpc-external"]
Role -->|Observer / archive| Review["Review threat model<br/>May expose read-only RPC"]
Safe --> Audit["Audit rpc_methods list"]
Review --> Audit
RPC の設定は、脅威モデルと役割(バリデーターかオブザーバーか)に合わせてください。
関連スキル
midnight-onchain-logic/— RPC の状態メソッドが読み取る内容midnight-indexer/— dApp データ向けの GraphQL 代替手段midnight-transactions/— RPC 経由で証明ベースのトランザクションを送信する方法