R3 Corda:如何在不泄露交易历史的情况下,通过非验证公证人检查交易输入的有效性?

R3 Corda: How is the validity of a transaction input checked with non-validating notaries without revealing the history of the transaction?

我想将 Corda 包含在我的一个项目中,以管理大量参与者之间的多个资产。在我的用例中,对资产历史保密是一项关键要求。

Corda 文档提供了很好的概述,但我仍然不明白如何在不向参与交易的另一方显示资产历史的情况下与非验证公证人达成共识。

示例: 假设爱丽丝在交易 A 中从查理那里收到 10 美元,现在想在交易 B 中给鲍勃 20 美元。非验证公证人记录了交易 A,但不知道交易的价值是 10 美元(如果我理解正确的话) , https://docs.corda.net/key-concepts-notaries.html).现在 Alice 在交易 B 中使用了交易 A,公证人可以验证它之前没有被使用过。但是,是什么阻止了爱丽丝告诉鲍勃她在交易 A 中从查理那里收到了 20 美元? Bob 将不得不查看交易链以验证 Alice 是否真的可以花费这 20 美元。因此,鲍勃会知道现金的历史。

我想知道我是否误解了文档或者这是否确实是一个问题。

谢谢!

Corda 的共识发生在两个层面:

  • 有效性共识
  • 唯一性共识

https://docs.corda.net/key-concepts-consensus.html

有效性共识涉及运行交易各方的合约,并以协议形式提供交易结果的协议供签名.

另一方面,

唯一性共识由公证人负责,检查双花。

因此,在您的示例中,公证人只会检查涉及 Alice 向 Bob 支付 20 美元的交易中使用的输入,公证人(非验证)无法检查共识的有效性部分,它只检查是否交易中使用的输入是否已经花费。

有效性部分,即 20 美元的付款实际有效,必须由双方在合同层面进行检查。他们需要检查输入状态的现金数量应该等于交易输出状态的现金数量。

然而,这将需要 Bob 验证整个交易链,Corda 中的任何交易也是如此,这是必需的,因为 Bob 不知道所讨论的状态,因为他以前从来不需要声明验证它确实有效。

这可能会侵犯隐私,因此查理可以使用机密身份进行交易,这会在交易链中隐藏他的身份,因此鲍勃只会知道有一笔交易,爱丽丝从匿名实体那里收到了 10 美元查理的身份不会被透露。

在 Corda 的未来版本中,节点可能只会以 SGX 加密形式交换交易链。然后,这些交易链将在节点上的 SGX 飞地内进行验证。这将防止节点看到他们正在验证的交易内容(请参阅此处的博文:https://www.corda.net/2017/06/corda-sgx-privacy-update/)。这甚至可能只允许节点看到他们正在签署的交易的某些部分。

希望这能回答您的问题。