把事情公之于众

时间:2018-03-30 12:47:19

标签: kotlin corda

有没有办法设计一个合同,允许新节点加入网络发现一些UTXO +的历史?

可以在合同中添加状态转换,为对话添加新方,但这需要每个连接的事务。

1 个答案:

答案 0 :(得分:2)

您可以通过编写一个流对来实现此目的,该流对允许加入节点以请求来自网络上其他节点的特定现有事务。

以下是虚拟实现的示例:

@InitiatingFlow
@StartableByRPC
class Initiator(val txIdToRequest: SecureHash, val partyToRequestFrom: Party) : FlowLogic<SignedTransaction>() {
    @Suspendable
    override fun call(): SignedTransaction {
        val sessionWithPartyToRequestFrom = initiateFlow(partyToRequestFrom)
        val untrustworthyData = sessionWithPartyToRequestFrom.sendAndReceive<SignedTransaction>(txIdToRequest)
        val requestedTx = untrustworthyData.unwrap { tx -> tx }
        return requestedTx
    }
}

@InitiatedBy(Initiator::class)
class Responder(val counterpartySession: FlowSession) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        val untrustworthyData = counterpartySession.receive<SecureHash>()
        val requestedTxId = untrustworthyData.unwrap { id -> id }
        val requestedTx = serviceHub.validatedTransactions.getTransaction(requestedTxId)!!
        counterpartySession.send(requestedTx)
    }
}