In Corda, can the output of one transaction be used by new transaction in the same flow?

╄→尐↘猪︶ㄣ 提交于 2019-12-11 15:54:13

问题


There is a flow as per below scenario.
Transaction 1: Input StateA - ContractA results in output StateB - ContractA
Transaction 2: Input StateB - ContractA and no output
Is this possible in Corda? Please do share an example with response. Thanks.


回答1:


Yes, this is possible. For example:

@InitiatingFlow
@StartableByRPC
class TwoTransactionFlow(val inputStateAndRefA: StateAndRef<StateA>) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        val notary = serviceHub.networkMapCache.notaryIdentities[0]

        // Creating, signing and finalising the first transaction.
        val txBuilderOne = TransactionBuilder(notary)
                .addInputState(inputStateAndRefA)
                .addOutputState(StateB(), ContractA.ID)
                .addCommand(ContractA.Commands.Transfer(), ourIdentity.owningKey)

        val signedTxOne = serviceHub.signInitialTransaction(txBuilderOne)
        val notarisedTxOne = subFlow(FinalityFlow(signedTxOne))

        // Creating, signing and finalising the second transaction.
        val stateRefB = StateRef(notarisedTxOne.id, 0)
        val stateAndRefB = serviceHub.toStateAndRef<StateB>(stateRefB)

        val transactionBuilderTwo = TransactionBuilder(notary)
                .addInputState(stateAndRefB)
                .addCommand(ContractA.Commands.Exit(), ourIdentity.owningKey)

        val signedTransactionTwo = serviceHub.signInitialTransaction(transactionBuilderTwo)
        subFlow(FinalityFlow(signedTransactionTwo))
    }
}


来源:https://stackoverflow.com/questions/52929072/in-corda-can-the-output-of-one-transaction-be-used-by-new-transaction-in-the-sa

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!