Actuellement, nous prévoyons d'avoir une version «Brouillon» du contrat qui ne sera pas envoyée à la contrepartie et l'initiateur peut apporter des modifications avant de l'envoyer au réseau, donc cela devrait être comme un "fait non partagé". Comme nous le savons Corda et le coffre-fort sont utilisés pour des faits partagés, je ne sais pas si nous pouvons toujours utiliser le coffre-fort pour stocker ce type de "non-partagé", mon idée ci-dessous et je peux déjà faire ce travail dans ma base locale. sur le tutoriel CorDapp, mais aimerait obtenir des contributions d'autres équipes/experts de Corda.Comment définir un fait non partagé dans Corda
Le principal changement est dans le flux initiateur:
- Initier la seule de commande créer avec de clé
- l'initiateur Ne pas invoquer la « CollectSignaturesFlow » donc ce ne sera pas envoyé à tous les autres
- Appelez "FinalityFlow" après le verify(), donc ce sera engagé dans le ledger
Ci-dessous les codes pour les points mentionnés ci-dessus.
override fun call(): SignedTransaction {
// We create a transaction builder
val txBuilder = TransactionBuilder()
val notaryIdentity = serviceHub.networkMapCache.getAnyNotary()
txBuilder.notary = notaryIdentity
// We create the transaction's components.
val ourIdentity = serviceHub.myInfo.legalIdentity
val iou = TemplateState(iouValue, ourIdentity, ourIdentity)
val txCommand = Command(TemplateContract.Create(), listOf(ourIdentity.owningKey))
// Adding the item's to the builder.
txBuilder.withItems(iou, txCommand)
// Verifying the transaction.
txBuilder.toWireTransaction().toLedgerTransaction(serviceHub).verify()
// Signing the transaction.
val partSignedTx = serviceHub.signInitialTransaction(txBuilder)
// Finalising the transaction.
return subFlow(FinalityFlow(partSignedTx)).single()
}
Merci Roger pour ce commentaire. Donc revenons à notre version "Brouillon" du contrat, même si ce n'est pas un fait partagé, mais c'est un fait qui est stocké dans le coffre-fort, donc pour le mettre à jour ou même le supprimer, nous devons toujours utiliser entrée et sortie ne devrait pas mettre à jour ou supprimer les données d'origine du coffre-fort, Corda lui-même ne fournit également aucune fonction pour mettre à jour/supprimer physiquement un état. Ai-je raison? –
Et Roger, je viens de remarquer que dans le projet principal de Corda, le flux de démonstration de papier commercial, il a une fonction 'selfIssueSomeCommercialPaper' qui utilise' serviceHub.recordTransactions (listOf (tx)) 'pour enregistrer la transaction et son état de sortie vers Vault, au lieu de 'FinalityFlow', est-ce une autre approche que nous pouvons utiliser? –
A votre premier commentaire - oui! Pour le mettre à jour et/ou le supprimer, vous utiliserez une transaction. A votre deuxième commentaire. Je recommande d'utiliser 'FinalityFlow' sur' recordTransactions'. 'FinalityFlow' attrape le notaire, si nécessaire, puis distribue le tx à toutes les parties requises en appelant' BroadcastTransactionFlow'. Les destinataires reçoivent 'NotifyTransactionHandler' (en réponse à' BroadcastTransactionFlow') qui résout ensuite les dépendances de tx et stocke la transaction. –