90%人都不知道, 有这样一个能让你在链上隐身, 抹掉痕迹的神器 | 干货

640?wx_fmt=gif

640?wx_fmt=jpeg


加密货币的成功与否严重依赖于其生态系统的建设,区块链上围绕隐私的较量一直是一场没有硝烟的战争。这些匿名币在隐私保护方面取得的巨大成功还不足以弥补其开发阶段生态系统不完善带来的败笔。


如果能在比特币、以太坊这样生态系统完善的加密货币平台上实现匿名币的功能就好了。Chronos协议联合创始人、Aztec协议区块链工程师Paul Berg就实现了在以太坊上开发出匿名币功能。


那么,他是怎么做的?他的匿名币的隐私保护的效果又怎样?让我们在文章中一探究竟。


来源 | Paul Berg

编译 | 国玺

责编 | Aholiab

出品 | 区块链大本营(blockchain_camp)



众所周知,以太坊的区块链是公开可见的。也就是说,每当你转移ERC-20通证或任何其他的数字资产时都会在区块链上留下记录任何第三方都可以轻而易举地监控到这些记录。


同时,如果借助Etherscan、Blockscout这样的区块链浏览器,第三方还可以查到你全部区块链上活动的历史记录


可以说,你在区块链上的活动就好像是在“裸奔”,不过不要害怕,我们可以通过一些手段来保护自己的隐私。比如,你可以开通多个加密货币的帐户,但你必须时刻牢记不要让这些帐户产生关联。


就拿我们日常生活中时常见到的情况来说,如果突然出现一个账户钱不够的情况该怎么办?这些条条框框将成为你在使用加密货币时的噩梦。有没有一种更优雅的,更有技术含量的解决方案呢?


最好的办法,就是利用AZTEC(一个建立在以太坊之上的隐私协议)。在本篇文章中,我不会像你的高中老师一样一条条地为你讲述协议使用到的底层密码学技术。我们来聊点轻松的,聊聊这个协议的实际应用,也就是我们今天的主题——如何用AZTEC来开发隐私通证


可以不夸张的说,AZTEC这个协议就是我的心血。


在开始前,这里我假定你已经是一名“链圈”的老司机了,并对以下的一些常识有了最基本的了解:

  • 使用Truffle框架进行以太坊开发;

  • 零知识证明

  • 密码学和椭圆曲线加密(Ellipse Curve Cryptography)


同时,请确保你的计算机上装有node.js和npm ,接下来我们使用npm来安装Truffle框架,只需一行指令:


 
 

640?wx_fmt=png


说完了最基本的区块链常识,现在我们上点干货,来聊聊核心的技术概念。



了解AZTEC协议


如果把以太坊比作一个国家,那么AZTEC协议就是一片森林


在以太坊这个国家中,人们通过去中心化应用进行交互和财务往来,还可以自由地搬到想去的城市(自由选择钱包软件)。我认为AZTEC协议就是这个国家里的一片宁静森林人们可以来到森林里躲避追踪,在进入森林前你的区块链上活动都是公开可见的,而一旦踏入了森林,你所有的交易都是保密的


就像下面这张美丽的风景图,就可以代表我所说的进入AZTEC协议的理念。在正常情况下,你的区块链上活动就如同这张图中的风景一样清晰可见,而一旦穿越了图中的拱门,整个世界(以太坊)就会逐渐模糊,并最终被森林( AZTEC 协议)隐藏


640?wx_fmt=jpeg


AZTEC中有一个基本概念,叫记录(notes)。记录是该协议中的“一等公民”和核心原语(操作系统或计算机网络用语范畴,是由若干条指令组成的,用于完成一定功能的一个过程)。


当你使用零知识证明技术进行交易时,智能合约中不会存储任何的余额信息,仅仅存储椭圆曲线点(密码学上的概念,可以简单地理解为零知识证明机制的组件),而椭圆曲线点对于没有私钥进行解密的第三方来说都只是计算噪声。


很重要的一点是,我们要正确地区分最常见的ERC-20标准和AZTEC协议的隐私通证标准ERC-1724。


从原理上来说,前者存储了以太坊地址和未加密余额之间的映射,而后者对余额进行了加密。我喜欢将AZTEC记录比作比特币的UTXO(Unspent Transaction Output,即未使用的交易输出)模型,因为在AZTEC上花费记录的过程与它非常相似。


640?wx_fmt=jpeg


以下是一个记录中的内容,我们可以按照可见性将它们分类:

  • 公开可见的(Public):拥有者、加密后的金额

  • 仅用户可见的(Private):花费的密钥、金额


为了节省时间,在这里我们不过多地去讲那些花里胡哨的密码学技术。不过在进行编程之前,你需要注意的是AZTEC协议需要一个可信任的设置。本篇文章先暂时使用我们团队内部生成的可信任设置,这里仅作为介绍,由于生产环境情况十分复杂,不同情况还需要不同对待。



敲代码的部分来了


首先,按照如下命令复制代码库并安装node模块:


 
 

640?wx_fmt=png


在这个过程中,控制台中可能会弹出很多关于scrypt和keccak这两种哈希函数的信息,不要在意,因为我们用到了aztec.js,而它调用了以太坊的web3.js库,从而生成了一些关于密码学的依赖项。


