午夜协议文档Skill midnight-core-concepts:protocols

本技能提供Midnight区块链平台核心协议的详细中文技术文档,涵盖Kachina隐私智能合约协议和Zswap屏蔽代币转移协议。内容包括协议架构、工作原理、使用案例、交易结构、原子交换机制及实际应用示例。关键词:Midnight协议、Kachina智能合约、Zswap代币转移、隐私区块链、零知识证明、原子交换、屏蔽交易、区块链隐私技术、ZK-Rollup、去中心化金融。

智能合约 0 次安装 10 次浏览 更新于 2/26/2026

名称:午夜核心概念:协议 描述:当询问关于Kachina智能合约协议、Zswap代币转移、原子交换、屏蔽转移、报价、代币或Midnight中的私人交易机制时使用。

Midnight协议

Midnight使用两个基础协议:用于隐私保护智能合约的Kachina和用于屏蔽代币转移的Zswap

协议选择

需求 协议
智能合约逻辑 Kachina
代币转移 Zswap
原子多方交换 Zswap
隐私计算 Kachina
屏蔽代币 Zswap

Kachina协议

Kachina在保持去中心化的同时,实现了保密的通用智能合约。

核心架构

┌─────────────────────────────────────────┐
│           链上(公开)                  │
│  • 合约代码                            │
│  • 公开状态                            │
│  • Merkle根                            │
└─────────────────────────────────────────┘
              ↑ ZK证明 ↑
┌─────────────────────────────────────────┐
│           链下(私有)                  │
│  • 用户的私有输入                      │
│  • 本地状态                            │
│  • 见证数据                            │
└─────────────────────────────────────────┘

双状态模型

状态类型 位置 可见性
公开状态 区块链 所有人
私有状态 用户机器 仅所有者

ZK证明桥接这些状态:在不泄露私有状态的情况下证明其某些属性。

Kachina工作原理

  1. 用户向合约提交命令
  2. 用户维护交互记录(查询+预期响应)
  3. ZK证明验证记录正确性
  4. 公开效果应用于区块链

关键特性

特性 优势
并发性 多个用户同时操作,无需阻塞
隐私性 私有状态从不离开用户机器
可组合性 合约通过公开状态交互
重排序 冲突交易被最优重排序

使用案例

  • 具有私有余额的DeFi协议
  • 包含机密数据的供应链
  • 保护患者隐私的医疗保健
  • 任何混合公开和私有数据的计算

Zswap协议

Zswap是基于Zerocash的屏蔽代币机制,用于保密原子交换。

核心概念

Zswap报价 = 输入 + 输出 + 临时 + 余额
  • 输入:正在花费的代币(无效符)
  • 输出:正在创建的新代币(承诺)
  • 临时:在同一交易中创建并花费的代币
  • 余额:每种代币类型的净值变化

交易隐私

隐藏 可见
发送者 交易发生
接收者 证明有效性
金额 费用支付
代币类型(可隐藏) 无效符(不可链接)

报价结构

报价 {
  输入: [
    { 无效符, 类型_价值_承诺, merkle证明, zk证明 }
  ],
  输出: [
    { 承诺, 类型_价值_承诺, 可选合约, 可选密文, zk证明 }
  ],
  临时: [...],
  余额: { 代币类型 → 价值 }
}

原子交换

Zswap支持多方原子交换:

参与方A:报价10个TokenX
参与方B:报价5个TokenY
            ↓
        链下合并
            ↓
    单个原子交易
    (要么都发生,要么都不发生)

合并规则

如果至少一个交易具有空的合约调用部分,则两个交易可以合并。合并交易组合:

  • 所有输入(花费的代币)
  • 所有输出(创建的代币)
  • 平衡的价值向量

与合约集成

合约通过Zswap发行自定义代币:

// 代币类型 = 哈希(合约地址, 域分隔符)
// 合约可以通过Zswap操作铸造/销毁代币

Zswap输出

创建新代币:

输出 = {
  承诺: Pedersen(类型, 价值, 所有者, 随机性),
  类型_价值_承诺: Pedersen(类型, 价值),
  合约地址: 可选,  // 用于合约目标代币
  密文: 可选,        // 为接收者加密
  zk证明: 有效性证明
}

Zswap输入

花费现有代币:

输入 = {
  无效符: 哈希(承诺, 所有者秘密),
  类型_价值_承诺: Pedersen(类型, 价值),
  合约地址: 可选,
  merkle证明: 到承诺的路径,
  zk证明: 有效性证明
}

关键:无效符无法链接到原始承诺。

协议交互

┌──────────────────────────────────────────┐
│              交易                        │
├──────────────────────────────────────────┤
│  Zswap部分        │  合约部分           │
│  • 保证报价       │  • 合约调用         │
│  • 可失败报价     │  • ZK证明           │
│  (代币转移)     │  (状态变更)       │
└──────────────────────────────────────────┘

交易结合了Zswap(价值转移)和Kachina(计算)。

实际应用

简单转移

1. 创建Zswap报价:
   - 输入:您的代币(无效符+证明)
   - 输出:接收者的新代币(承诺)
   - 余额:必须净值为零(减去费用)
2. 提交交易

原子交换

1. 参与方A创建部分报价:-10 TokenX
2. 参与方B创建部分报价:-5 TokenY, +10 TokenX
3. 合并报价(平衡)
4. 提交单个交易
5. 两个转移原子执行

合约+转移

1. Zswap报价移动代币
2. 合约调用更新状态
3. 两者加密绑定
4. 原子执行

参考资料

详细技术信息:

  • 参考资料/kachina深度解析.md - UC安全模型,记录验证
  • 参考资料/zswap内部机制.md - Pedersen承诺,报价构建

示例

工作模式:

  • 示例/基础转移.md - 简单屏蔽转移
  • 示例/原子交换.md - 多方原子交换