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+账户混合状态模型

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

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

相关文章

【C语言经典100例题-68】有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

方法一 将原数组拆成两部分&#xff0c;前面n-m个数和后面m个数。首先将前面n-m个数逆序&#xff0c;然后将后面的m个数逆序。最后将整个数组逆序即可。 #include <stdio.h>void reverse(int arr[], int start, int end) {for (int i start, j end; i < (start en…

学过的汇编指令整合

1.数据搬移指令 <opcode>{<cond>}{s} <Rd>, <shifter_operand> 解释&#xff1a; <opcode>&#xff1a;指令码 {<cond>}&#xff1a;条件码 {s}&#xff1a;状态位&#xff0c;如果在指令后面加上s&#xff0c;则运算的结果会影响CPSR的条…

傅里叶系列 P2 的定价选项

系列上文&#xff1a;傅里叶系列 P1 的定价选项_无水先生的博客 一、说明 通过本文&#xff0c;您可以了解&#xff1a; 如何从知道什么是傅里叶级数到能够在黑色下为期权定价。 如果您想了解更多关于傅里叶级数基础知识的信息&#xff0c;请查看第 1 部分。随附笔记本&#…

objective-c 基础学习

目录 第一节&#xff1a;OC 介绍 ​​第二节&#xff1a;Fundation 框架 ​第三节&#xff1a;NSLog 相对于print 的增强 ​第四节&#xff1a;NSString ​第五节&#xff1a;oc新增数据类型 第六节&#xff1a; 类和对象 ​类的方法的声明与实现 ​第七节&#xff1a;类…

智慧公厕整体解决方案,厕所革命实施方案的范本

随着城市化进程的不断加快&#xff0c;智慧城市应用正成为未来城市发展的重要方向。其中&#xff0c;智慧公厕作为城市基础设施的重要组成部分&#xff0c;其建设范本已经成为各建设中的智慧城市不可或缺的重要内容。那么&#xff0c;如何打造智慧公厕整体解决方案&#xff1f;…

将数组和减半的最少操作【贪心2】

题目&#xff1a;将数组和减半的最少操作 贪心思路&#xff1a;每次挑选最大的数来减半。 解法&#xff1a;贪心大根堆 class Solution { public:int halveArray(vector<int>& nums) {priority_queue<double> heap;double sum 0.0;for(int& x : nums){hea…

(四)激光线扫描-光平面标定

在上一章节,已经实现了对激光线条的中心线提取,并且在最开始已经实现了对相机的标定,那么相机标定的作用是什么呢? 就是将图像二维点和空间三维点之间进行互相转换。 1. 什么是光平面 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交…

Android etc1tool之png图片转换pkm 和 zipalign简介

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、etc1tool2.1、用法 三、zipalign3.1 使用 四…

电脑右键新建记事本不见了--设置恢复篇(无需操作注册表)

电脑右键新建记事本不见了–设置恢复篇&#xff08;无需修改注册表&#xff09; 电脑不知怎么想右键新建记事本结果竟然不见了&#xff0c;搜寻网上的都是什么修改注册表&#xff0c;粘贴代码修复&#xff08;感觉太复杂了&#xff09;&#xff0c;这里介绍通过设置内重新对记…

北京开发APP需要多少钱

北京开发一个移动应用&#xff08;APP&#xff09;的费用因多种因素而异&#xff0c;包括项目的规模、复杂性、所需功能、设计要求、技术选择、开发团队的经验和地理位置等。一般来说&#xff0c;北京的APP开发费用通常较高&#xff0c;因为这是中国的主要技术和创新中心之一&a…

5.5线程同步机制类封装及线程池实现

文章目录 5.5线程同步机制类封装及线程池实现线程池线程同步机制类封装线程池实现 5.5线程同步机制类封装及线程池实现 线程池 线程池是由服务器预先创建的一组子线程&#xff0c;线程池中的线程数据应该与CPU数据差不多。线程池中的所有子线程都运行着相同的代码。当有新的任…

QT 之数据库 QSqlQuery CURD 实战

零、参考文档 https://doc.qt.io/archives/qt-6.0/qsqldatabase.html 一、开发环境 Ubuntu 20.04 QT6.0 Microsoft SQL Server 2022 Developer Edition (64-bit) 先修改 /etc/odbc.ini 的数据源配置&#xff0c;指定连接数据库 vdb&#xff0c; sudo vim /etc/odbc.ini[mss…

IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…

快速上手Apache POI

哈喽~大家好&#xff0c;这篇我们来看看快速上手Apache POI。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【日常学习上的分享】 &#x1f949;与这篇相关的文章&#xff1a; Red…

Explain执行计划字段解释说明---select_type、table、patitions字段说明

1、select_type的类型有哪些 2、select_type的查询类型说明 1、SIMPLE 简单的 select 查询,查询中不包含子查询或者UNION 2、PRIMARY 查询中若包含任何复杂的子部分&#xff0c;最外层查询则被标记为Primary 3、DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生)&…

SpringCloudAlibaba 相关组件的学习一

目录 前言 系统架构演变 1、单体架构 2、垂直架构 3、分布式架构 4、SOA架构 5、微服务架构 一、微服务架构的介绍 1、微服务架构的常见问题 2 微服务架构的常见概念 2.1 服务治理 2.2 服务调用 2.3 服务网关 2.4 服务容错 2.5 链路追踪 3、微服务架构的常用解决…

基于视频技术与AI检测算法的体育场馆远程视频智能化监控方案

一、方案背景 近年来&#xff0c;随着居民体育运动意识的增强&#xff0c;体育场馆成为居民体育锻炼的重要场所。但使用场馆内的器材时&#xff0c;可能发生受伤意外&#xff0c;甚至牵扯责任赔偿纠纷问题。同时&#xff0c;物品丢失、人力巡逻成本问题突出&#xff0c;体育场…

SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务

目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包&#xff0c;解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、…

证书显示未受信任,生成的证书过期

此时若是导入证书后&#xff0c;证书显示未受信任&#xff0c;则说明我们缺失最新的AppleWWDRCA证书 解决方案&#xff1a; 重新下载AppleWWDRCA并安装。即下载最新的AppleWWDRCA证书&#xff0c;双击安装到“登录”项的钥匙串下&#xff1b;然后再安装你的开发证书或者发布证书…

SpringBoot中使用Servlet和Filter

为什么要把Servlet和Filter写在一起,因为使用方式很相似 两种方式 第一种,使用Servlet和Filter 使用Servlet 继承HttpServlet 注册Servlet 使用Filter 1.自定义过滤器 2.注册过滤器 这里注意一点 使用/**无效 至少我这2.4.5版本是这样 过滤所有请求用/* 那么其实还有…