corda Hello World pt 2中的合同验证失败

时间:2017-11-10 19:59:19

标签: kotlin corda

我正在使用kotlin关注corda tutorial pt 2中的教程。每次我尝试使用下一个命令通过PartyA中的CRaSH shell启动新流:

start IOUFlow iouValue: 30, otherParty: "C=US, L=New York, O=PartyB"

我收到合同验证失败:

Done    
Contract verification failed: List has more than one element., contract: com.template.IOUContract@7c109db7, transaction: D08920023D788F80F289527BD9C27BCD54B7DAC6C53866BFA7B90B23E0E4749B

IOUFlow课程:

@InitiatingFlow
@StartableByRPC
class IOUFlow(val iouValue: Int,
              val otherParty: Party) : FlowLogic<Unit>() {

    override val progressTracker = ProgressTracker()

    @Suspendable
    override fun call() {
        val notary = serviceHub.networkMapCache.notaryIdentities[0]
        val outputState = IOUState(iouValue, ourIdentity, otherParty)
        val outputContract = IOUContract::class.jvmName
        val outputContractAndState = StateAndContract(outputState, outputContract)
        val cmd = Command(IOUContract.Create(), listOf(ourIdentity.owningKey, otherParty.owningKey))

        val txBuilder = TransactionBuilder(notary = notary)
                .addOutputState(outputState, TEMPLATE_CONTRACT_ID)
                .addCommand(cmd)

        txBuilder.withItems(outputContractAndState, cmd)
        txBuilder.verify(serviceHub)
        val signedTx = serviceHub.signInitialTransaction(txBuilder)
        val otherpartySession = initiateFlow(otherParty)
        val fullySignedTx = subFlow(CollectSignaturesFlow(signedTx, listOf(otherpartySession), CollectSignaturesFlow.tracker()))
        subFlow(FinalityFlow(fullySignedTx))
    }
}

我试过修改App.kt来解决这个问题而没有运气。有谁知道问题是什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

问题在于您将命令和输出添加到事务中两次:

val txBuilder = TransactionBuilder(notary = notary)
    .addOutputState(outputState, TEMPLATE_CONTRACT_ID)
    .addCommand(cmd)

txBuilder.withItems(outputContractAndState, cmd)

这会导致合同验证失败,因为您有两个输出而不是一个输出。