R3科尔达:如何在不透露交易历史的情况下与非验证公证人核对交易输入的有效性?

时间:2019-09-23 09:55:41

标签: transactions corda consensus

我想将Corda纳入我的一个项目中,以管理大量参与者之间的多个资产。在我的用例中,至关重要的是必须对资产的历史保密。

Corda文档提供了很好的概述,但是我仍然不理解如何与非验证公证人达成共识,而又不向参与交易的另一方显示资产的历史。

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

Corda中的共识有两个层次:

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

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

有效期共识包括由交易中涉及的每一方执行合同,并以签名形式提供有关交易结果的协议。

另一方面,

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

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

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

但是,这将要求Bob验证整个交易链,而Corda中的任何交易也是如此,这是必需的,因为Bob从未意识到所涉及的状态,因为他从未必须声明过验证确实是有效的。

这可能是违反隐私的行为,因此,查理(Charlie)可以使用进行交易的机密身份,从而将其身份隐藏在交易链中,因此,鲍勃(Bob)只会知道有一笔交易,爱丽丝(Alice)从一个匿名实体那里收到了10美元,而查理(Charlie)的身份不会被透露。

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

希望这能回答您的问题。