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()构造。这个方法接收两个入参:- 第一个参数为你要使用的构造子名称,需要和DAML源码里的构造子名完全匹配(比如示例里的
Option A/Option B对应的构造子标识) - 第二个参数为当前构造子绑定的实际值,值本身需要按照对应的DAML类型用内置方法包装。
举个实际场景:如果要给c字段赋值为Option B,且B对应的是Text类型的值,写法就是daml.variant("对应B分支的构造子名", daml.text("B分支的实际内容"));如果是无参数的空构造子,第二个参数直接传null即可。
- 第一个参数为你要使用的构造子名称,需要和DAML源码里的构造子名完全匹配(比如示例里的
d字段(Details 自定义记录类型)
所有DAML中通过with关键字定义的带组合字段的记录类型,在Node Bindings中统一使用daml.record()构造。这个方法接收一个普通JS对象作为入参:- 对象的key必须和DAML定义里的记录字段名完全一致,不能拼写错误
- 对象每个key对应的value,需要按照字段本身的DAML类型,用对应的内置daml方法包装。比如示例里的三个字段都是Text类型,就统一用
daml.text()把实际值包好传入即可。
注意事项
不能直接把原生JS值(比如裸字符串、裸数字)塞到对应字段里,所有字段值必须匹配DAML的类型封装要求,否则会被Ledger端的类型校验拦截,导致指令执行失败。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

