【发布时间】:2020-06-01 20:34:58
【问题描述】:
我遇到了现金状态的问题。基本上我有一个节点自己发行货币并且无法访问现有状态以用于支付/任何事情。假设这个状态是 5 美元,如果我再发 10 美元,rpcOps 和 servicehub getCashBalances 都会说我有 15 美元。但是,任何尝试使用超过 10 美元的现金流都会告诉我我没有足够的余额。
我已经为节点设置了 api 端点,甚至只是退出现金,但它会说我退出的次数比我拥有的多。当我使用QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED) 查询保管库时,我可以看到状态在那里,并且似乎没有任何东西可以将不可访问状态与任何后续可访问状态区分开来。
这里有什么我可以忽略的吗?发行者是相同的,所有者是散列的,但也应该是相同的。
用命令/代码更新:
fun selfIssueTime(@QueryParam(value = "amount") amount: Long,
@QueryParam(value = "currency") currency: String): Response {
// 1. Prepare issue request.
val issueAmount = Amount(amount.toLong() * 100, Currency.getInstance(currency))
val notary = rpcOps.notaryIdentities().firstOrNull() ?: throw IllegalStateException("Could not find a notary.")
val issueRef = OpaqueBytes.of(0)
val issueRequest = CashIssueFlow.IssueRequest(issueAmount, issueRef, notary)
val self = myIdentity
// 2. Start flow and wait for response.
val (status, message) = try {
val flowHandle = rpcOps.startFlowDynamic(
CashIssueFlow::class.java,
issueRequest
)
flowHandle.use { it.returnValue.getOrThrow() }
CREATED to "$issueAmount issued to $self."
} catch (e: Exception) {
BAD_REQUEST to e.message
}
// 3. Return the response.
return Response.status(status).entity(message).build()
}
【问题讨论】:
-
你能发布你用来发行现金的命令/代码吗?
-
当然——刚刚用代码@Joel更新了原版
-
做了更多的挖掘,发现与这个状态相关的
transaction_id在h2的vault_states表中设置了一个lock_id。我可以手动更新它并将 lock_id 设置为 null,但我不确定它为什么首先被锁定。 -
解锁后,提现可以退出,但我尝试用它向其他节点发现仍然报错。
标签: corda