mcpField
M
midnight-rpc

midnight-rpc

github.com/kali-decoder开发18124 次安装1 天前更新
代码仓库

关于 midnight-rpc

供开发者将 DApp、钱包、区块浏览器或服务连接到 Midnight 节点的技术参考技能,介绍读取合约和账本数据、系统信息及 Partnerchain 操作的 JSON-RPC 方法。

主要功能

  1. 01读取 JSON 编码或原始合约状态
  2. 02查询 ZSwap 状态和未领取奖励
  3. 03检查 API 与账本版本
  4. 04使用 Polkadot SDK 标准 RPC 方法
  5. 05获取 Partnerchain 共识与最终性数据

适用场景

  1. 01从 Midnight 节点读取合约状态
  2. 02检查节点健康情况和支持的 RPC 方法
  3. 03将 Partnerchain 数据集成到服务中

安装

复制下面的命令,在终端中运行。

$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_jsonContractStateJSON 编码的智能合约状态
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 提交基于证明的交易

评论

支持 Markdown