Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私
1. 引言
前序博客:
- Polygon Miden:扩展以太坊功能集的ZK-optimized rollup
- Polygon Miden zkRollup中的UTXO+账户混合状态模型
Polygon Miden为:
- ZK-optimized rollup
- 由客户端生成证明
- 完善Polygon ZK系列解决方案,致力于成为网络价值层
- 扩展以太坊功能集
本文专注于Polygon Miden的几个核心概念:
- Accounts账户
- Notes
- Transactions交易
Polygon Miden中:
- notes和accounts都持有资产。
- 交易会引起账户状态更改。
- 交易通常以单个账户和某些notes为输入,输出为:同一账户的新状态,以及,一些其它notes。
- Polygon Miden的交易与以太坊交易不同,所以称Polygon Miden扩展了以太坊功能集。
2. 账户存储资产和代码
Polygon Miden中的账户:
- 持有资产
- 定义资产转移的规则
其与以太坊账户相似,但也有所不同:
- 1)Polygon Miden中的每个账户都有代码,而以太坊中的EOA账户没有代码。即意味着Polygon Miden中的所有账户都是智能合约——即账号抽象(Account Abstraction)。从而有更好的用户体验和更安全的钱包:
- 可定期rotate keys
- 做rate limit
- 社交恢复等。
- 2)以太坊账户中仅locally存储了ETH balance,即意味着账户的该数据结构中仅存储其ETH balance信息。
Polygon Miden中,所有资产都locally存储在账户中,从而提供了隐私和可扩展性:- 提供隐私,是指:之前已提及,Polygon Miden中的用户可将其账户数据私有维护。某特定账户所持有的资产或代码信息,可不对其他人可见。
- 提供可扩展性,是指:在账户中locally存储资产,使得任意token交易都可仅触及一个账户,从而支持并发性。
以太坊中的ERC20 token为智能合约,其存储了一组拥有该合约token的账户及其balance列表,该ERC20 token的某个持有人需修改该合约才能转移其token。
而Polygon Miden中,tokens并不存储在public list中。
- 3)Polygon Miden的账户ID仅为8个字节,而以太坊的账户地址长达20个字节。更短的字符更有助于记忆。因为每个账户都有code,从而支持多种认证方式,就没必要将账户ID与其公钥绑定。
3. 账户之间通过Notes来通信
与分布式系统的Actor模式类似,为实现并发状态更改:
- Actors类似于小的状态机,每个actor负责其自身状态
- Actors有inboxes来发送和接收消息,从而实现与其它actors的通信。
- 消息可异步读取。
- 某actor读取某消息之后,可修改其状态。
Polygon Miden中的notes即类似于上面的消息。
在Polygon Miden中,账户之间通过生成notes和消费notes来实现通信:
- notes中携带了账户之间发送的资产信息。
单个note中包含:- 资产
- script:定义了该note如何可被消费。从而使得不仅仅支持资产的转移,还可支持更复杂的功能。
notes的概念,是基于账户模型的以太坊,与,基于UTXO和账户混合状态模型的Polygon Miden之间的,主要区别。
- 以太坊中:由账户A发送5美金给账户B:【类似于钱包间的现金交易】
- 账户A直接从其钱包中拿出5美金现金,
- 然后再直接把这5美金放入账户B的钱包中。
- Polygon Miden中:由账户A发送5美金给账户B:【类似于钱包间的账单(或notes)交易】
- 账户A从其钱包中拿出5美金的账单放入某lockbox,然后就不管了后续了(即不负责将钱放入B的钱包中),账户A 的钱包余额中只是少了5美金。
- 若账户B想要收取该账单,其必须知道该lockbox的组合,如果知道,即可将这5美金放入账户B自己钱包。
- “将账单放入lockbox” 的动作,与,“将账单从lockbox中取出”的动作,是不同的。
4. 交易:生成和消费notes
Polygon Miden中,当账户生成或消费notes时,则称其为交易。
Polygon Miden中的交易总是基于单个账户执行的,且仅引起该单个账户的状态更改:
即意味着,2个账户之间发送资产时,需要2笔交易:
- 1笔交易用于创建note
- 另1笔交易用于消费 发送账户 所创建的note。
仍以上面的例子为例: - 账户A将5美金账单放入lockbox中,这即为账户A的状态转换和首笔交易。
- 账户B从lockbox中取出该5美金账单,这为账户B的状态转换,和,另一笔交易。
- 账户B甚至可以同时打开多个lockboxes,并在单笔交易中“消费”所有账单。
使用这种交易模型可以做一些引人注目的事,如:
- 1)交易可以在本地执行和证明,因为交易只涉及一个帐户。这提供了隐私并降低了复杂计算的成本,因为其无需多个网络参与者进行重新执行。
- 2)在另一个帐户消费了某note之前,该note的创建者可对其进行更新。可通过公开note script的哈希部分,来完成note更新。
如某note script可为:“消耗这5 ETH并发送Bob 10 MATIC或0x213…”。然后,若无人消费这该note,其创建者可公开“0x213=消费这5 ETH并发送Bob 9 MATIC”。以此来说明可更新lock——如做市商可在短时间内免费更新链上订单。 - 3)当某note被发送到错误的地址,其创建者可召回该note。想想那些在以太坊或比特币上意外将东西发送到错误地址的用户。在Polygon Miden上,特定交易的创建者可对其进行配置,以便在尚未消费某note的情况下可召回该note。
5. 包含公共共享状态的交易
Polygon Miden账户可以在本地执行并证明其交易,因为交易只会改变其自身状态。
但是,若某交易涉及到公共状态呢?
想象一下,有一个类似Uniswap的合约——它只是另一种简单账户——在消费和生成一些notes后会发生变化。且这种更改必须对所有其他用户可见,因为这会影响所有其他用户的交易费率。
基本上,一个需要公开其状态的帐户无法在本地执行和证明其交易。
这些网络交易必须由Polygon Miden运营商执行和验证。在这种情况下,Polygon Miden的工作方式与所有其他ZK Rollup类似,由专门的Provers来创建有效状态转换的证明。
两个帐户如何使用类似Uniswap的合约交换代币的架构如下图所示,从左至右,可将其分解为离散阶段:
- 1)Token Swap Initiation阶段:
- Acct1 and Acct2 want to trade on a Uniswap-like contract
- Tx1 creates Note1 and can be locally executed by Acct1
- Tx2 creates Note2 and can be locally executed by Acct2
- 2)Uniswap Execution阶段:
- In Tx3, Uniswap consumes Note1 and Note2 (and all the other notes that are in its inbox) and creates Note3 and Note4 in the same transaction
- Because Uniswap’s state must be publicly visible, this state change is performed by the Polygon Miden operator
- 3)Token Swap Finalization阶段:
- Acct1 and Acct2 now get their swapped tokens back
- Tx4 consumes Note3 and can again be locally executed by Acct1
- Tx5 consumes Note4 and can again be locally executed by Acct2
参考资料
[1] Polygon Labs 2023年4月博客 Polygon Miden: Transaction Model
Miden系列博客
- zk、zkVM、zkEVM及其未来
- Polygon L2扩容方案揭秘
- 混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola
- Polygon Miden:扩展以太坊功能集的ZK-optimized rollup
- Polygon Miden zkRollup中的UTXO+账户混合状态模型
相关文章:
Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私
1. 引言 前序博客: Polygon Miden:扩展以太坊功能集的ZK-optimized rollupPolygon Miden zkRollup中的UTXO账户混合状态模型 Polygon Miden为: ZK-optimized rollup由客户端生成证明完善Polygon ZK系列解决方案,致力于成为网络…...
Java流的体系结构(二)
文章目录 一、对象流的使用1.概念2.序列化机制3.代码案例:序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去4.反序列化,将磁盘文件中的对象还原为内存中的一个java对象 二、RandomAccessFile的使用1.说明2.代码案例 提示&#x…...
python计算阶层
阶层(Factorial)是指从1到一个正整数n的所有整数相乘,即n! 1 2 3 … n。下面是Python代码计算阶层: def factorial(n):"""计算阶层:param n: 正整数:return: n的阶层"""if n 1 or n 0:retu…...
前端架构师之01_ES6_基础
1 初识ES6 简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是实现ECMAScript标准的脚本语言。 2011年,ECMA国际标准化组织在发布ECMAScript 5.1版本之后,就开始着手制定第6版规范。 存在的问题:这个版本…...
银行卡号识别
# 导入工具包 from imutils import contours import numpy as np import argparse import cv2 import myutils# 设置参数 # ap = argparse.ArgumentParser() # ap.add_argument("-i", "--image", required=True, # help="path to input image")…...
【Idea】idea、datagrip设置输入法
https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5 下载后解压并重命名为 jbr, 然后替换对应 ide…...
回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测
回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于RF-Adaboost随机森林结合…...
最小生成树 | 市政道路拓宽预算的优化 (Minimum Spanning Tree)
任务描述: 市政投资拓宽市区道路,本着执政为民,节省纳税人钱的目的,论证是否有必要对每一条路都施工拓宽? 这是一个连问带答的好问题。项目制学习可以上下半场,上半场头脑风暴节省投资的所有可行的思路&a…...
Java实现使用多线程,实现复制文件到另一个目录,起不一样的名字,创建100万个数据
目录 1 需求2 实现 1 需求 我现在有一个300MB 的文件,想要根据这个文件,创建100万个大小一样的,名称不一样,如何实现,如何比较快点实现 2 实现 1 先准备好这个文件 2 准备好目录 3 写代码 private static void crea…...
uni-app:canvas-图形实现1
效果 代码 <template><view><!-- 创建了一个宽度为300像素,高度为200像素的canvas元素。canvas-id属性被设置为"firstCanvas",可以用来在JavaScript中获取该canvas元素的上下文对象。 --><canvas style"width:200p…...
【算法分析与设计】动态规划(下)
目录 一、最长公共子序列1.1 最长公共子序列的结构1.2 子问题的递归结构1.3 计算最优值1.4 举例说明1.5 算法的改进 二、最大子段和2.1 代码2.2 最大子段和问题的分治算法2.3 代码2.4 分治算法的时间复杂度2.5 最大子段和问题的动态规划算法 三、凸多边形最优三角剖分3.1 三角剖…...
计算机图像处理-均值滤波
均值滤波 线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定…...
FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
文章目录 前言一、空闲任务概念二、钩子函数概念三、任务调度算法四、任务调度算法实验1.实验代码2.是否抢占3.时间片是否轮转4.空闲任务让步 总结 前言 本篇文章将带大家学习一下什么是空闲任务以及钩子函数,以及学习FreeRTOS中的任务调度算法,了解在F…...
Javascript真的是10天内做出来的吗?
我曾听说,Javascript 之所以有这么多缺点,是因为它的第一个版本是在短短十天内完成的。我很好奇:1)这是否属实;2)这是否能解释这种语言的缺陷。 经过一番研究,我可以不自信地说:是的…...
picoctf_2018_got_shell
picoctf_2018_got_shell Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)32位,只开了NX int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {_DWOR…...
作用域 CSS 回来了
几年前,消失的作用域 CSS,如今它回来了,而且比以前的版本要好得多。 更好的是,W3C规范基本稳定,现在Chrome中已经有一个工作原型。我们只需要社区稍微关注一下,引诱其他浏览器构建它们的实现,并…...
简述ceph文件储存系统
Ceph 是一个统一的分布式存储系统和共享机制,它定义了数据如何存储在一个或多个节点上并呈现给其他机器以供文件访问。 Ceph特点 高性能 a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。 b.考…...
计算机图像处理:椒盐噪声和高斯噪声
图像滤波 图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,同时会造成图像一定程度上的模糊,这也叫做平滑或者低通滤波。无论是均衡化直方图和图像滤波,都一定程度上降低了图像阈值分割的难度,直…...
SQL SELECT 子查询与正则表达式
在之前的文章中已经探讨了 SQL SELECT 语句的基础和进阶用法,以及如何通过高级技巧来进行更复杂的数据查询和分析。本文将介绍 SQL SELECT 语句中的子查询和正则表达式的使用。这些是 SQL 中非常强大的工具,能让您进行更复杂和精细的数据操作。 文章目录 子查询基础与应用子…...
Package vips was not found in the pkg-config search path的解决方案
出现该问题是因为pkg-config未安装或未成功设置环境变量。 下文是centos下的操作。 前提 先安装C编译环境: yum -y install gcc-c 否则会报错configure: error: no acceptable C compiler found in $PATH 成功后gcc -v会显示版本信息。 下载&安装 pkg-config 传…...
Vue封装全局SVG组件
1.SVG图标配置 1.安装插件 npm install vite-plugin-svg-icons -D 2.Vite.config.ts中配置 import { createSvgIconsPlugin } from vite-plugin-svg-icons import path from path export default () > {return {plugins: [createSvgIconsPlugin({// Specify the icon fo…...
课题学习(二)----倾角和方位角的动态测量方法(基于磁场的测量系统)
磁性测量工具安装在非磁性钻铤内,如图1,以避免磁性随钻测量工具测量时受到外部干扰。 测量系统采用三轴加速度计和三轴磁通门,并采用冗余设计,由于井下振动剧烈,陀螺仪的可靠性将大大降低。为了保证整个钻井过程中系统…...
Docker-Windows安装使用
1.下载docker https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2.配置虚拟化环境 通过控制面板“设置”启用 Hyper-V 角色 右键单击 Windows 按钮并选择“应用和功能”。选择相关设置下右侧的“程序和功能”。选择“打开或关闭 Windows 功能”。选择“Hyper-…...
在Windows11上安装ubuntu虚拟机
一开始是参考了 VMware17虚拟机安装Ubuntu最新版本(Ubuntu22.04LTS)详细步骤 专栏的1和2来的。但是后面总是提示operating system not found,就参考vmware安装ubuntu时总是提示operating system not found,选择典型安装而不是专栏选择的自定义安装&#…...
【微服务】spring 控制bean加载顺序使用详解
目录 一、前言 二、使用order注解控制顺序 2.1 order 注解使用示例 2.2 order注解顺序失效问题 2.2.1 order失效问题解决办法 2.3 实现Ordered接口 三、使用dependon注解控制顺序 四、AutoConfiguration注解控制bean加载顺序 4.1 AutoConfigureBefore 操作演示 4.2 A…...
python-切换镜像源和使用PyCharm进行第三方开源包安装
文章目录 前言python-切换镜像源和使用PyCharm进行第三方开源包安装1. 切换镜像源2. 使用PyCharm进行第三方开源包安装 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每…...
tp6 + swagger 配置文档接口
ThinkPHP 6.0 运行环境要求PHP7.2,兼容PHP8.1 安装 composer create-project topthink/think tp 6.0.*如果需要更新框架使用 composer update topthink/framework文档 完全开发手册 swagger 文档 注解文档 安装包 composer require zircote/swagger-php 引用…...
试图一文彻底讲清 “精准测试”
在软件测试中,我们常常碰到两个基本问题(困难): 很难保障无漏测:我们做了大量测试,但不清楚测得怎样,对软件上线后会不会出问题,没有信心; 选择待执行的测试用例&#…...
Visual Studio 删除行尾空格
1.CtrlH 打开替换窗口(注意选择合适的查找范围) VS2010: VS2017、VS2022: 2.复制下面正则表达式到上面的选择窗口(注意前面有一个空格): VS2010: $ VS2017、VS2022: $ 3.下面的替换窗口不写入 VS2010: VS2017、VS2022: 4.点选“正则表达式…...
LeetCode_BFS_中等_1926.迷宫中离入口最近的出口
目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 ‘.’ 表示)和墙(用 ‘’ 表示)。同时给你迷宫的入口 …...
哪些网站用黑体做的/云搜索app下载
🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 数据集 完整源码&…...
开发商交房必备条件/深圳优化seo
插在电脑上实验时若出现 ATCREG? CREG: 0,2 可能是usb口供电不足所致,换至主机箱后面usb口后问题解决,返回值CREG: 0,1转载于:https://www.cnblogs.com/prayer521/p/6690257.html...
日语网站设计/十大软件免费下载网站排行榜
c语言没有String类型,更没有String.length()方法,那么要怎么求数组长度呢? 数组举例:int arr[]{2,3,1,4}, char str[]{“Hello”} 获得数组长度可以用这个方法: 比如int数组 sizeOf(arr)/sizeOf(int) 可以求出数组长…...
乌鲁木齐公司网站建设/百度热线客服24小时
学生成绩表(stuscore): 姓名:name 课程:subject 分数:score 学号:stuid 张三 数学 89 1 张三 语文 80 1 张三 英语 70 1 李四 数学 90 2 李四 语文 70 2 李四 英语 80 2 创建表SET ANSI_NU…...
免费做企业推广的网站/页面关键词优化
服务端 //1.引入(利用express框架) const express require(express); // const { request } require(http);//2.创建应用对象 const app express();//3.创建路由规则 //response 是对响应报文的封装 //request 是对请求报文的封装app.all(/server,(r…...
企业网站优化推广公司/app推广引流
面试题 17.11. 单词距离【中等题】【每日一题】 思路:【哈希表】 建立一个哈希map,以单词为key,以列表为value,将每个单词的下标存入单词key对应的value列表中。 取出题目要求的两个单词对应的列表,遍历两个列表&…...