【问题标题】:Corda Accounts and Tokens - How to get balance in listCorda 帐户和令牌 - 如何在列表中获得余额
【发布时间】: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


    【解决方案1】:

    找到了一个解决方案,不知道是最优雅还是最高效,但总比绑定一个数据库结构好,比在数据库中用SUM做几次查询好。

    我使用所需帐户的 externalIdsFungibleToken 进行了 vaultquery。此查询返回所请求帐户的所有状态/令牌,我正在研究答案。

    我按持有者对每个状态/令牌进行分组,通过 holder.owningKey 检索 accountInfo 并增加 amount.quantity。也就是说,我是手动计算的。

    我相信这是一个简单的解决方案,可以满足我的需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2012-10-12
      • 1970-01-01
      • 2018-12-19
      • 2017-10-11
      • 2020-03-17
      • 2022-07-15
      相关资源
      最近更新 更多