使用 CORDA 流创建原子事务的最佳方式

Best way to create Atomic Transactions using CORDA Flows

我有一个用例,我需要向多个交易方发送数据,但交易方需要彼此保持匿名。从对方那里收回背书后,我需要提交整个交易。需要保持整个事务的原子性

使用 Flows 实现此目标的最佳方法是什么。

为此,您需要使用保密身份。机密身份在状态中表示为 AnonymousParty class:

class MyState(val party: AnonymousParty): ContractState {
    override val participants = listOf<AnonymousParty>(party)
}

PartyAnonymousParty 之间的区别在于 AnonymousParty 仅通过 public 键识别参与者。只要每个交易参与者为交易生成一个新的 public 密钥,他们的身份以及他们对状态的参与都是保密的。

要创建涉及机密身份的交易,您必须执行以下操作:

  • 发起流程的一方 - 让我们称她为爱丽丝 - 必须知道所有交易对手的身份(知道从谁那里收集签名)
  • Alice 与每个交易对手一起运行 SwapIdentitiesFlow 以自动为所有参与者创建机密身份
  • Alice 在构建交易时使用这些机密身份
  • Alice 收集所有交易对手的签名
  • 爱丽丝完成交易

每一方最终都会在他们的保险库中进行交易,但每一方都只通过匿名 public 密钥进行识别,因此每一方的参与都对他们的同行保密。

您可以在此处找到有关此 API 的文档:https://docs.corda.net/api-identity.html. You can find an example usage of confidential identities here: https://github.com/joeldudleyr3/whistleblower