首页 > 解决方案 > Corda 账户 - 账户和主机节点之间的交易

问题描述

考虑他们是 PartyA 并且 account1 在 PartyA 中创建的场景。现在我们必须在 account1 和 PartyA 之间发起一个交易。是否可以有一个账户发起的交易流,接收方是一个主机节点?如果是的话,任何人都可以建议采取明智的编码步骤。如果有示例示例,请告诉我。

标签: javacorda

解决方案


  1. 一个流程总是由一个节点(即Party)启动,而不是由一个账户启动。
  2. PublicKey但是,节点可以使用账户的;代表账户签署交易。这就是你要找的。
  3. 您的示例简化了此任务,因为该帐户托管在启动流程的同一节点上;所以你不需要响应者流。

所以事情会是这样的:

  1. PartyA启动您的流程。
  2. 我假设您的状态之一是帐户;让我们假设它是:
MyState(myAccount: PublicKey)  
  1. 您的流程将具有以下输入参数UUIDmyAccount
class MyFlow(val myAccountId: UUID, ...
  1. 您将首先使用其 UUID 查询保管库以获取帐户:
val myAccountInfo = accountService.accountInfo(myAccountId)
                ?: throw IllegalStateException("Can't find account with Id $myAccountId")
  1. 为帐户请求新密钥:
val myAccountKey = subFlow(RequestKeyForAccount(myAccountInfo.state.data)).owningKey
  1. 创建你的状态:
val myState = MyState(myAccountKey)
  1. 现在最重要的部分是,创建您的状态的命令将需要 2 个签名:PartyA's(这是启动流程的节点,即ourIdentity)和 的签名myAccountInfo
val command = Command(MyState.Commands.Create(), 
              listOf(ourIdentity.owningKey, myAccountKey))
  1. 我跳过了一些步骤,但是到了签署交易的时候;您将使用以下密钥PartyA(即流程的发起者ourIdentity)和以下密钥对其进行签名myAccountInfo
val fullySignedTx = serviceHub.signInitialTransaction(txBuilder, 
                    listOf(ourIdentity.owningKey, myAccountKey))

您可以查看使用Accounts Library实现的 IOU 示例;同样,在您的情况下,您不需要响应者流程;他们创建了一个响应程序流,以防borrower帐户托管在与发起节点不同的节点上。请参见此处
的 示例。


推荐阅读