gpt4 book ai didi

java - Corda 账户 - 账户和主机节点之间的交易

转载 作者:行者123 更新时间:2023-12-01 17:41:21 27 4
gpt4 key购买 nike

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

最佳答案

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

所以事情看起来是这样的:

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

    您可以看一下使用Accounts Library实现的IOU示例;再说一遍,在您的情况下,您不需要响应者流程;他们创建了一个响应者流程,以防借款人帐户托管在与发起节点不同的节点上。
    参见示例here .

    关于java - Corda 账户 - 账户和主机节点之间的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945701/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com