銀行のフローの出力を入力として取得し、値を更新しました。しかし、私は、ボールトの状態状態を「消費」に更新する方法を知らない。私はそれがflowlogicに基づいて自動的に起こると思った。ボールト状態のステータスが未契約/コンシューマ
銀行ノードがフローを開始し、銀行と顧客の両方の元帳にコミットしました。 顧客ノードは別のフローを開始し、銀行の状態を入力として取り込み、値を更新し、顧客および銀行の元帳に新しい状態としてコミットしました。 私はこのレベルまで、サンプルコードの下に行っています。
@Suspendable
override fun call(): SignedTransaction {
// Obtain a reference to the notary we want to use.
val notary = serviceHub.networkMapCache.notaryIdentities[0]
// Stage1.
progressTracker.currentStep = GENERATING_TRANSACTION
// Extract state from ledger as input for Customer node
val criteria = QueryCriteria.VaultQueryCriteria(status = Vault.StateStatus.UNCONSUMED)
val results = serviceHub.vaultService.queryBy<POCState>(criteria)
val pocState = results.states.last().state.data
// Customer reset the approval status
val ourOtherOutputStateVB: POCState = pocState.copy(stateCode = pocStateCodeVB, stateCodeMessage = pocStateStringVB)
// Generate an unsigned transaction.
val txCommand = Command(BankContract.Commands.Create(), pocState.participants.map { it.owningKey })
val txBuilder = TransactionBuilder(notary).withItems(StateAndContract(ourOtherOutputStateVB, POC_CONTRACT_ID), txCommand)
// Stage 2.
progressTracker.currentStep = VERIFYING_TRANSACTION
// Verify that the transaction is valid.
txBuilder.verify(serviceHub)
// Stage 3.
progressTracker.currentStep = SIGNING_TRANSACTION
// Sign the transaction.
val partSignedTx = serviceHub.signInitialTransaction(txBuilder)
// Stage 4.
val otherPartyFlow = initiateFlow(otherParty)
progressTracker.currentStep = GATHERING_SIGS
// Send the state to the counterparty, and receive it back with their signature.
val fullySignedTx = subFlow(CollectSignaturesFlow(partSignedTx, setOf(otherPartyFlow), GATHERING_SIGS.childProgressTracker()))
// Stage 5.
progressTracker.currentStep = FINALISING_TRANSACTION
// Notarise and record the transaction in both parties' vaults.
return subFlow(FinalityFlow(fullySignedTx, FINALISING_TRANSACTION.childProgressTracker()))
}
さて、私の質問は次のとおりです。 「消費」するために銀行の状態を変更するためにどのように顧客のノードの後に入力として使用されていること。そのため、顧客ノードは同じ銀行状態で再びフローを開始できません。これにより、常に銀行がフローを開始し、顧客がそのフローに応答できるようになります。
正しい方法で説明していないようです... 1)銀行ノードが状態を作成してクライアントに送信します(つまり、FinalityFlowを使用して両方の元帳にコミットしました)。 2)クライアントノードのコピーは、(UNCONSUMED)状態になり、値を変更して銀行と顧客の元帳に送り返します。ここでは合計2つの銀行が顧客に、顧客は銀行にそれぞれ流れます。クライアントノードが2回目のフローを開始しようとすると、クライアントがバンクから入力された入力状態が不明なので、許可してはいけません。 – Omganesh
銀行ノードがトランザクションを受け取ったことを確認しました。しかし、私はその入力状態が消費されるのを見ません。ボールトの状態を手動で消費するように変更する方法を教えてください。 – Omganesh
状態は自動的に消費されたとマークされます。これはあなたが手動で行うことではありません。与えられた状態を消費するトランザクションをノードが認識するとすぐに、その状態は消費されたものとしてマークされます。 – joel