名称:午夜核心概念:协议 描述:当询问关于Kachina智能合约协议、Zswap代币转移、原子交换、屏蔽转移、报价、代币或Midnight中的私人交易机制时使用。
Midnight协议
Midnight使用两个基础协议:用于隐私保护智能合约的Kachina和用于屏蔽代币转移的Zswap。
协议选择
| 需求 | 协议 |
|---|---|
| 智能合约逻辑 | Kachina |
| 代币转移 | Zswap |
| 原子多方交换 | Zswap |
| 隐私计算 | Kachina |
| 屏蔽代币 | Zswap |
Kachina协议
Kachina在保持去中心化的同时,实现了保密的通用智能合约。
核心架构
┌─────────────────────────────────────────┐
│ 链上(公开) │
│ • 合约代码 │
│ • 公开状态 │
│ • Merkle根 │
└─────────────────────────────────────────┘
↑ ZK证明 ↑
┌─────────────────────────────────────────┐
│ 链下(私有) │
│ • 用户的私有输入 │
│ • 本地状态 │
│ • 见证数据 │
└─────────────────────────────────────────┘
双状态模型
| 状态类型 | 位置 | 可见性 |
|---|---|---|
| 公开状态 | 区块链 | 所有人 |
| 私有状态 | 用户机器 | 仅所有者 |
ZK证明桥接这些状态:在不泄露私有状态的情况下证明其某些属性。
Kachina工作原理
- 用户向合约提交命令
- 用户维护交互记录(查询+预期响应)
- ZK证明验证记录正确性
- 公开效果应用于区块链
关键特性
| 特性 | 优势 |
|---|---|
| 并发性 | 多个用户同时操作,无需阻塞 |
| 隐私性 | 私有状态从不离开用户机器 |
| 可组合性 | 合约通过公开状态交互 |
| 重排序 | 冲突交易被最优重排序 |
使用案例
- 具有私有余额的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- 多方原子交换