我正在查看PostgreSQL数据库中的fungible_token
表,我注意到我的所有记录的holder
字段都具有相同的值,并且该值是我的电子钱包节点的X500名称;即使我所有的令牌都发行到了该节点上的帐户中(即电子钱包节点是我所有帐户的主机)。
[请注意,我能够在流中正确查询帐户余额(我知道它依赖于查询vault_states
表而不是fungible_token
)。
fungible_token
表将帐户的host
显示为令牌的holder
吗? 更清楚地说,我正在寻找可以在pgAdmin中编写的SQL-不在Corda flow中编写的SQL。
从我们最近的帐户库样本中,您选择直接向帐户发行令牌。 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
我以两种方式实现了我的要求: