Исключение проверки транзакции при вызове потока в корде - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть контракт, который использует входные данные типа A для создания выходных данных типа B, и мой контракт выглядит примерно так, как показано

  override fun verify(tx: LedgerTransaction) {
        val commandCreate = tx.commands.requireSingleCommand<Commands.Create>()
        requireThat {

 "One input state should be there for TypeB" using (tx.inputStates.size==1)
            "One output states should be there for TypeB" using (tx.outputStates.size==1)
            "Input State should be a TypeA" using (tx.getInput(0) is TypeAState)
            "Output State should be a TypeB" using(tx.getOutput(0) is TypeBState)
            "TypeA id Number should not be empty" using((tx.getInput(0) as TypeAState).idNumber.isNotEmpty())

}

, и я получаю следующую ошибку при вызовеflow

java.util.concurrent.ExecutionException: net.corda.core.contracts.TransactionVerificationException $ ContractRejection: сбой проверки контракта: требуется команда com.example.contract.PolicyContract.Commands.Create, контракт:com.example.contract.PolicyContract, транзакция: B2AE49DEDFE882C9DDBA9ECB35740A689CFDC4F8ED78DD43D912FDC9DC5DC2C4

Мой поток выглядит примерно так

 val txCommand = Command(TypeBContract.Commands.Create(), listOf(me.owningKey))
            val txBuilder = TransactionBuilder(notary)
                    .addInputState(typeARef)
                    .addOutputState(outputState, TYPEB_CREATION_CONTRACT_ID)
                    .addCommand(txCommand)

Куда я

1 Ответ

0 голосов
/ 18 сентября 2018

Проблема в requireSingleCommand. Когда вы создаете транзакцию с состояниями ввода, здесь также будет загружаться команда о том, что состояние ввода было включено в другую транзакцию.

Чтобы решить эту проблему, используйте tx.commandsOfType<YourType>() или любой другой синтаксис. Это не будет бросать исключение. Это решение - то, что вы должны использовать, когда в транзакции есть входы и выходы.

Исключение связано с тем, что single вызывается в requireSingleCommand.

...