Если вы выдаете новое состояние, вы можете просто изменить участников этого состояния, чтобы все стороны получили новое состояние.Вот пример, который я создал с данными KYC.Это пример обновления состояния (не выдачи нового состояния), но применяется тот же принцип - просто измените список участников, чтобы контролировать, кто будет видеть это состояние.Состояние KYC выглядит следующим образом:
@CordaSerializable
data class State(val firstName: String, val lastName: String, val accountNum: String, val owner: AbstractParty,
override val linearId: UniqueIdentifier = UniqueIdentifier(), val banksInvolved: List<AbstractParty> = emptyList()) : QueryableState, ContractState, LinearState {
//Each time a TD is issued with this KYC data, the bank it is issued to is added to this banks involved list, meaning the data is now stored in that banks vault
override val participants: List<AbstractParty> get() = banksInvolved.plus(owner)
Эта переменная участников представляет собой список всех узлов, которые будут хранить это состояние в своем хранилище (т.е. будут уведомлены о создании, обновлении состояний и т. Д.).Здесь вы также добавили бы новые узлы, чтобы они могли просматривать состояние в своем хранилище.
Затем в потоке, чтобы уведомить новый банк о том, что они получили данные KYC, мы просто добавляем состояниекак вывод с новым банком, добавленным в список banksInvolved.Это сделает этот новый банк участником с таким состоянием:
builder.addOutputState(KYCData.first().state.copy(data = KYCData.first().state.data.copy(
banksInvolved = KYCData.first().state.data.banksInvolved.plus(issuingInstitue)))) //Same state but with a new bank involved - i.e able to view this KYC data