Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能

2023-09-16 23:31:59

1. 引言

前序博客有:

Aztec.nr,为:

  • 面向Aztec应用的,新的,强大的智能合约框架
  • 使得开发者可直观管理私有状态
  • 基于Noir构建,Noir为Aztec Labs作为核心贡献者开发的通用zk编程语言。
  • 使得开发者使用Noir来编写隐私智能合约,并借助模块化函数来扩展其功能,并简化状态管理。
  • 未来将为开发者提供Solidity的智能合约功能和语法。

开源代码实现见:

2. Aztec.nr要点

Aztec.nr框架帮助处理复杂的note管理,note管理对于在智能合约开发中实现隐私保护 至关重要。
同时,开发者无需在每次编写Noir程序时,从头构建智能合约功能。

若没有Aztec.nr,将:

  • 无法释放事件
  • 无法调用其它合约
  • 无法实现合约甚至地址概念
  • 没有msg.sender
  • 无法访问链上历史记录

当前开发者可访问的完整智能合约特性有:

  • 合约(包括callable合约函数,以及合约内部函数调用)
  • 持久状态变量
  • 合约地址语义
  • 访问msg.sender,以及其它调用上下文信息
  • 访问交易上下文信息
  • 访问链上历史数据
  • 时间(logs)(支持加密和非加密)
  • 密码学原语
  • 跨链(L1->L2和L2->L1)消息传输

相关示例有:

3. Aztec.nr原理

Aztec Labs团队有两个非常坚定的信念:

  • 隐私可解锁下一阶段应用爆发。对于链上的日常用户、企业和机构来说,将每一个地址、交易和余额都以明文形式公开是不可能的。
  • 隐私用户体验必须比区块链中现有的技术状态更好。只有在使用体验比现在更好的情况下,隐私保护技术才有用。

在这里插入图片描述
Aztec.nr框架是改进开发者管理隐私状态的重要步骤,单纯Noir并没有相应功能。

简单的隐私token合约为例,Aztec.nr包括以下helper函数:

  • get_balance
  • increment
  • decrement等等

换句话说,在标准token合约内应调用类似函数。

隐私note的管理流程为:
在这里插入图片描述
如Alice想给Bob转账:

  • Alice聚合其所有待发送资产的现有的non-nullified notes,将这些note值求和,若Alice有足够的金额,则会创建一个change note来调和其余额。

而Aztec.nr会让其更易于管理。以简单的隐私token合约为例中的decrementdecrement_by_at_most函数为例。
decrement_by_at_most函数的流程为:

  • 1)找到待decrement的notes。该函数首先获取owner拥有的一些notes来累加max_amout
    在这里插入图片描述
  • 2)销毁所选中的notes。遍历选中的notes并销毁这些notes,将这些notes求和值添加到decremented变量中:
    在这里插入图片描述
  • 3)处理change note。若销毁的notes总值(decremented)大于max_amount,则为超出值创建一个新的note(change_value),并将其分配给该owner。
    在这里插入图片描述
  • 4)返回Decrement。最终,该函数发送(存储于decremented中)所decremented的总值。

decrement中则展示了如何使用Aztec.nr中内置的get, insert,replace, remove函数来管理notes和nullifiers。

若开发者想不使用Aztec.nr来编写这些功能(即,使用纯的非智能合约Noir来编写),则开发者需编写自己的Merkle tree来插入,并为notes提供membership roof,为nullifiers提供non-membership proof。

而借助Aztec.nr,开发者无需关心如何重构核心隐私原语,这些Aztec团队都以帮其实现了。开发者仅需专注于智能合约逻辑实现即可。

Aztec团队很快将给开发者发布一个本地开发环境,基于本地Aztec节点实例,来编写和测试Aztec智能合约。在不久的将来,借助Aztec.nr所提供的功能,开发者也将获得丰富的开发工具来基于Aztec构建智能合约和应用。

Noir相关入门资料可参看:

参考资料

[1] Aztec团队2023年9月博客 Introducing Aztec.nr: Aztec’s Private Smart Contract Framework

Aztec系列博客

更多推荐

vvic API接口接入说明:解锁新一代数据可视化的无限可能

