完整文档页面(中文翻译)。文末附有来源说明。

阅读英文版

appdevdeep-divesexternal-signing

外部签名

使用外部加密密钥签署 Canton 交易——概述、入网与提交。

外部签名

你将学到什么

本系列教程介绍如何:

  • 使用 Ledger API 以外部密钥入网 Party 并签署交易
  • 使用 Ledger API 入网多方托管的外部 Party
  • 使用外部签名创建合约
  • 使用外部签名在合约上 exercise choice

进阶场景可参考 Admin API 管理 Party 或用外部签名提交更通用的拓扑交易:

  • 使用 Admin API 入网外部 Party
  • 构建、签署并提交拓扑交易

背景

Canton 账本状态由 Party 拥有的合约 定义。每份合约规定各方单方面变更共享账本的权利。从 Party 视角,关键活动是 发起交易验证交易

Party 是账本上的逻辑参与者,其链上表示与状态管理委托给一个或多个所选 验证者。因 Canton 隐私特性,只有这些验证者掌握 Party 拥有的全部合约,因而只有它们能权威地验证并确认影响该 Party 合约的交易。

交易只能涉及当前正被托管的 Party;引用无效 Party 的交易会被系统拒绝。

拓扑与身份

Party、验证者与同步器在 Canton 中的身份表示为 唯一标识符,每个标识符为名称与公钥指纹对 <prefix>::<fingerprint>,详见拓扑管理概述。公钥用于最终验证与身份相关的授权。

Party 如何设置由一组拓扑交易定义。这些交易须由所有受影响 Party 与验证者签署并提交到账本。全部拓扑交易之和定义 拓扑状态——各方对 Party、密钥、验证者与包的共享认知。

拓扑状态可演进。Party 不绑定初始配置;跨节点复制 Party 是验证者运营方之间的运维流程,不在本节讨论。

托管关系

设置 Party 须与一个或多个验证者建立 托管关系,通过名为 party to participant mapping 的拓扑交易表达,须由 Party 与相关验证者签署。托管关系中,Party 定义用于授权影响其合约的交易的私钥;该私钥可由用户管理,也可将签署委托给验证者。据此区分两类托管:

  • 外部 Party:授权私钥由 Party 用户(终端钱包或后端应用)持有并操作。
  • 内部 Party:验证者密钥代表 Party 授权交易,用户通过 Ledger API 上的 JWT 认证。

内部 Party 运维更简单,无需额外保管私钥,但最终需信任验证者不会滥用私钥授权交易。Party 与 participant 的托管关系通过三类验证者权限定义:

  • Submission:验证者签名密钥用于授权交易
  • Confirmation:验证者签名密钥仅用于确认交易
  • Observation:验证者仅获知并验证状态,无需确认

授予 Submission 即该 Party 为内部 Party。若仅授予 ConfirmationObservation,则为外部 Party,须用额外拓扑交易 party to key mapping 定义授权密钥。

请继续下一教程了解如何用 Ledger API 入网外部 Party。内部 Party 见 party management 文档。

多方托管 Party

为降低对单一验证者的完全信任,Party 可配置托管关系,要求若干验证者批准交易后才视为有效。这又划分部署维度:

  • 单托管 Party:仅由一个验证者托管,最简单,适用于 Party 所有者完全信任该验证者。
  • 多方托管 Party:由多个验证者托管,通过分散信任提升安全与可用性。

请按教程学习如何用 Ledger API 设置多方托管 Party。

概括而言,Party 要使用账本须定义以下拓扑状态:

  • Party 名称及其用于授权交易的签名密钥
  • 哪些验证者以何种权限与阈值托管该 Party
  • 验证拓扑交易签名所需的命名空间委托

托管选择对 Party 的安全与可用性影响重大,请参阅 party trust model 中的信任假设。

通过 Admin API 管理拓扑

拓扑系统灵活强大但也复杂。需多方独立签署时,构建、签署与提交流程可能繁琐。拓扑交易也可作为 proposal 通过账本分发——proposal 是尚未被所有必要参与者签署的拓扑交易。

与 Party 相关的 Admin API 拓扑管理任务见:

  • 使用 Admin API 入网外部 Party
  • 构建、签署并提交拓扑交易

交易提交

Party 设置完成后即可通过提交创建合约或 exercise choice 的交易使用账本。使用外部密钥授权的 Party,提交流程为:

  • 向所选验证者节点提交命令以解释命令并生成结果交易;交易尚未发往账本,而是返回给用户。
  • 用 Party 私钥验证并签署交易哈希(对整个结果交易——命令与结果——的承诺)。
  • 将预计算交易与签名提交给验证者节点以提交到账本。
  • 通过托管该 Party 的验证者节点观察交易结果。

更详细说明见 external signing overview。

注意:签名是对整个交易输出的承诺,而非仅命令。若解释器有误,验证者会拒绝交易。可通过任意节点提交,不限于托管该 Party 的节点。

如何用外部签名密钥提交命令见:创建合约、exercise choice 等教程。


本文由 CC Privacy Club 根据 Canton Network 官方文档(CC-BY-4.0)整理翻译,仅供学习;实现细节以官方最新版本为准。