2017-07-17 37 views
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) 

回答