有没有办法设计一个合同,允许新节点加入网络发现一些UTXO +的历史?
可以在合同中添加状态转换,为对话添加新方,但这需要每个连接的事务。
答案 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)
}
}