Можно ли динамически добавлять участников в состояние внутри потока, чтобы состояние сохранялось в хранилище ThirdParty без использования StatesToRecord.ALL_VISIBLE в ReceiveFinalityFlow?
Мы сделали то же самое в Corda 2.0, она не работает в Corda 4.0.
Разве она не поддерживается в Corda 3.2 и далее?Я вижу, что @KeepForDJVM добавлено в ContractState.
Я пытался динамически добавлять участников в IOUState как [iouState.participants.add(thirdParty)]
после того, как участники в IOUState обновляются как mutableList как [override val participants: MutableList<AbstractParty> = mutableListOf(lender, borrower)]
, так что IOUState также будет храниться в хранилище ThirdParty.,Я передаю сеансы потока как заемщика, так и третьей стороны в CollectSigntaureFlow и FinalityFlow.IOUFlowTests [flow records the correct IOU in both parties' vaults]
не удалось с iouState не найден в хранилище thridParty.
IOUState:
@BelongsToContract(IOUContract::class)
data class IOUState(val value: Int,
val lender: Party,
val borrower: Party,
val thirdParty: Party,
override val linearId: UniqueIdentifier = UniqueIdentifier()):
LinearState, QueryableState {
/** The public keys of the involved parties. */
//override val participants: MutableList<AbstractParty> get() = mutableListOf(lender, borrower)
override val participants = mutableListOf(lender, borrower)
ExampleFlow:
var iouState = IOUState(iouValue, serviceHub.myInfo.legalIdentities.first(), otherParty, thirdParty)
iouState.participants.add(thirdParty)
val txCommand = Command(IOUContract.Commands.Create(), iouState.participants.map { it.owningKey })
val counterparties = iouState.participants.map { it as Party }.filter { it.owningKey != ourIdentity.owningKey }.toSet()
counterparties.forEach { p -> flowSessions.add(initiateFlow(p))}
val fullySignedTx = subFlow(CollectSignaturesFlow(partSignedTx, flowSessions, GATHERING_SIGS.childProgressTracker()))
// Stage 5.
progressTracker.currentStep = FINALISING_TRANSACTION
// Notarise and record the transaction in both parties' vaults.
return subFlow(FinalityFlow(fullySignedTx, flowSessions, FINALISING_TRANSACTION.childProgressTracker()))
Как Заемщик, так и ThirdParty получают поток и подписывают транзакцию, но не видят ThirdParty в списке участников и не сохраняются в хранилище ThirdParty.
Я ожидаю, что ThirdParty должна быть в списке участникови IOUState также должен храниться в ThirdParty Vault.