首页 > 解决方案 > Corda - 确定哪个参与者发起了交易

问题描述

我一直在研究一些想法来确定 Corda 交易的发起人。这很难证明,因为交易可以由一个(证明微不足道)或更多(难以证明)方签署。

但是,我现在想知道交易本身是否有一些固有的东西可以用来简单地确定谁发起了交易。

当创建需要多个签名的交易时,我们调用CollectSignaturesFlow来获取交易对手的签名,但是如果我们在自己签署交易之前这样做,我们会得到以下异常:

CollectSignaturesFlow 的发起者必须已经签署了交易。

因此我可以假设交易中的第一个签名必须来自发起者的一些签名。假设它SignedTransaction.sigs[0]是事务发起者是否安全?

脚注1:抛出上述异常的代码是这样实现的:

require(partiallySignedTx.sigs.any { it.by in myKeys }) {
    "The Initiator of CollectSignaturesFlow must have signed the transaction."
}

这表明应用于交易的一个(或特别是多个)签名将属于发起者。

脚注 2:事务存储(序列化/反序列化)是否会对sigs列表的排序产生影响?- 如果它的顺序不是确定性的,那么我们不能依赖于sigs[0]成为发起者。

标签: corda

解决方案


给 r3 的朋友打了电话,来自 Alex Koller

我看了看这个问题,我不太清楚马修想要达到什么目标。AFAIK corda 不记录谁发起了交易,并且试图从 tx 上的签名顺序设计它现在或将来可能容易出错。一种可能性是查看公证人,看看谁要求公证。但这可能适用于少数用例。如果 tx 的持有者需要知道是谁发起了它,那么它可能必须记录在其中一种状态中。但是您显然无法从 tx 合约中证明状态值的正确性,因此必须由 tx 上的其他签名者来证明(在收集签名响应流程中,在交易对手签名之前)。我认为我们需要更多地了解他在做什么才能提供建议。


推荐阅读