mcpField
M
midnight-rpc

midnight-rpc

github.com/kali-decoderDevelopment18124 installsUpdated 1d ago
Repository

About midnight-rpc

A technical reference skill for developers connecting dApps, wallets, explorers, or services to Midnight nodes. It describes JSON-RPC methods for contract and ledger data, system information, and partnerchain operations.

Key features

  1. 01Read JSON-encoded or raw contract state
  2. 02Query ZSwap state and unclaimed rewards
  3. 03Check API and ledger versions
  4. 04Use standard Polkadot SDK RPC methods
  5. 05Access partnerchain consensus and finality data

Use cases

  1. 01Read contract state from a Midnight node
  2. 02Check node health and supported RPC methods
  3. 03Integrate partnerchain data into services

Install

Copy the command and run it in a terminal.

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

After installing, type/midnight-rpcin Claude Code to confirm it loaded.

Details

From the project README

RPC Interface

The Remote Procedure Call (RPC) layer lets external clients — dApps, wallets, explorers, services — interact with a running Midnight node over HTTP/HTTPS or WebSocket.

Midnight RPCs follow the JSON-RPC standard.

Client ↔ node flow

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
What RPC enables
  • Submitting transactions (state transitions)
  • Querying on-chain contract state
  • Fetching auxiliary data (off-chain values, metadata)

Core Midnight RPC methods

Custom methods focused on ledger state, contract state, and system information:

MethodPurpose
midnight_jsonContractStateJSON-encoded smart contract state
midnight_contractStateRaw binary-encoded contract state at a block
midnight_unclaimedAmountUnclaimed tokens/rewards for a beneficiary
midnight_zswapChainStateZSwap chain state for a contract
midnight_apiVersionsSupported RPC API versions (tooling compatibility)
midnight_ledgerVersionLedger version at a block
Method signatures (reference)
#[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>;

Most methods accept an optional at block hash; omit for latest block.

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 support

Midnight also exposes default Polkadot SDK methods, including:

MethodPurpose
system_healthNode health status
chain_getBlockFetch block by hash
state_getStorageRead storage at a key
rpc_methodsList all supported RPC endpoints

Call rpc_methods at any time for the full method list on your node.

Note: Some Midnight RPC methods may not appear in Polkadot JS Apps. See Polkadot SDK RPC docs for overlap; support varies by node version and configuration.

For application-level reads, many dApps prefer the Indexer GraphQL API — see midnight-indexer/.


Partnerchain RPCs

Midnight exposes Partnerchain-specific RPC methods for block producers and sidechain integration:

  • Query consensus signals
  • Relay finality information
  • Coordinate cross-chain operations

Security: block producers

Warning: Not all RPC methods are safe to expose on public or production nodes.

If you run a block-producing node:

RiskMitigation
Sensitive data leakageUse --rpc-methods Safe
External attack surfaceAvoid --rpc-external unless required
Performance abuseLimit exposed endpoints to your operational role
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

Align RPC configuration with your threat model and role (validator vs observer).


Related skills

  • midnight-onchain-logic/ — what state RPC methods read
  • midnight-indexer/ — GraphQL alternative for dApp data
  • midnight-transactions/ — submitting proof-based transactions via RPC

Comments

Markdown supported