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

1. 引言

前序博客有:

  • Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私

Aztec.nr,为:

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

开源代码实现见:

  • https://github.com/AztecProtocol/aztec-nr(Noir)

2. Aztec.nr要点

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

若没有Aztec.nr,将:

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

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

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

相关示例有:

  • swap合约示例
  • lending合约示例
  • 卡牌游戏合约示例

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相关入门资料可参看:

  • https://github.com/noir-lang/noir-starter
  • Noir doc
  • Aztec论坛

参考资料

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

Aztec系列博客

  • Aztec Hybrid Rollup:混合zkRollup,而非zkEVM
  • Proof Compression
  • Aztec Connect即将主网上线
  • Aztec connect bridge代码解析
  • Aztec 征集 Rollup Sequencer去中心化提案
  • Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私
  • 完全保密的以太坊交易:Aztec网络的隐私架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车ECU软件升级方案介绍

软件OTA的背景 随着汽车网联化的发展,现在的汽车电子架构都支持软件空中升级,即大家常说的OTA(Software Update and Upgrade Over the Air),传统的软件升级常常是离线升级,需要车主将车开到维修保养中心进行软件更新。不过OTA升级方式带来方便之处需要考虑的问题也随之增…

LeetCode2.两数相加

一看完题,我的想法是先算出这两个链表表示的数,然后相加,然后把这个数一位一位的分配给第三个数组,这种方法应该很简单但是要遍历三次数组,于是我就想直接一遍遍历,两个链表同时往后面遍历,把这…

基础篇之SDK编译

文章目录 一、 Ubuntu系统固件下载1. 固件下载2 放入SDK根目录中 二、编译SDK三、说明 一、 Ubuntu系统固件下载 1. 固件下载 在资源下载页面下载Ubuntu Rootfs固件,文件夹有三个文件,其区别如下,根据情况进行选择下载 资源名称作用Ubuntu2…

MySQL里的查看操作

文章目录 查看当前mysql有谁连接查看数据库或者表 查看当前mysql有谁连接 show processlist;查看数据库或者表 列出所有数据库: show databases;查看正在使用的数据库(必须大写): SELECT DATABASE();列出数据库中的表&#xf…

免费开箱即用的微鳄任务管理系统

编者按:基于天翎低代码平台实现的微鳄365任务管理系统,包括有发起任务、重点关注、日程、项目管理等功能,支持私有化部署,免费开箱即用。任务管理系统是组织工作中不可或缺的工具,可以提高工作效率、促进协作、增强任务…

强大的JTAG边界扫描(5):FPGA边界扫描应用

文章目录 1. 获取芯片的BSDL文件2. 硬件连接3. 边界扫描测试4. 总结 上一篇文章,介绍了基于STM32F103的JTAG边界扫描应用,演示了TopJTAG Probe软件的应用,以及边界扫描的基本功能。本文介绍基于Xilinx FPGA的边界扫描应用,两者几乎…

华为云云耀云服务器 L 实例评测|配置教程 + 用 Python 简单绘图

文章目录 Part.I IntroductionChap.I 云耀云服务器 L 实例简介Chap.II 参与活动步骤 Part.II 配置Chap.I 初步配置Chap.II 配置安全组 Part.III 简单使用Chap.I VScode 远程连接华为云Chap.II 简单绘图 Reference Part.I Introduction 本篇博文是为了参与华为“【有奖征文】华…

Java手写希尔排序和算法案例拓展

Java手写希尔排序和算法案例拓展 1. 希尔排序的思维导图和实现思路原理 #mermaid-svg-d8kw3WO2lcmScRAo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-d8kw3WO2lcmScRAo .error-icon{fill:#552222;}#mermaid-svg-…

力扣207、课程表 【图】

题目 课程与课程之间的先决条件组成有向图,课程是图中的顶点,课程之间的先决条件是图中的有向边。对于数组 prerequisites 中的元素 [a,b],表示在学习课程 a 前必须先完成课程 b,对应从 b 指向 a 的有向边,b 是 a 的前…

Makefile基础

迷途小书童 读完需要 4分钟 速读仅需 2 分钟 1 引言 下面这个 C 语言的代码非常简单 #include <stdio.h>int main() {printf("Hello World!.\n");return 0; } 在 Linux 下面&#xff0c;我们使用下面的命令编译就可以 gcc hello.c -o hello 但是随着项目的变大…

【第200篇原创文章】解决低于1%概率出现的芯片VPSS模块跑飞的问题

在发布SDK内测的时候&#xff0c;我们发现在切换视频分辨率的时候有低概率出现VPSS模块跑飞的情况&#xff0c;概率低于1%&#xff0c;试个两三百次&#xff0c;能出1~2次。切换视频分辨率这个功能在安防产品上也确实存在需求&#xff0c;网络带宽不大好的地方分辨率可以适当下…

CKA真题分析-2023年度

补充信息 #补全 # apt install bash-completion source <(kubectl completion bash)# kubectl config get-contexts # cat ~/.kube/config |grep current# kubectl config current-context kubectl config use-context复制粘贴 ctrlshiftc ctrlshiftv # edit编辑时只能使…

dns电脑服务器发生故障怎么修复

DNS电脑服务器发生故障可能会导致网络连接问题、网页无法访问、或者电子邮件无法发送等情况。修复DNS电脑服务器故障可以采取多种方法&#xff0c;例如检查网络连接、更换DNS服务器等措施。当DNS电脑服务器发生故障时&#xff0c;可以采取以下修复措施&#xff1a; 尝试刷新DNS…

linux动态扩容系统盘(非lvm磁盘)

查看磁盘状态 执行df -Th查看磁盘情况 [rootiotdbtest1 ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 7.7G 0 7.7G 0% /dev tmpfs tmpfs 7.7G 0 7.7G 0% /dev/shm tmpfs tmpfs …

uni-app监听页面滚动

在uni-app中可以通过监听页面滚动事件来实现滚动效果或响应滚动事件 在需要监听滚动的页面或组件中&#xff0c;添加一个scroll元素&#xff0c;用于容纳内容并实现滚动效果。 <template><view class"container"><scroll-view scroll-y scroll"…

目标检测YOLO实战应用案例100讲-基于YOLOv3多模块融合的遥感目标检测(下)

目录 基于Transformer的轻量级网络模型的设计与实现 4.1 引言 4.2 轻量级特征提取网络

从collections库的Counter类看items()方法和enumerate()方法

下面的代码是针对文件的词频统计&#xff0c;使用了collections库及其Counter类 import collections def count_word_frequency(text): words text.lower().split() word_counts collections.Counter(words) return word_counts def count_fileword_frequency(fi…

Windows开机密码破解

Windows11以及Windows10(21H2)以上版本 先开机&#xff0c;不进行任何操作&#xff0c;静静的等待登录界面 按住Shift重启 进入“选择一个选项”界面&#xff0c;点击疑难解答 点击高级选项 点击命令提示符 输入两行命令 copy C:\windows\system32\uti1man.exe C: \Window…

spark 精华总结

面试题&#xff1a; Hadoop 的基于进程的计算和 Spark 基于线程方式优缺点&#xff1f; 答案&#xff1a; Hadoop中的MR中每个map/reduce task都是一个java进程方式运行&#xff0c;好处在于进程之间是互相独立的&#xff0c;每个task独享进程资源&#xff0c;没 有互相干扰&…

vue2.0 elementui 封装表单

1.封装表单 <template><div><el-form :model="numberValidateForm" ref="numberValidateForm" label-width="80px" :disabled="type===click"><div v-for="item in formConfig" :key="item.id&q…