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

阅读英文版

appdevdeep-divesvalues-in-the-ledger-api

Ledger API 中的值

经 Ledger API 交换的值的校验、规范化与动态包解析规则

命令与查询对摄入的值采用宽松校验;返回的值须规范化。

命令中的值校验

目标模板指命令经动态包解析后 template_id 所标识的模板或接口。命令中的值(如 create_arguments)若须按类型 T 通过类型检查,则称其期望类型T(子值同理)。

记录值中,若自某字段起至末尾均为 None,则该字段为尾部 None

提交命令时规则放宽:

  • record_idvariant_idenum_id 若存在,仅校验模块名与类型名,忽略 package ID。
  • 提供全部字段名时,可省略任意 None 字段。
  • 未提供全部字段名时,须按类型定义顺序提供字段,可省略尾部 None

示例 1

example1-1.0.0other-1.0.0 均在 Main 定义模板 T(字段不同)。Ledger API 仍接受针对 example1-1.0.0:Main.T 的 Create,即使 create_arguments 错误标注为 other-1.0.0:Main.T,因模块名与类型名与期望类型一致:

module Main where

template T
  with
    p : Party
  where
    signatory p
@ sandbox.ledger_api.commands.submit(Seq(sandbox.adminParty), Seq(createCmd))

示例 2

模板含前导与尾部 Optional 时,仅按名提供 p 可成功;无 p 标签失败;按序提供除尾部 optional 外字段(可无标签)可成功。

Ledger API 响应中的值规范化

值处于规范形当且仅当自身及子值均无尾部 None。自 Daml 3.3.0 起,非 verbose 响应会规范化(含子值)。查询时尾部 optional(如 jrk)可省略;非尾部的 None 字段(如 iri)仍会返回。


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