2
當我嘗試使用下面的代碼來檢索linearId的狀態時,我得到了2條返回的記錄,一條是消耗的,另一條是未消耗的。最初的linearId是從web api傳入的。serviceHub.vaultQueryService.queryBy默認返回所有相關的狀態?
val linearId: UniqueIdentifier = UniqueIdentifier(null, UUID.fromString(legalContractState.legalContract.linearId))
val linearIds = listOf(linearId)
val linearStateCriteria = QueryCriteria.LinearStateQueryCriteria(linearId = listOf(linearIds.first(), linearIds.last()))
val states = serviceHub.vaultQueryService.queryBy(LegalContractState::class.java, linearStateCriteria).states
val inputState: StateAndRef<LegalContractState> = serviceHub.vaultQueryService.queryBy(LegalContractState::class.java, linearStateCriteria).states.single()
但是從上vault api page一個示例代碼,它說,這將根據linearId返回一個未被消耗的狀態,我也檢查了H2數據庫VAULT_STATES表中的數據,有2條記錄,一個有着CONSUMED_TIMESTAMP和它的STATE_STATUS是1,但另一個CONSUMED_TIMESTAMP是空的,STATE_STATUS是0.這是一個非共享狀態,這意味着只存儲在我的數據庫中,並且我爲它執行了一個更新,所以最好有一個消耗狀態和一個新的輸出狀態D b。所以現在我不確定這裏有什麼問題。
查詢爲未消耗的線性狀態對於給定的線性IDS:
val linearIds = issuedStates.states.map { it.state.data.linearId }.toList()
val criteria = LinearStateQueryCriteria(linearId = listOf(linearIds.first(), linearIds.last()))
val results = vaultQuerySvc.queryBy<LinearState>(criteria)