Corda 如何区分节点参与或广播的事务与txs链

Corda 如何区分节点参与或广播的事务与txs链,corda,Corda,问题:是否有办法区分节点参与或广播的交易与txs链 情景: A和B执行涉及状态X的事务#1 B和C执行涉及状态X的事务#2 C和D执行涉及X国的交易#3(监管机构作为最终流的外部参与者) 当监管者运行下面的代码来查询其保险库时,目的是只获取tx#3,实际上它获取了所有3个tx。无法区分3个tx和仅过滤器tx#3 val transactionsnapshot=serviceHub.validatedTransactions.track().snapshot 是否有一种方法可以区分节点所涉及的事务

问题:是否有办法区分节点参与或广播的交易与txs链

情景:

  • A和B执行涉及状态X的事务#1
  • B和C执行涉及状态X的事务#2
  • C和D执行涉及X国的交易#3(监管机构作为
    最终流的外部参与者
  • 当监管者运行下面的代码来查询其保险库时,目的是只获取tx#3,实际上它获取了所有3个tx。无法区分3个tx和仅过滤器tx#3

    val transactionsnapshot=serviceHub.validatedTransactions.track().snapshot

    是否有一种方法可以区分节点所涉及的事务、它从某个节点通过广播接收到的事务以及那些属于您也通过广播接收到的链的一部分的事务


    随后,当SGX到来时,只有在来源期间收到以供验证/处理的交易才会在安全飞地中,虽然节点作为广播的参与者并作为广播的一部分接收的事务存在于vault存储中以供查询?

    没有直接尝试我将要提出的全部建议;但我实现了一些非常类似的东西……基于Vault QueryCriteria实现一个未来,它只观察参与者C&D的状态。在每次这样的更新中,检索事务(从节点已知的已验证事务列表中),其中输出状态=从Vault QueryCriteria返回的状态

    可能有一种更简单的方法;但我基本上采取了一种非常相似的方法来满足我的要求……似乎效果令人满意。莱克托:我还不太熟悉V2.0


    只是一个想法-希望它有帮助。

    要广播一个事务,您可能有类似的想法 . 但除此之外,在响应方,您可以这样做

    val recorded = subFlow(ReceiveTransactionFlow(otherSideSession, true, StatesToRecord.ONLY_RELEVANT))
    
    // Currently there's no way to distiguish transactions that are from a tx that was broadcasted versus ones from walking the chain and kept in storage
    // We use memo/notes to keep track of this to differentiate during tx snapshot enquiry
    
    serviceHub.vaultService.addNoteToTransaction(recorded.id, "BROADCASTED")
    
    仅查询广播的发送

    val transactionsSnapshot = serviceHub.validatedTransactions.track().snapshot
    val broadcastedTx = transactionsSnapshot.filter{ serviceHub.vaultService.getTransactionNotes(it.tx.id).firstOrNull() == "BROADCASTED" }
    
    只查询参与的Tx

    val participatedTx = transactionsSnapshot.filter{ it.tx.requiredSigningKeys.any { resolveKey(it) != null && resolveKey(it) == ourIdentity} }  
    

    我不喜欢只观察C&D之间的状态。无论参与者是谁,我都希望能够区分和/或过滤我在
    FinalityFlow
    中作为广播/额外接收者的一部分接收到的TX,而不是作为依赖项验证的一部分,在存储中存储的TX。