带有令牌和帐户的Corda

带有令牌和帐户的Corda,corda,Corda,我们正在与Kotlin合作Corda的token和帐户。我将详细说明场景以进行澄清。 我们有一个节点1和一个节点2。 我们创建了一个从TokenType扩展而来的“OurTokenType”。 我们在node1上创建了两个帐户(卖方和买方),并与node2共享它们。 根据应用程序的业务规则,node2是发行代币(FungibleToken)的人,并且发行工作正常。最后,节点1和节点2可以访问可替换房地产进行发行交易。 我们的问题在于这些代币的转让。当我们试图将代币从账户卖家转移到买家时。 在我们

我们正在与Kotlin合作Corda的token和帐户。我将详细说明场景以进行澄清。 我们有一个节点1和一个节点2。 我们创建了一个从TokenType扩展而来的“OurTokenType”。 我们在node1上创建了两个帐户(卖方和买方),并与node2共享它们。 根据应用程序的业务规则,node2是发行代币(FungibleToken)的人,并且发行工作正常。最后,节点1和节点2可以访问可替换房地产进行发行交易。 我们的问题在于这些代币的转让。当我们试图将代币从账户卖家转移到买家时。 在我们的场景中,令牌的传输可以发生在节点1或节点2上。 当我们通过帐户的宿主node1进行传输时,我们可以使用有效的MoveFungibleTokensFlow类,node1上的FungibleStates将更新为正确的值。但是,当我们在observerSessions参数中添加node2作为观察者时,node2上的可替换属性没有正确更新。 当我们使用MoveFungibleTokensFlow类通过node2(不是帐户的宿主)进行传输时,它不起作用,它会生成com.r3.corda.lib.tokens.selection.InsufficientBalanceException异常:识别的可用状态不足,即使有余额

我的问题是,我是否可以使用MoveFungibleTokensFlow类在帐户之间进行转账,即使它们位于另一台主机上? 当我们在托管帐户的节点上运行时,在使用observerSessions时更新FungibleStates有什么问题?
或者,如果我必须遵循链接的示例,请让我将您的问题分为两部分:

  • 观察者会话不会自动更新: 下面是我们如何触发观察员会话更新的示例: 这将确保在维护人员进行更新时更新观察者的令牌状态。(注意:只有维护人员才能进行更新,而不是所有者)

  • 双方之间的可替代代币转让:是。这是可行的。这一行代码是worldcupticketbooking示例中FungibleToken传输的开始:它确实有效


  • 我看到您提到您在
    UnficificientBalanceException
    上有一条错误消息,如果我是您,我会从那里开始深入研究,看看到底查询了哪个令牌

    让我把你的问题分为两部分:

  • 观察者会话不会自动更新: 下面是我们如何触发观察员会话更新的示例: 这将确保在维护人员进行更新时更新观察者的令牌状态。(注意:只有维护人员才能进行更新,而不是所有者)

  • 双方之间的可替代代币转让:是。这是可行的。这一行代码是worldcupticketbooking示例中FungibleToken传输的开始:它确实有效

  • 我看到您提到您在
    UnficificientBalanceException
    上有一条错误消息,如果我是您,我会从那里开始深入研究,看看到底查询了哪个令牌

    • MoveFungibleTokensFlow
      没有指定谁是移动令牌源的输入参数,这是因为它将流的发起方视为令牌源
    类MoveFungibleTokensFlow
    @JVM重载
    建造师(
    val partiesAndAmounts:列表,
    覆盖val参与者会话:列表,
    重写val observerSessions:List=emptyList(),
    val queryCriteria:queryCriteria?=null,
    val变更持有人:AbstractParty?=null
    ):AbstractMoveTokensFlow(){
    
    • FungibleToken
      中,关于“node1和node2都可以看到已发行的令牌”的说法不正确,唯一的参与者是令牌的
      持有者,因此当令牌被发行给卖方和买方账户时,唯一的参与者是托管这些账户的节点(即node1)

    • >p>回到我的第一点,因为只有NODE1具有发布令牌,并且您在NoDE2上运行移动流(流将NoDE2视为令牌的来源,但NoDE2没有它们);这就是为什么您得到的余额不足的错误。

    • 即使您在向买方和卖方发出令牌时添加了node2作为观察者(即node1和node2都具有生成的令牌);如果你深入挖掘
      MoveFungibleTokensflow
      的代码,它继承了
      AbstractMoveTokensFlow
      ,依赖于
      ObserverAwaRefinitialityFlow
      对交易进行签名,你会在
      ObserverAwaRefinitialityFlow
      内部看到它没有调用
      CollectSignatures
      流,它只对交易进行签名在本地执行操作(请参阅);意味着只有持有帐户私钥的节点才能在move命令上签名,并且由于node1是买卖双方的
      主机
      ;因此node1是私钥/公钥的所有者,只有node1可以代表买卖双方签名。因此,即使您与node2共享买卖双方帐户,也只有node1可以签名d由于您正在从node2(您的第二个场景)调用
      MoveFungibleTokensFlow
      ,当它到达需要代表卖家签名(移动其令牌)的部分时,它将失败,因为node2不拥有该帐户的私钥
    • 另一方面,当您从node1调用
      MoveFungibleTokesnFlow
      以将卖方的令牌移动到买方时,请确保为
      queryCriteria
      提供一个值,以仅选择属于卖方的令牌;如果不提供值,则流将拾取node1上托管的任何令牌,因此您可能最终移动属于其他帐户的代币
    • 另外,确保为
      变更持有人
      提供一个值,这样,如果您将其保留为空,则变更将返回给卖方;由此产生的任何变更都将分配给