You need to enable JavaScript to run this app. NodeJS API DAML Bindings自定义类型字段的赋值方法
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS API DAML Bindings自定义类型字段的赋值方法

DAML Node.js Bindings 自定义类型赋值方法

结合你给出的合约定义,在fields构造逻辑里,自定义类型的写法和你现有的Party字段赋值逻辑保持一致,全部通过daml内置的类型构造方法完成,没有特殊封装规则,直接对应类型结构即可。

完整赋值示例

fields: {
  a: daml.party(a),
  b: daml.party(b),
  // c字段(Something 变体类型)赋值
  c: daml.variant("与DAML源码一致的构造子名", 对应构造子绑定的实际值),
  // d字段(Details 记录类型)赋值
  d: daml.record({
    id: daml.text("id字段的实际文本值"),
    name: daml.text("name字段的实际文本值"),
    state: daml.text("state字段的实际文本值")
  })
}

两类自定义类型的构造规则拆解

  • c字段(Something 可辨识联合/变体类型)
    所有DAML中通过多构造子定义的data类型(包括无参数的简单枚举、带参数的可辨识联合),在Node Bindings中统一使用daml.variant()构造。这个方法接收两个入参:

    1. 第一个参数为你要使用的构造子名称,需要和DAML源码里的构造子名完全匹配(比如示例里的Option A/Option B对应的构造子标识)
    2. 第二个参数为当前构造子绑定的实际值,值本身需要按照对应的DAML类型用内置方法包装。
      举个实际场景:如果要给c字段赋值为Option B,且B对应的是Text类型的值,写法就是daml.variant("对应B分支的构造子名", daml.text("B分支的实际内容"));如果是无参数的空构造子,第二个参数直接传null即可。
  • d字段(Details 自定义记录类型)
    所有DAML中通过with关键字定义的带组合字段的记录类型,在Node Bindings中统一使用daml.record()构造。这个方法接收一个普通JS对象作为入参:

    • 对象的key必须和DAML定义里的记录字段名完全一致,不能拼写错误
    • 对象每个key对应的value,需要按照字段本身的DAML类型,用对应的内置daml方法包装。比如示例里的三个字段都是Text类型,就统一用daml.text()把实际值包好传入即可。

注意事项
不能直接把原生JS值(比如裸字符串、裸数字)塞到对应字段里,所有字段值必须匹配DAML的类型封装要求,否则会被Ledger端的类型校验拦截,导致指令执行失败。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 13:36:04