如何在现有合同中搜索?例如使用 accountid 在现有账户中查找账户合约
How to search in existing contracts? e.g. find the Account contract in existing Accounts by using accountid
我应该如何查找现有合同?
例如我有一个创建帐户合同的模板。在创建合同之前,我需要搜索现有合同以确保帐户 ID 不重复。
正如 Shayne Fletcher 指出的那样,DAML 最近获得了一项名为 "Contract Keys" 的功能,它解决了您试图解决的特定问题。您可以通过在 template
上声明 key
以及一组 maintainers
来利用此功能,它们确保该键中的唯一性约束并验证任何查找。
template Account
with
issuer: Party
owner: Party
accountNo: Text
where
signatory issuer
observer owner
key (issuer, accountNo) : (Party, Text)
maintainer issuer
上面指定元组(issuer, accountNo)
是该类合约的"primary key",一个账户的issuer
负责维护其发行账户的索引.
您现在可以使用两个函数:fetchByKey
和 lookupByKey
。两者都采用一个元组 (Party, Text)
。 fetchByKey
returns 元组 (ContractId Account, Account)
并在找不到密钥时中止事务。 lookupByKey
returns 和 Optional (ContractId Account)
,另外一个微妙之处是,lookupByKey
的使用必须得到 issuer
.
的授权
不过,更一般地说,查询往往是在应用程序的集成层中完成的 off-ledger。例如,如果您想检查给定的 owner
是否已经拥有超过 10 个帐户,您通常会通过在可查询的数据库中维护活动 Account
模板的镜像来做到这一点您的选择并在提交交易前查询。
你可以看看这个 example,它在 MongoDB.
中维护所有活跃的合约
我应该如何查找现有合同?
例如我有一个创建帐户合同的模板。在创建合同之前,我需要搜索现有合同以确保帐户 ID 不重复。
正如 Shayne Fletcher 指出的那样,DAML 最近获得了一项名为 "Contract Keys" 的功能,它解决了您试图解决的特定问题。您可以通过在 template
上声明 key
以及一组 maintainers
来利用此功能,它们确保该键中的唯一性约束并验证任何查找。
template Account
with
issuer: Party
owner: Party
accountNo: Text
where
signatory issuer
observer owner
key (issuer, accountNo) : (Party, Text)
maintainer issuer
上面指定元组(issuer, accountNo)
是该类合约的"primary key",一个账户的issuer
负责维护其发行账户的索引.
您现在可以使用两个函数:fetchByKey
和 lookupByKey
。两者都采用一个元组 (Party, Text)
。 fetchByKey
returns 元组 (ContractId Account, Account)
并在找不到密钥时中止事务。 lookupByKey
returns 和 Optional (ContractId Account)
,另外一个微妙之处是,lookupByKey
的使用必须得到 issuer
.
不过,更一般地说,查询往往是在应用程序的集成层中完成的 off-ledger。例如,如果您想检查给定的 owner
是否已经拥有超过 10 个帐户,您通常会通过在可查询的数据库中维护活动 Account
模板的镜像来做到这一点您的选择并在提交交易前查询。
你可以看看这个 example,它在 MongoDB.
中维护所有活跃的合约