【发布时间】:2020-12-11 21:32:29
【问题描述】:
我可以分别恢复每个账户的代币余额。 通过这两种方法,它可以单独恢复平衡:
方法 1
val heldByAccount = QueryCriteria.VaultQueryCriteria().withExternalIds(accountId)
val queryCriteria = tokenAmountWithIssuerCriteria(myTokenType, issuer)
.and(heldByAccount)
.and(sumTokenCriteria())
val results = serviceHub.vaultService.queryBy(
contractStateType = FungibleToken::class.java,
criteria = queryCriteria)
val tokenbalance = rowsToAmount(myTokenType, results)
方法 2
val sumAmount = builder { PersistentFungibleToken::amount.sum() }
val sumAmountCriteria = QueryCriteria.VaultCustomQueryCriteria(sumAmount)
val heldByAccount = QueryCriteria.VaultQueryCriteria().withExternalIds(accountId)
val sumAmountFromDB = serviceHub.vaultService.queryBy(
contractStateType = FungibleToken::class.java,
criteria = heldByAccount.and(sumAmountCriteria)
).otherResults
在我的场景中,我需要多次恢复多个帐户的余额,并且单独执行此操作很慢。 是否可以通过按帐户对余额进行分组来在单个查询中恢复帐户列表的余额?
我尝试在 PersistentFungibleToken::holder 列中使用 groupByColumns,但没有成功。
在下面的链接中,有一种方法可以通过在银行查询来恢复余额。 https://www.corda.net/blog/cordas-accounts-tokens-making-blockchain-more-inclusive/
我在我的数据库上运行了下面的查询,它确实恢复了余额。有谁知道这是否是从帐户列表中恢复余额的唯一方法?
select ACCOUNTS.IDENTIFIER, sum(FUNGIBLE_TOKEN.AMOUNT)
from VAULT_STATES, FUNGIBLE_TOKEN, STATE_PARTY, PK_HASH_TO_EXT_ID_MAP, ACCOUNTS
where VAULT_STATES.TRANSACTION_ID = FUNGIBLE_TOKEN.TRANSACTION_ID
and VAULT_STATES.OUTPUT_INDEX = FUNGIBLE_TOKEN.OUTPUT_INDEX
and VAULT_STATES.TRANSACTION_ID = STATE_PARTY.TRANSACTION_ID
and VAULT_STATES.OUTPUT_INDEX = STATE_PARTY.OUTPUT_INDEX
and PK_HASH_TO_EXT_ID_MAP.PUBLIC_KEY_HASH = STATE_PARTY.PUBLIC_KEY_HASH
and ACCOUNTS.IDENTIFIER::text = PK_HASH_TO_EXT_ID_MAP.EXTERNAL_ID
group by ACCOUNTS.IDENTIFIER
【问题讨论】:
标签: corda