如何查询PostgreSQL以查找某个帐户的余额?

问题描述 投票:0回答:2

我正在查看PostgreSQL数据库中的fungible_token表,我注意到我的所有记录的holder字段都具有相同的值,并且该值是我的电子钱包节点的X500名称;即使我所有的令牌都发行到了该节点上的帐户中(即电子钱包节点是我所有帐户的主机)。

[请注意,我能够在流中正确查询帐户余额(我知道它依赖于查询vault_states表而不是fungible_token)。

  1. [是设计使fungible_token表将帐户的host显示为令牌的holder吗?
  2. 如果是这样,那么找到某个帐户余额的合适的SQL查询将是什么?

更清楚地说,我正在寻找可以在pgAdmin中编写的SQL-不在Corda flow中编写的SQL。

corda
2个回答
0
投票

从我们最近的帐户库样本中,您选择直接向帐户发行令牌。 https://github.com/corda/samples-kotlin/blob/master/Accounts/worldcupticketbooking/workflows/src/main/kotlin/com/t20worldcup/flows/IssueCashFlow.kt#L42

就是说,当您执行查询时,您只需要为AccountID指定externalID。

例如:

class QuerybyAccount(private val whoAmI:String) : FlowLogic<String>() {
override val progressTracker = ProgressTracker()

@Suspendable
override fun call():String {
    val myAccount = accountService.accountInfo(whoAmI).single().state.data
    val criteria = QueryCriteria.VaultQueryCriteria(externalIds = listOf(myAccount.identifier.id))

    //Ticket
    val ticketList = serviceHub.vaultService.queryBy<NonFungibleToken>(criteria = criteria).states
    val myTicketIDs = ticketList.map { it.state.data.tokenType.tokenIdentifier }
    val tkList = myTicketIDs.map {
        val uuid = UUID.fromString(it)
        val queryCriteria = QueryCriteria.LinearStateQueryCriteria(uuid = listOf(uuid),status = Vault.StateStatus.UNCONSUMED)
        val stateAndRef = serviceHub.vaultService.queryBy<T20CricketTicketState>(queryCriteria).states[0]
        val description = stateAndRef.state.data.ticketTeam
        description
    }
    //Assets
    val asset = serviceHub.vaultService.queryBy(FungibleToken::class.java, criteria).states
    val myMoney = asset.map { it.state.data.amount.quantity.toString() + " " + it.state.data.tokenType.tokenIdentifier}
    return "\nI have ticket(s) for $tkList" +
            "\nI have money of $myMoney"
}}

完整代码位于:https://github.com/corda/samples-kotlin/tree/master/Accounts/worldcupticketbooking


0
投票

我以两种方式实现了我的要求:

© www.soinside.com 2019 - 2024. All rights reserved.