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.xdnf.cn/news/146537.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

消息队列-RabbitMQ(二)

接上文《消息队列-RabbitMQ&#xff08;一&#xff09;》 Configuration public class RabbitMqConfig {// 消息的消费方json数据的反序列化Beanpublic RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){Simple…

数据结构-哈希表

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一 . 什么是哈希表&a…

【教学类-38-02】20230724京剧脸谱2.0——竖版(小彩图 大面具)(Python 彩图彩照转素描线描稿)

结果展示 背景需求&#xff1a; 前文体运用Python颜色提取功能&#xff0c;将“京剧脸谱”彩色图片转化为线描图案。 【教学类-38】20230724京剧脸谱1.0——横版“彩图线图等大”&#xff08;Python 彩图彩照转素描线描稿&#xff09;_reasonsummer的博客-CSDN博客 存在问题&…

计算机图形学、贝塞尔曲线及绘制方法、反走样问题的解决(附完整代码)

贝塞尔曲线 1. 本次作业实现的函数及简单描述&#xff08;详细代码见后&#xff09;2. 与本次作业有关的基础知识整理3. 代码描述&#xff08;详细&#xff09;4. 完整代码5. 参考文献 &#xff08;本篇为作者学习计算机图形学时根据作业所撰写的笔记&#xff0c; 如有同课程请…

数字时代古文的传承———云南文化瑰宝“爨文化“(我为家乡发声)

文章目录 前言⭐ "爨"意味着什么&#xff0c;究竟何为"爨文化"&#xff1f;⭐ 爨文化鲜明的特点1.经济生活2.政治生活3.文化艺术 ⭐ 数字时代古文的传承与传播1.藏品数字化2.建立数据库3.传播大众化 前言 爨文化是继古滇文化之后崛起于珠江正源南盘江流域…

根据GWAS数据估算样本量N和使用千人基因组填充maf的参考文献

https://github.com/GenomicSEM/GenomicSEM/wiki/2.1-Calculating-Sum-of-Effective-Sample-Size-and-Preparing-GWAS-Summary-Statistics

【SQL】mysql创建定时任务执行存储过程--20230928

1.先设定时区 https://blog.csdn.net/m0_46629123/article/details/133382375 输入命令show variables like “%time_zone%”;&#xff08;注意分号结尾&#xff09;设置时区&#xff0c;输入 set global time_zone “8:00”; 回车,然后退出重启&#xff08;一定记得重启&am…

【C++】手撕vector(vector的模拟实现)

手撕vector目录&#xff1a; 一、基本实现思路方针 二、vector的构造函数剖析&#xff08;构造歧义拷贝构造&#xff09; 2.1构造函数使用的歧义问题 2.2 vector的拷贝构造和赋值重载&#xff08;赋值重载不是构造哦&#xff0c;为了方便写在一起&#xff09; 三、vector的…

Apollo自动驾驶系统概述(文末参与活动赠送百度周边)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

算法基础课第二部分

算法基础课 第四讲 数学知识AcWing1381. 阶乘(同余&#xff0c;因式分解) 质数AcWing 866. 质数的判定---试除法AcWing 868. 质数的判定---埃氏筛AcWing867. 分解质因数---试除法AcWing 197. 阶乘---分解质因数---埃式筛 约数AcWing 869. 求约数---试除法AcWing 870. 约数个数-…

云可观测性安全平台——掌动智能

云可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能云可…

腾讯云中使用ubuntu安装属于自己的overleaf

在自己的云服务器上安装overleaf的需求是从写论文开始的&#xff0c;总担心自己的论文放在一个网站上被泄露&#xff0c;所以想要在自己的服务器上安装自己的overleaf&#xff0c;正好手边有一个云服务器&#xff0c;现在开始。 配置腾讯云 因为使用overleaf的优势就是在不同…

SQLAlchemy常用数据类型

目录 SQLAlchemy常用数据类型 代码演示 代码分析 SQLAlchemy常用数据类型 SQLAlchemy 是一个Python的SQL工具库和对象关系映射(ORM)工具&#xff0c;它提供了一种在Python中操作数据库的高效方式。下面是SQLAlchemy中常用的一些数据类型&#xff1a; Integer&#xff1a;整形&…

【数据结构】选择排序 堆排序(二)

目录 一&#xff0c;选择排序 1&#xff0c;基本思想 2&#xff0c; 基本思路 3&#xff0c;思路实现 二&#xff0c;堆排序 1&#xff0c;直接选择排序的特性总结&#xff1a; 2&#xff0c;思路实现 3&#xff0c;源代码 最后祝大家国庆快乐&#xff01; 一&#xf…

数组和切⽚ - Go语言从入门到实战

数组和切⽚ - Go语言从入门到实战 数组的声明 package main import "fmt" func main() { var a [3]int //声明并初始化为默认零值 a[0] 1 fmt.Println("a:", a) // 输出: a: [1 0 0] b : [3]int{1, 2, 3} //声明同时初始化 fmt.Println("b:…

Python3数据科学包系列(二):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 一&#xff1a;通过read_table函数读取数据创建(DataFrame)数据框 #…

C++指针的使用

文章目录 1.C指针1.1 定义指针1.2 使用指针 2.空指针和野指针2.1 空指针2.2 野指针 3.指针所占空间4.使用const修饰指针4.1 const修饰指针4.2 const修饰常量4.3 const 既修饰指针也修饰常量 5.指针操作数组6.指针做函数参数7.使用指针知识实现冒泡排序 1.C指针 指针其实就是一…

mysql主从同步

原理 概述 将主库的数据变更同步到从库&#xff0c;从而保证主库和从库数据一致 数据备份&#xff0c;失败迁移&#xff0c;读写分离&#xff0c;降低单库读写压力 原理 主数据库设置 docker run --restartalways --name mysql-master -p 3306:3306 -v /home/apps/mysql-…

偏微分方程的人工智能

9 偏微分方程的人工智能 在本节中&#xff0c;我们详细介绍了用于解决偏微分方程&#xff08;Partial Differential Equations&#xff0c;PDEs&#xff09;的人工智能领域的进展。我们在第9.1节中概述了PDE建模的一般形式&#xff0c;并阐述了在这个背景下使用机器学习方法的…

竞赛 大数据房价预测分析与可视

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据房价预测分析与可视 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适合…