Я изо всех сил пытаюсь понять причину проблемы, с которой я сталкиваюсь.
У меня есть модуль с контрактами и модуль с валидаторами.Некоторые из Валидаторов используются в модуле Контрактов.Например:
override fun verify(tx: LedgerTransaction){
validator.validate(tx.outputs)
}
Я запускаю поток и во время проверки Контракта вижу: ClassNotFoundException , поэтому модуль из Валидаторы модуль не можетбыть найденным в загрузчике классов.Очевидно, что в узле существует CorDapp с валидаторами.
Во время отладки Corda Framework я вижу, что вложения будут загружены в AttachmentStorageInternal
во время запуска, но только те jar , которыевключает в себя контракты.
private fun loadContractsIntoAttachmentStore(): Map<SecureHash, URL> =
cordapps.filter { !it.contractClassNames.isEmpty() }.map {
it.jarPath.openStream().use { stream -> //some code}
Более того, я вижу, что на этапе Проверка , когда происходит ClassNotFoundException
или ClassNotDefFoundException
, Corda попытается загрузить отсутствующий класс, но он попытается найти его только из Приложений Контракта, которые были загружены при запуске Узла.
fun AttachmentStorage.internalFindTrustedAttachmentForClass(className: String): Attachment? {
val allTrusted = queryAttachments(
AttachmentQueryCriteria.AttachmentsQueryCriteria().withUploader(Builder.`in`(TRUSTED_UPLOADERS)),
AttachmentSort(listOf(AttachmentSort.AttachmentSortColumn(AttachmentSort.AttachmentSortAttribute.VERSION, Sort.Direction.DESC))))
for (attId in allTrusted) {
- Может кто-нибудь указать мне, как Corda будет загружать классы помощников, которые в Контракте* В моей реализации может потребоваться метод
verify()
? - Можно ли использовать классы из других модулей в приложении CorDapp для контактов?