You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过REST API调用DAML fetchByKey获取合约ID与模板ID?

通过DAML REST API获取合约ID与模板ID

替代fetchByKey的REST实现方案

DAML REST API没有直接映射fetchByKey的端点,但可以通过合约搜索接口实现相同逻辑:根据你定义的合约键(Id+name)过滤目标合约,提取所需的contractId和templateId。

步骤1:确认合约键的定义

首先保证你的DAML模板已将Id和name设为合约键,示例模板代码:

template TargetTemplate
  with
    owner: Party
    id: Text
    name: Text
  where
    signatory owner
    key (id, name) : (Text, Text)
    maintainer key._1

步骤2:调用REST搜索接口

使用GET /v1/contracts/search端点,通过查询条件匹配合约键:

  • 请求头需携带Authorization: Bearer <你的令牌>和Content-Type: application/json
  • 请求体传入匹配参数(推荐用请求体而非URL参数,避免编码问题):
{
  "templateIds": ["<你的模板全限定名>"], // 例如:"MyPackage:MyModule:TargetTemplate"
  "query": {
    "id": "<传入的Id参数>",
    "name": "<传入的name参数>"
  },
  "includeArchived": false
}

步骤3:解析响应提取字段

接口返回的result数组中,每个合约对象包含目标字段:

  • contractId: 合约的唯一标识
  • templateId: 合约所属模板的全限定ID

示例响应片段:

{
  "result": [
    {
      "contractId": "2d5f8c7a-1b3e-4c5d-8a7b-6f4d2c1e8a3b",
      "templateId": "MyPackage:MyModule:TargetTemplate",
      "arguments": { /* 合约其他参数 */ }
    }
  ]
}

关键注意事项

  • 因为合约键是唯一的,响应数组只会有一个结果,直接取第一个元素即可
  • 必须指定templateIds缩小查询范围,否则会遍历账本所有合约,严重影响性能
  • 调用者必须拥有该合约的读取权限,否则会返回空列表或权限错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:33:32