Kotlin 实现状态更新的流程,我们必须使用SendTransaction吗

Kotlin 实现状态更新的流程,我们必须使用SendTransaction吗,kotlin,corda,Kotlin,Corda,我正在尝试实现状态更新流,那么如何传递输入状态,以及如何为更新流和发布流创建单独的文件,以及是否必须使用SendtransactioFlow作为子流 我已经通过输入状态来构建事务,不知道是否正确,请验证 在transactionbuilder中将inputstate添加到事务的代码 // We create a transaction builder and add the components. val hashasint: Int = serviceHub.vaultService.has

我正在尝试实现状态更新流,那么如何传递输入状态,以及如何为更新流和发布流创建单独的文件,以及是否必须使用SendtransactioFlow作为子流

我已经通过输入状态来构建事务,不知道是否正确,请验证

在transactionbuilder中将inputstate添加到事务的代码

// 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)

更新流是否需要使用SendTransactionFlow。

要更新状态,需要从vault中获取状态,并将其用作事务生成器中的输入状态。要从vault获取状态,可以使用vault Query。以下是一个例子:

List<StateAndRef<MyState>> myStateAndRefs = getServiceHub().getVaultService().queryBy(MyState.class).getStates();
List mystateanderefs=getServiceHub().getVaultService().queryBy(MyState.class).getStates();
如果需要筛选结果,可以使用
QueryCriteria
。 有关更多信息,请参阅此处:


更新状态通常不需要
SendTransactionFlow
。如果发起人没有他想要更新的状态,他需要向对方请求输入状态,则需要更新。因为在这种情况下,他将不会拥有有关状态的交易链,他必须使用
SendTransactionFlow
向交易对手请求相同的交易链。这是必需的,因为发起者需要遍历事务链,从状态的发布到当前状态,以验证其提供的状态的真实性。

SendTransactionFlow在FinalityFlow中调用。不需要单独打电话。 请参阅下面的链接-

亦如此提述—

List<StateAndRef<MyState>> myStateAndRefs = getServiceHub().getVaultService().queryBy(MyState.class).getStates();