Corda: java.lang.IllegalArgumentException: этот AttachmentWithContext не был инициализирован должным образом

#java #blockchain #corda

#java #блокчейн #corda

Вопрос:

В нашем проекте у нас есть пользовательская реализация Nonfungible token state и Nonfungible token contract . Мы используем приведенный ниже фрагмент кода для выдачи нашего пользовательского не взаимозаменяемого токена.

         Party notary = NotaryUtilitiesKt.getPreferredNotary(getServiceHub(),NotaryUtilitiesKt.firstNotary());
        TransactionBuilder transactionBuilder = new TransactionBuilder(notary);
        IssueTokensUtilitiesKt.addIssueTokens(transactionBuilder, tokensToIssue);
        FlowUtilitiesKt.addTokenTypeJar(tokensToIssue, transactionBuilder);
 

при попытке преобразовать полученный выше конструктор транзакций в проводную транзакцию ( builder.toWireTransaction(serviceHub); ) мы получаем ошибку с приведенной ниже трассировкой стека.

 java.lang.IllegalArgumentException: This AttachmentWithContext was not initialised properly. Please ensure all Corda contracts extending existing Corda contracts also implement the Contract base class.
    at net.corda.core.internal.AttachmentWithContext.<init>(AttachmentWithContext.kt:18)
    at net.corda.core.transactions.TransactionBuilder.handleContract(TransactionBuilder.kt:487)
    at net.corda.core.transactions.TransactionBuilder.selectContractAttachmentsAndOutputStateConstraints(TransactionBuilder.kt:359)
    at net.corda.core.transactions.TransactionBuilder.toWireTransactionWithContext(TransactionBuilder.kt:159)
    at net.corda.core.transactions.TransactionBuilder.toWireTransactionWithContext$core(TransactionBuilder.kt:146)
    at net.corda.core.transactions.TransactionBuilder.toWireTransaction(TransactionBuilder.kt:140)
 

Комментарии:

1. В исключении говорится, что у вас проблема с реализацией пользовательского контракта. Реализует ли он базовый интерфейс контракта? docs.corda.net/docs/corda-os/4.6 /…

Ответ №1:

Как сказал Алесандро, ошибка, похоже, указывает на проблему с классом контракта.

Пожалуйста, убедитесь, что все контракты Corda, расширяющие существующие контракты Corda, также реализуют базовый класс Contract.

Я бы дважды проверил, правильно ли ваш класс contract реализует contract. Что-то вроде этого:

 class IOUContract : Contract {
companion object {
    @JvmStatic
    val IOU_CONTRACT_ID = "net.corda.training.contracts.IOUContract"
}
 

источник: https://github.com/corda/samples-kotlin/blob/master/Advanced/obligation-cordapp/contracts-kotlin/src/main/kotlin/net/corda/training/contracts/IOUContract.kt

Удачи!