transactions - R3 Corda:如何在不透露交易历史的情况下,通过非验证公证人检查交易输入的有效性?
问题描述
我想将 Corda 包含在我的一个项目中,以管理大量参与者之间的多种资产。在我的用例中,对资产历史保密是一项关键要求。
Corda 文档提供了一个很好的概述,但我仍然不明白如何在不向参与交易的另一方显示资产历史的情况下与非验证公证人达成共识。
示例:假设 Alice 在交易 A 中从 Charlie 那里收到 10 美元,现在想在交易 B 中给 Bob 20 美元。非验证公证人记录了交易 A,但不知道交易的价值是 10 美元(如果我理解的话这是正确的,https://docs.corda.net/key-concepts-notaries.html)。现在 Alice 在交易 B 中使用交易 A,公证人可以验证它之前没有被使用过。但是是什么阻止爱丽丝告诉鲍勃她在交易 A 中从查理那里收到了 20 美元?Bob 必须查看交易链来验证 Alice 是否真的可以花费 20 美元。因此,Bob 会知道现金的历史。
我想知道我是否误解了文档,或者这确实是一个问题。
谢谢!
解决方案
Corda 中的共识发生在两个层面:
- 有效性共识
- 唯一性共识
https://docs.corda.net/key-concepts-consensus.html
有效性共识涉及交易各方运行合同,并以签名的形式提供交易结果的协议。
另一方面,唯一性共识由公证人负责,在那里它检查双重支出。
因此,在您的示例中,公证人只会检查涉及 Alice 向 Bob 支付 20 美元的交易中使用的输入,公证人(非验证)无法检查共识的有效性部分,它只检查交易中使用的输入是否是否已经花费。
有效性部分,即 20 美元付款实际有效的部分,必须由双方在合同级别进行检查。他们需要检查输入状态下的现金数量是否应该等于交易输出状态下的现金数量。
然而,这将要求 Bob 验证整个交易链,这也是 Corda 中的任何交易的情况,这是必需的,因为 Bob 不知道有问题的状态,因为他从来不需要声明来验证它是确实有效。
这可能是隐私泄露,因此查理可以使用机密身份进行交易,这将在交易链中隐藏他的身份,因此鲍勃只会知道爱丽丝从匿名实体那里收到了 10 美元的交易,而查理的身份不会被揭露。
在 Corda 的未来版本中,节点可能只会以 SGX 加密的形式交换交易链。然后,这些交易链将在节点上的 SGX enclave 内进行验证。这将阻止节点查看他们正在验证的交易的内容(请参阅此处的博文:https ://www.corda.net/2017/06/corda-sgx-privacy-update/ )。这甚至可能只允许节点查看他们正在签署的交易的某些部分。
希望这能回答你的问题。
推荐阅读
- python - 索引 Python 打印语句
- windows - 用于备份 SQL Server 数据库的 Windows 批处理文件
- database - 在 MAMP 中与 Wordpress 建立数据库连接时出错
- ubuntu-18.04 - pip3 安装错误 - 新的 ubuntu 18.04 安装
- django - 无法向模型添加新列
- ubuntu-16.04 - 尝试在 64 位 Ubuntu Linux O/S 上运行 aarch64-gnu-linux-g++(64 位版本)时如何解决“没有这样的文件或目录”?
- asp.net - 将项目升级到 Visual Studio 2019 的问题
- uppaal - UPPAAL 中的多重同步
- reporting-services - Power BI 报表服务器自定义身份验证:在不同计算机中托管网页和 PBIRS 的 IIS
- nginx - Nginx 反向代理基本认证 Base64 Url 编码