随着大数据时代的来临,数据可视化已成为我们理解、分析和呈现复杂数据的重要手段。在这个领域中,vvic以其独特的优势,引领着数据可视化的发展潮流。其强大的API接口,更是为开发者提供了无限可能,让数据可视化变得更为简单、直观和生动。vvicAPI接口是一个高度灵活、易于使用的工具,旨在帮助开发者快速创建出美观、功能丰富的

web应用及微信小程序版本更新检测方案实践

背景:随着项目体量越来越大,用户群体越来越多,用户的声音也越来越明显;关于应用发版之后用户无感知,导致用户用的是仍然还是老版本功能,除非用户手动刷新,否则体验不到最新的功能;这样的体验非常不好,于是我们团队针对该问题给出了相应的解决方案来处理;技术栈:vue3+ts+vite+ant-design-vue1.web应用

视屏点播项目

项目背景大家应该在电脑上刷过视频吧,这个项目就是模拟一下我们刷视频的整个流程,我们要做的是一个类似B站的网页,这里面包含视频的上传修改和观看以及删除,注意我这个是一个简易版本的,在后面我会做一个升级,增加其他的功能.基本原理下面我们说一下我们项目的基本原理.我们这里做的是服务器客户端类型的项目.当客户端发起请求之后,我

PyTorch中的pyi檔案生成機制

PyTorch中的pyi檔案生成機制前言pyi檔由py生成pyi.in由pyi.in生成pyitorch/CMakeLists.txttools/pyi/gen_pyi.pygen_pyinative_functionsrand.names&rand.names_outrand.generator_with_names

Linux文件编程(lseek函数和stat函数)

文章目录前言一、lseek函数二、stat函数总结前言本篇文章来讲解lseek函数和stat函数,lseek函数主要用来设置文件偏移量,stat函数主要用来获取文件属性。一、lseek函数lseek函数用于在打开的文件中移动文件指针的位置。它可以用于设置文件的读写位置或查找特定位置的数据。函数原型如下:#include

Linux 系统下 CMake 示 例

CMake是一个开源的跨平台工具,可以构建、测试和打包软件。它具有如下特性:自动搜索可能需要的程序、库和头文件的能力;独立的构建目录(如build),可以安全清理;支持复杂的自定义命令(下载、生成各种文件);自定义配置可选组件;从简单的文本文件(CMakeLists.txt)自动生成工作区和项目的能力;在主流平台上自动

Linux之Shell进阶(变量和条件判定语句)

文章目录变量变量的含义变量的定义与使用(重点)只读变量接收用户输入删除变量条件判断语句变量变量的含义什么是量?量就是数据.什么是变量?数据可以发生改变就是变量。在一个脚本周期内,其值可以发生改变的量就是变量。什么叫做一个脚本周期?一个脚本周期我们可以简单的理解为当前的shell文件。变量是shell中不可或缺的一部分,

C#中的方法

引言在C#编程语言中,方法是一种封装了一系列可执行代码的重要构建块。通过方法,我们可以将代码逻辑进行模块化和复用,提高代码的可读性和可维护性。本文将深入探讨C#中的方法的定义、参数传递、返回值、重载、递归等方面的知识,并结合实际案例介绍方法的应用。方法的定义和调用:1.1方法是什么:方法是一个包含一组语句的代码块,用于

学习python和anaconda的经验

PYTHON1常用命令1.11.1注释Python注释多行的方法有以下三种:使用ctrl+/实现多行注释、在每一行的开头使用shift+#键、输入’‘’‘’'或者"“”“”",将要注释的代码插在中间1.2definit():函数区分两个函数:1.definit(self):这种形式在__init__方法中,只有一个se

【LeetCode-面试经典150题-day24】

目录35.搜索插入位置74.搜索二维矩阵162.寻找峰值33.搜索旋转排序数组35.搜索插入位置题意:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法。【输入样例】nums=[1,3,5,6],target

Linux性能调优 —— 内存篇

Linux性能调优——内存篇Linux内存的工作原理内存映射的概念虚存空间分布内存分配与回收分配回收内存查看与分析查看内存使用情况命令:free命令:vmstat命令:top分析单个进程命令:ps-pLinux内存的工作原理内存映射的概念大多数计算机用的主存都是动态随机访问内存(DRAM),只有内核才可以直接访问物理内

热文推荐