代码之家  ›  专栏  ›  技术社区  ›  Joel

在Corda中,如何查询vault中特定状态之后记录的所有状态?

  •  1
  • Joel  · 技术社区  · 7 年前

    我有 StateRef 对于节点记录的状态。从那以后,我如何获得节点记录的所有状态的流 StateRef

    1 回复  |  直到 7 年前
        1
  •  3
  •   Joel    7 年前

    你需要做两件事:

    1. StateRef 你已经被录音了
    2. 从该时间之后开始流式更新

    下面是一个RPC客户端示例,可以执行此操作:

    fun main(args: Array<String>) {
        // Getting an RPC connection to the node.
        require(args.size == 1) { "Usage: ExampleClientRPC <node address>" }
        val nodeAddress = NetworkHostAndPort.parse(args[0])
        val client = CordaRPCClient(nodeAddress)
        val rpcOps = client.start("user1", "test").proxy
    
        // Change this to an actual StateRef.
        val dummyStateRef = StateRef(SecureHash.zeroHash, 0)
    
        // Getting the time the state was recorded.
        val queryByStateRefCriteria = VaultQueryCriteria(stateRefs = listOf(dummyStateRef))
        val queryByStateRefResults = rpcOps.vaultQueryBy<ContractState>(queryByStateRefCriteria)
        val queryByStateRefMetadata = queryByStateRefResults.statesMetadata
        val dummyStateRefRecordedTime = queryByStateRefMetadata.single().recordedTime
    
        // Getting the states recorded after that time.
        val queryAfterTimeExpression = TimeCondition(
                RECORDED, BinaryComparison(BinaryComparisonOperator.GREATER_THAN_OR_EQUAL, dummyStateRefRecordedTime))
        val queryAfterTimeCriteria = VaultQueryCriteria(
                status = ALL,
                timeCondition = queryAfterTimeExpression)
        val queryAfterTimeResults = rpcOps.vaultTrackBy<ContractState>(queryAfterTimeCriteria)
        val afterTimeStates = queryAfterTimeResults.states
    }
    
    推荐文章