Относительно этого поста: Corda - java.lang.IllegalArgumentException, выдаваемый проверяющим нотариусом
Я обнаружил в Корде случай, когда штатам иногда требуется хранить пользовательский тип данных, однако проверка транзакций с использованием этих состояний завершается неудачно при использовании проверяющего нотариуса.
Рассмотрим следующие типы, которые будут реализованы в одном пакете, в одном и том же файле jar:
Пример Пользовательского Типа
package com.example.statescontracts
@CordaSerializable
data class Foo(
val bar: Int,
val baz: String
)
Пример состояния
package com.example.statescontracts
data class FooState(
override val linearId: UniqueIdentifier,
val obligor: AbstractParty,
val obligee: AbstractParty,
val foos: Set<Foo>
) : LinearState {
override val participants get() = listOf(obligor, obligee)
}
Выдача нового экземпляра FooState
в бухгалтерскую книгу, вероятно, не затронута, поскольку он не потребляет предыдущий FooState
экземпляр, но последующее использование FooState
экземпляров, похоже, не удается для проверки нотариусов.
Исключение
java.lang.IllegalArgumentException: недопустимое имя Java:
java.util.Set
Предположения
Проверка может выполняться для всех участников штата, которые имеют файл JAR состояний / контрактов и, следовательно, могут обращаться к типу Foo
, однако это не работает для нотариуса, поскольку у него нет копии JAR-файл состояний / контрактов локально.
Насколько я понимаю, файл JAR состояний / контрактов должен быть небольшим, так как он предлагается к транзакции, когда предлагается, поэтому проверка нотариусов должна быть в состоянии проверять с использованием классов, найденных в JAR, прикрепленном к сделка.
Вопрос
Может ли кто-нибудь проверить, верны ли мои предположения, и если да, то почему эта проблема возникает при проверке нотариусов и как исправить эту проблему?