Вместо выбора записи только состояний, в которых они являются одним из participants
, узлы могут выбрать запись каждого состояния в транзакции, которую они получают. Я написал пример ниже. Вы также можете взглянуть на CorDapp Observable States, реализующий этот шаблон здесь .
Отправка транзакции
Во-первых, узел, у которого есть транзакция, которая содержит рассматриваемые состояния, должен отправить транзакцию контрагенту (ам), который хочет записать ее, но не является participants
. Вот как мы определим BrodcastTransactionFlow
для этого:
@InitiatingFlow
class BroadcastTransaction(
val stx: SignedTransaction,
val counterparty: Party) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
val session = initiateFlow(counterparty)
subFlow(SendTransactionFlow(session, stx))
}
}
Получение транзакции и сохранение всех состояний
Контрагент (ы) должен зарегистрировать поток респондента, который записывает все состояния в транзакции. Вот как мы определим RecordTransactionAsObserver
для этого:
@InitiatedBy(BroadcastTransaction::class)
class RecordTransactionAsObserver(val otherSession: FlowSession) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
val flow = ReceiveTransactionFlow(
otherSideSession = otherSession,
checkSufficientSignatures = true,
// We are recording all the states,
// and not just the ones where we are participants.
statesToRecord = StatesToRecord.ALL_VISIBLE
)
subFlow(flow)
}
}