我正在尝试实现状态更新的流,那么如何传递输入状态,我可以为updation_flow和issue流创建一个单独的文件吗,我是否必须使用SendtransactioFlow作为子流?
我已通过输入状态来建立交易,不知道它是否正确,请进行验证。
代码,将输入状态添加到transactionbuilder中的事务中
// We create a transaction builder and add the components.
val hashasint: Int = serviceHub.vaultService.hashCode()
val convertostring: String = hashasint.toString()
val ourStateRef = StateRef(SecureHash.sha256(convertostring), 0)
val inputState: StateAndRef<KycState> = serviceHub.toStateAndRef(ourStateRef)
val txBuilder = TransactionBuilder(notary = notary)
.addOutputState(outputState, KycContract.ID)
.addCommand(command)
.addInputState(inputState)
用于实现状态更新流程的代码
val signedTx = serviceHub.signInitialTransaction(txBuilder)
// Creating a session with the other party.
val otherPartySession = initiateFlow(otherParty) // i think here is where the actual link to other node starts
subFlow(SendTransactionFlow(otherPartySession,signedTx))
// Obtaining the counterparty's signature.
val fullySignedTx = subFlow(CollectSignaturesFlow(signedTx, listOf(otherPartySession), CollectSignaturesFlow.tracker()))
// We finalise the transaction and then send it to the counterparty.
subFlow(FinalityFlow(fullySignedTx, otherPartySession))
更新流程是否需要使用SendTransactionFlow。
答案 0 :(得分:1)
SendTransactionFlow在FinalityFlow中被调用。无需单独致电。 参见以下链接-
https://github.com/corda/corda/blob/master/core/src/main/kotlin/net/corda/core/flows/FinalityFlow.kt
答案 1 :(得分:0)
要更新状态,您需要从库中获取状态并将其用作事务构建器中的输入状态。要从库中获取状态,可以使用vaultQuery。这是一个示例:
List<StateAndRef<MyState>> myStateAndRefs = getServiceHub().getVaultService().queryBy(MyState.class).getStates();
如果要过滤结果,可以使用QueryCriteria
。
有关更多信息,请参见此处:https://docs.corda.net/api-vault-query.html
SendTransactionFlow
来更新状态。如果发起方不具有他要更新的状态,而他需要向交易对手请求输入状态,则将需要它。由于在这种情况下,他将没有该州的交易链,因此他将不得不使用SendTransactionFlow
向交易对手索取该交易链。之所以需要这样做,是因为发起者需要将交易链从状态的发布转移到当前的状态,以便验证所提供状态的真实性。