【问题标题】:Accounts in corda科尔达账户
【发布时间】:2020-07-24 22:14:34
【问题描述】:

Corda 作为一个平台,如何处理一个人是否想将资产从一个账户转移到另一个账户的所有者? 或者其他有权访问节点的用户也可以访问节点上存在的任何帐户。

【问题讨论】:

  • 在附注中,请编辑您的帖子标题;把它变成一个独特的问题,而不是一个笼统的标题。

标签: corda


【解决方案1】:
  • 如果您查看AccountInfo 状态,它是帐户库的核心;它有一个属性host,即托管帐户的节点(创建帐户的节点)。
  • host 是代表帐户签名的Party,使用其密钥签名。
  • 例如,如果host 是流程的发起者,那么他们可以像这样代表帐户签名:(首先你调用accountKey = RequestKeyForAccount();然后getServiceHub().signInitialTransaction(txBuilder, accountKey.getOwningKey());
  • 现在,通常当发起者调用CollectSignaturesFlow 以便响应节点签名时;每个响应的节点都会检查交易中请求的密钥,并使用请求并且它拥有的所有密钥签署该交易。
  • 按照以上几点,如果发起者想要收集托管在另一个节点上的 10 个帐户的签名; host 节点不需要 10 个 FlowSession,您只需创建一个 FlowSession 并将其传递给 CollectSignaturesFlow。节点(即 10 个帐户中的 host)将在响应程序流中看到所有 10 个请求的密钥都归它所有,因此它将使用所有 10 个密钥(即代表 host 节点签名) 10 个帐户)。
  • 如果这 10 个帐户托管在不同的节点上(假设甲方有 5 个帐户,乙方有 5 个帐户);那么您必须创建 2 个FlowSession's(一个用于甲方,将代表 5 个帐户签名,一个用于乙方,将代表另外 5 个帐户签名)。

现在回到你原来的问题:

  • 如果您使用的是令牌 SDK:
    • 如果您使用的是就绪流(例如MoveFungibleTokens());那么只有托管“from-account”的节点才能启动流程。这样,托管帐户的节点会签署移动交易;这需要(通过合同)当前持有人(即“来自账户”)的签名,并且由于启动流程的节点托管该账户,它可以代表它签名。就绪移动流程 (MoveFungibleToken()) 内部没有 CollectSignaturesFlow() 调用,这意味着您无法启动该流程来移动属于未托管在启动节点上的帐户的令牌,因为该流程没有收集其他节点的签名,因此它无法收集“来自帐户”(即代币的当前持有者)的签名,因为它托管在不同的节点上。
    • 因此,使用流移动未托管在启动节点上的“来自帐户”的帐户的唯一方法是自己创建一个流,该流将使用令牌 SDK 的实用程序功能(例如 addMoveFungibleTokens() ) 然后使用CollectSignaturesFlow 收集“来自帐户”的签名,主机在响应流中对交易进行签名。
  • 如果您不使用 Tokens SDK,那么就像上面最后一点一样;您必须手动创建交易,并确保通过调用CollectSignaturesFlow 收集“来自账户”的签名,其中账户的host 在响应流程中代表其签名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2018-08-23
    • 2018-08-06
    相关资源
    最近更新 更多