关于 midnight-onchain-logic
这项技能介绍 Midnight 的链上逻辑与状态模型,基于 Polkadot SDK 运行时和 FRAME pallet。它说明 pallet-midnight 如何处理带证明的账本交易,以及账本状态如何提交并供验证。
主要功能
- 01WASM 运行时与 FRAME pallet 概览
- 02Midnight 核心 pallet 的职责
- 03基于证明的账本交易处理
- 04Patricia-Merkle 状态存储
- 05公开与选择性披露的状态
适用场景
- 01了解 Midnight 链上逻辑的执行位置
- 02追踪 ZSwap 转账和合约操作
- 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 trie 中。
- 每个区块都会持久化对完整 Midnight Ledger 状态的承诺——不可篡改且可验证。
公开状态与账本状态
| 状态类型 | 所在位置 | 可见性 |
|---|---|---|
| Substrate 运行时存储 | Patricia-Merkle trie | 标准链上查询 |
| Midnight Ledger 承诺 | 按区块持久化 | 可验证的账本快照 |
| 合约账本字段 | 通过 Compact 中的 disclose() | 根据合约设计选择性公开 |
有关应用层隐私模式,请参阅 why-midnight/ 和 compact/。
相关技能
midnight-consensus/— AURA + GRANDPA 托盘midnight-transactions/— 交易池 → 运行时 → 提交生命周期midnight-storage/— ParityDB + trie 详情midnight-rpc/— 通过 RPC 查询合约和账本状态
评论
支持 Markdown