Я пытаюсь использовать функции учетных записей в Corda вместе с функциями oracle, проблема заключается в создании отфильтрованной функции для получения подписи oracle. мой код kotlin, который использовал предикат для проверки наличия в моей транзакции ключа oracle, всегда возвращает false, хотя у меня есть oracle открытый ключ, добавленный в список c ключей publi, используемых для подписи начальных транзакций.
var requiredSigners = Arrays.asList(oracle.owningKey, urIdentity.owningKey, lenderAccountNewKey)
val output = IOUState(exchangeRate * value, lenderAccountNewKey, borrowerAccountNewKey)
val transactionBuilder = TransactionBuilder(notary)
var participantsList = ArrayList<AbstractParty>(output.participants)
participantsList.add(oracle)
transactionBuilder.addOutputState(output, IOUContract.ID)
.addCommand(IOUContract.Commands.Create(), participantsList.map { it.owningKey })
transactionBuilder.verify(serviceHub)
var localSignedTx = serviceHub.signInitialTransaction(transactionBuilder)
var filteredTx = localSignedTx.buildFilteredTransaction(Predicate {
when (it) {
is Command<*> -> oracle.owningKey in it.signers
else -> false
}
}
val oracleSignature = subFlow(SignFlow(oracle, filteredTransaction))
val stx = locallySignedTransaction.withAdditionalSignature(oracleSignature)
при попытке запустить с помощью следующего кода журналы приведены ниже.
[INFO] 2020-05-26T07: 00: 59,660Z [Node thread-1] corda.flow. - Поток вызвал ошибку: Коллекция не содержит элемента, соответствующего предикату. Отправка в потоковую больницу для сортировки. {Actor_id = internalShell, Actor_owning_identity = O = PartyA, L = Лондон, C = GB, Actor_store_id = NODE_CONFIG, fiber-id = 10000003, flow-id = 040d69f9-f93a-4a23-bdb4-594c41d38987, invocation_ida = 3da64e3d * -4a41-8f18-b0ca05557490, invocation_timestamp = 2020-05-26T07: 00: 58.102Z, origin = internalShell, session_id = dec88c8e-1441-425b-bfe0-f00ad6b12126, session_timestamp = 2020-05-26T06: 58: 59.126Z thread-id = 161} [ИНФОРМАЦИЯ] 2020-05-26T07: 00: 59,666Z [Node thread-1] statemachine.StaffedFlowHospital. - Поток [040d69f9-f93a-4a23-bdb4-594c41d38987] поступил в больницу в состоянии