在实际运行展示程序之前,你还需要执行以下几个重要步骤:


  • 在存放源代码的src文件夹中创建一个accounts.js文件,在其中只需要设置两个帐户,具体的设置方法你可以参考一个名为accounts.js.example的示例文件;

  • 在项目的根目录下创建一个.env文件,并使用下面的属性填充它。同样的,文件夹中也包含一个名为.env.example的示例文件;

  • 将包含隐私通证的智能合约部署到以太坊测试网络Rinkeby上,你可以使用Truffle框架来执行这一操作:


 
 

640?wx_fmt=png


接下来是部署环境变量,可以按照如下步骤:

  • CONFIDENTIAL_TOKEN_ADDRESS(隐私通证地址):请注意实际智能合约的名称是ZKERC20,在Truffle框架成功部署智能合约后你会得到这个

  • MNEMONIC(助记符);

  • INFURA_API_KEY:INFURA托管节点的API访问密钥。


完成上述步骤之后,现在,你的项目应该是这样的:


640?wx_fmt=png


接下来运行这个展示程序:


 
 

640?wx_fmt=png


中间需要等待一段时间,因为交易被发送到了以太坊测试网络Rinkeby上。几分钟后,你会在控制台中收到一份收据清单。恭喜你,你刚刚在以太坊上进行了第一次隐私通证的转移!


现在,让我们来看看src / demo.js中的源代码。



创建记录


可以通过以下代码来实现:


 
 

640?wx_fmt=png


具体的步骤如下:

  • 生成一些随机帐户,这里我们必须使用椭圆曲线"secp256k1”来生成公钥私钥对,因为AZTEC协议需要帐户的公钥,而不仅仅是它们的地址;

  • 创建4个记录,前两个记录属于第一个帐户,后两个从初始总共10个通证中转移8个到第二个帐户。

为了更好地理解第2步,请回想一下我们刚才说到的,AZTEC的记录与比特币UTXO模型相似的性质。当一个人转移资金时,他必须把余额转换成一组新的记录,这与使用平衡模型的以太坊的交易规范相反。


此外,我将以太坊中使用的帐户(src / accounts.js中的帐户)与随机生成的AZTEC帐户区分开来(演示脚本生成了一个名为aztecAccounts.json的文件)。



创建对象的证明


 
 

可以通过以下代码来实现:


640?wx_fmt=png


上面这些代码证明了:

  • 声明所有者publicOwner很乐意将10个公共可见的ERC-20通证转换为AZTEC隐私通证;

  • 第一个随机生成的AZTEC帐户成为通证新的所有者,回想一下,前两个记录每个值为5个通证,并且都由该AZTEC帐户拥有。


再来看看另一组代码:


 
 

640?wx_fmt=png


上面代码证明了:

  • 以完全成熟的零知识证明形式将8个通证转移到第二个AZTEC账户;

  • 销毁前两个输入的记录,从而第一个AZTEC帐户将来不能再重复使用它们。


640?wx_fmt=png


我们需要这些代码来与名为“NoteRegistry“(记录注册)的智能合约进行交互,这个智能合约是每个隐私通证智能合约所特有的。你可以将代码中的proofHashes视为先前生成证明的唯一标识符列表。



批准


 
 

640?wx_fmt=png


在代码中,我们制作了一些通证并授予NoteRegistry智能合约从ERC-20智能合约中支出它们的权限。


 
 

640?wx_fmt=png


就像ERC-20一样,NoteRegistry需要被授予使用AZTEC证明的权限。我们承认这是一个需要积极研究的领域,我们也正在研究大幅度提升用户体验的方法。



转移通证


 
 

640?wx_fmt=png


最后,也是最有趣的部分:调用隐私通证智能合约进行通证转移。


请注意,第一笔交易仅转移ERC-20通证,因此第三方可以分析得到转移的通证数。但第二笔交易就是完全保密的了。


以下是我们本篇文章所有操作逻辑的思维导图:


640?wx_fmt=png


写在最后


在触发隐私通证转移之前,需要进行大量的预先批准。正如前面说到的,这是我们接下来改进的方向。


AZTEC协议使用的Solidity版本是0.4.24,因此你在使用OpenZeppelin库时需要指定与之兼容的版本,即2.0.0。


当AZTEC智能合约只有一个用户时,隐私性就会大大降低。由于通过ERC-20通证存入的钱是在区块链上公开可见的,因此第三方可以将其与智能合约持有的总金额进行比较从而大致推测出用户的交易。也就是说,越多的用户加入 AZTEC ,它的隐私性就越好。


以下是在本文中AZTEC协议所使用程序包的详尽清单:

aztec.js

@aztec/contract-addresses

@aztec/contract-artifacts

@aztec/dev-utils

@aztec/protocol


我们的主干程序库monorepo 中提供了所有这些程序的源代码。


资源拓展


如果你喜欢这个教程,或者对隐私交易十分感兴趣,或者想了解更多内容。


可以请查看以下两笔以完全成熟的零知识证明形式,使用一些AZTEC证明转移10个ERC-20通证的交易:


640?wx_fmt=png


地址:

https://rinkeby.etherscan.io/tx/0x85ab17ab8290bad0d91501083c571a63e8715a0d425828df4c0b36accb11d077


https://rinkeby.etherscan.io/tx/0xf5dbaf357e09abf2d4151974bdfae5e20317043b155ff653b03fbd137c940a84



 640?wx_fmt=gif


免费技术公开课报名啦~

搞定区块链安全问题 | 挑战高薪区块链工程师

640?wx_fmt=jpeg


推荐阅读:


猛戳"阅读原文"有惊喜哟!


老铁在看了吗??


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值