0

我应该怎么做才能找到现有的合同?

例如,我有一个创建帐户合同的模板。在创建合约之前,我需要搜索现有的合约以确保帐户 ID 不重复。

4

1 回答 1

0

正如Shayne Fletcher所指出的,DAML 最近获得了一项名为“合同密钥”的功能,可以解决您要解决的特定问题。key您可以通过在 a上声明 atemplate和一组 来使用此功能maintainers,它们确保该键中的唯一性约束并验证任何查找。

template Account
  with
    issuer: Party
    owner: Party
    accountNo: Text
  where
    signatory issuer
    observer owner

    key (issuer, accountNo) : (Party, Text)
    maintainer issuer

上面指定元组(issuer, accountNo)是此类合约的“主键”,并且issuer账户的 负责维护他们发行的账户的索引。

您现在可以使用两个函数:fetchByKeylookupByKey. 两者都取一个元组(Party, Text)。如果找不到密钥,则fetchByKey返回一个元组并中止事务。返回一个,带有额外的微妙之处,即使用必须由 授权。(ContractId Account, Account)lookupByKeyOptional (ContractId Account)lookupByKeyissuer

不过,更一般地说,查询往往是在应用程序的集成层中在账本外完成的。例如,如果您想检查一个给定的owner帐户是否已不超过 10 个,您通常会通过Account在您选择的可查询数据库中维护活动模板的镜像并在提交交易之前对其进行查询来做到这一点。

你可以看一下这个例子,它在 MongoDB 中维护所有活动的合约。

于 2019-05-13T08:22:51.267 回答