Corda 如何识别持有在 vaultquery 中找到的每个状态的帐户

Corda How to identify the Account holding each state found in the vaultquery

我们使用帐户并且状态与它们相关联。

在研究每种状态时,我们使用 vaultService 和 externalIds 来检索每个帐户的状态。

示例:

serviceHub.vaultService.queryBy(contractStateType = State::class.java, criteria = QueryCriteria.VaultQueryCriteria(externalIds = listOf(accountId)))

但通常应用程序会从帐户列表中请求数据,是否可以从帐户列表中检索状态并确定每个返回的状态属于哪个帐户?

serviceHub.vaultService.queryBy(contractStateType = State::class.java, criteria = QueryCriteria.VaultQueryCriteria(externalIds = listOf(accountId1,accountId2)))

我知道我可以像上面那样在 externalIds 上传递一个列表,但是我可以从返回的每个状态中识别帐户吗?

我考虑过将帐户 ID 存储在各州,但这不是 Corda 的建议。

KeyManagementBackedAccountService 有很多有用的函数,包括 accountInfo(owningKey: PublicKey),参见 here

  • 如果holderPublicKey类型;你可以传递它的值并得到相关的 AccountInfo.
  • 如果holderAbstractParty类型;你可以通过 holder.owningKey.

KeyManagementBackedAccountService 有其他函数可以通过 nameUUID.

得到 AccountInfo

顺便说一句,您可以在查询中使用 group by;因此返回的结果可以按帐户的 UUID 分组,这样你可以 运行 accountInfo(owningKey) 每组一次。请参阅使用 group by here 的示例(搜索 groupByColumns)。