当前位置: 首页 > news >正文

完全保密的以太坊交易:Aztec网络的隐私架构

1. 引言

Aztec为隐私优先的以太坊zkRollup:即其为具有完全隐私保护的L2。
为了理解私有交易的范式变化性质,以及为什么将隐私直接构建到网络架构中很重要,必须首先讨论为什么以太坊不是私有的。

2. 以太坊:公有链

以太坊为具有包含accounts和balances的公共账本。
以太坊上最primitive的交易是由一个账号发送Ether给另一账号。网络跟踪这一情况的方式是增加一个账户的余额,减少另一个账户——换句话说,ETH在任何意义上都不会真正“移动”。
以太坊通过accounting ledger来表示简单的ETH transfer。
在这里插入图片描述
破解公共交易图是一项大生意:Chainalysis和Nansen等公司运行复杂的取证分析,将各种钱包关联起来,监控活动,并对谁拥有什么进行概率假设。
想象一下,如果你每次刷信用卡买羊角面包时,都向世界上每个人展示你的银行对账单。那就太傻了,对吧?
这就是今天以太坊的现状。

3. 加密账号

借助加密账号和加密交易,账本看起来将是:
在这里插入图片描述
以太坊的默认账号模型是:

  • 某account 拥有 某balance。

而Aztec则表示为:

  • 一定数量的money(即note) 具有 某owner。

在这里插入图片描述
Aztec采用的是与比特币一样的UTXO(Unspent Transaction Output)模式。可将UTXO看成是cash(bank notes)。

为什么现金本质上更安全、更私密——或者更准确地说,比基于账户的系统更安全、更有私密性?原因在于:

  • 只有现金交易的双方,才知道所有权已更改。而整个宇宙的其它每个人都不知情。

可将现金交易看成是:

  • 某对象(即note)的所有权改变

而将账号交易看成是:

  • 对2个账号状态的更改。

在这里插入图片描述
在处理Aztec交易时,不是对账号余额进行更新(增加和减少balance),而是Aztec网络简单的对某特定note重新分配所有权。

原因在于,对note加密是更简单的方案,仅需要对其写入2件东西:

  • 该note价值多少?
  • 谁拥有该note?

将换手时,仅需要划去老的owner名,再写入新的owner名。

为避免造出空气币,为保持token守恒,Aztec交易为join-split交易,需满足:
A + B = C + D A+B=C+D A+B=C+D
可借助ZKP技术来证明 A + B = C + D A+B=C+D A+B=C+D,而不泄露交易前后各个参与方的values。

同时为确保花费的是用户所拥有的token,需prove ownership——借助Merkle tree。

Aztec系统中有2种merkle tree:

  • note tree:包含所有已创建的notes。
  • nullifier tree:包含所有已销毁的notes。
    在这里插入图片描述

在Aztec中,拥有某note,是指该note存在于note tree中,但在nullifier tree中不存在相应的note-nullifier。
而销毁note是指,将a nullifier添加到nullifier tree中,而不是从note tree中删除该note。

在这里插入图片描述
为了发送已经证明自己拥有的notes,创建了一个全新的Merkle树(和Merkle根)。一旦注释树和无效树的Merkle根都移动到了新的值——换句话说,系统的状态已经更新——这些根就会在以太坊的主链上发布(结算),交易就会被视为已记录。

构建完全保密的以太坊交易的挑战在于:

  • 需 在不侵犯或暴露用户数据的情况下,验证交易是合法的并且正确执行的。

参考资料

[1] Aztec 2021年博客 Fully Confidential Ethereum Transactions: Aztec Network’s Privacy Architecture

Aztec系列博客

  • Aztec Hybrid Rollup:混合zkRollup,而非zkEVM
  • Proof Compression
  • Aztec Connect即将主网上线
  • Aztec connect bridge代码解析
  • Aztec 征集 Rollup Sequencer去中心化提案
  • Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
http://www.lryc.cn/news/167883.html

相关文章:

  • 初识Java 9-1 内部类
  • 合宙Air724UG LuatOS-Air LVGL API控件-屏幕横屏竖屏切换(Rotation)
  • 在Unity中,Instantiate函数用于在场景中创建一个新的游戏对象实例
  • 解决 tesserocr报错 Failed to init API, possibly an invalid tessdata path : ./
  • 使用Python CV2融合人脸到新图片--优化版
  • Python分享之对象的属性
  • 编程参考 - std::exchange和std::swap的区别
  • Sentinel整合RestTemplate
  • 微前端学习(下)
  • Android Splash实现
  • FPGA projet : VGA
  • JDK8 升级至JDK19
  • Python3.10 IDLE更换主题
  • C# OpenVino Yolov8 Pose 姿态识别
  • 北邮22级信通院数电:Verilog-FPGA(1)实验一“跑通第一个例程” 过程中遇到的常见问题与解决方案汇总(持续更新中)
  • CSS - 鼠标移入整行高亮显示,适用于会员套餐各参数对比页面(display: table,div 转表格形式)
  • 无涯教程-JavaScript - ATAN2函数
  • Tomcat 下部署 jFinal
  • 【Spatial-Temporal Action Localization(二)】论文阅读2017年
  • 二维码智慧门牌管理系统:数据现势性,满足应用需求的根本保证
  • BF算法(C++)简单讲解
  • JVM 虚拟机 ----> Java 类加载机制
  • 《protobuf》基础语法2
  • 利用 SOAR 加快事件响应并加强网络安全
  • uni-app:通过ECharts实现数据可视化-如何引入项目
  • string 模拟与用法
  • [NLP] LLM---<训练中文LLama2(一)>训练一个中文LLama2的步骤
  • 华为云云耀云服务器L实例使用教学 | 利用华为云服务器搭建--> 基于Spring Boot+WebSocket+WebRtc实现的多人自习室
  • Postman应用——接口请求(Get和Post请求)
  • k8s pod概念、分类及策略