java - Corda 账户 - 账户和主机节点之间的交易
问题描述
考虑他们是 PartyA 并且 account1 在 PartyA 中创建的场景。现在我们必须在 account1 和 PartyA 之间发起一个交易。是否可以有一个账户发起的交易流,接收方是一个主机节点?如果是的话,任何人都可以建议采取明智的编码步骤。如果有示例示例,请告诉我。
解决方案
- 一个流程总是由一个节点(即Party)启动,而不是由一个账户启动。
PublicKey
但是,节点可以使用账户的;代表账户签署交易。这就是你要找的。- 您的示例简化了此任务,因为该帐户托管在启动流程的同一节点上;所以你不需要响应者流。
所以事情会是这样的:
PartyA
启动您的流程。- 我假设您的状态之一是帐户;让我们假设它是:
MyState(myAccount: PublicKey)
- 您的流程将具有以下输入参数
UUID
:myAccount
class MyFlow(val myAccountId: UUID, ...
- 您将首先使用其 UUID 查询保管库以获取帐户:
val myAccountInfo = accountService.accountInfo(myAccountId)
?: throw IllegalStateException("Can't find account with Id $myAccountId")
- 为帐户请求新密钥:
val myAccountKey = subFlow(RequestKeyForAccount(myAccountInfo.state.data)).owningKey
- 创建你的状态:
val myState = MyState(myAccountKey)
- 现在最重要的部分是,创建您的状态的命令将需要 2 个签名:
PartyA
's(这是启动流程的节点,即ourIdentity
)和 的签名myAccountInfo
:
val command = Command(MyState.Commands.Create(),
listOf(ourIdentity.owningKey, myAccountKey))
- 我跳过了一些步骤,但是到了签署交易的时候;您将使用以下密钥
PartyA
(即流程的发起者ourIdentity
)和以下密钥对其进行签名myAccountInfo
:
val fullySignedTx = serviceHub.signInitialTransaction(txBuilder,
listOf(ourIdentity.owningKey, myAccountKey))
您可以查看使用Accounts Library实现的 IOU 示例;同样,在您的情况下,您不需要响应者流程;他们创建了一个响应程序流,以防borrower
帐户托管在与发起节点不同的节点上。请参见此处
的
示例。
推荐阅读
- django - django中的嵌套字典
- bash - 删除多个带有行号的iptables(for循环)
- java - 对两个条件查询使用相同的谓词
- android - 如何在 doInBackground() 函数之外访问我在 onLocationResult() 函数中获取的 pincode 变量?
- c# - C# 在列表中包含一个位置
- python-3.x - 同时对两个列表进行排序,但不使用选择排序
- c - 在 Linux 中使用默认 gcc 编译器时是否需要在 C 中释放指针?
- c# - Azure Function 计时器触发器能否迭代容器或目录中的所有 Blob?
- java - JAVA 和 JAVAFX 问题 - 尝试将附加控制器连接到主控制器
- javascript - 将 React 组件导出为数组的最简洁方法是什么?