Polygon Mide状态模型:解决状态膨胀,而不牺牲隐私和去中心化

1. 引言

前序博客有:

  • Polygon Miden:扩展以太坊功能集的ZK-optimized rollup
  • Polygon Miden zkRollup中的UTXO+账户混合状态模型
  • Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私

在Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私中已指出,Polygon Miden中的交易,同时支持:

  • 并行计算
  • 客户端证明
  • 公开智能合约

Polygon Miden的功能集需要一种全新的方法来捕捉网络状态,该方法组合了:

  • 以太坊等基于账户的系统 的状态模型
  • 与 比特币和Zcash等基于UTXO的系统 的状态模型

相结合。

本文将介绍Polygon Miden的状态模型的设计和实现,以及该新架构如何在不牺牲隐私或吞吐量的情况下处理普遍存在的区块链状态膨胀问题。

Polygon Miden的愿景是:

  • 数百万用户将同时使用Polygon Miden上的应用程序。

因此,Polygon Miden被设计成一个可作为可持续价值层的rollup。

Polygon Miden 预计将于2023年Q4推出公共测试网。其核心目标是:

  • 扩展EVM的功能集,以创建一个前瞻性的扩容解决方案,该解决方案仍然继承以太坊的安全性。

2. 何为状态?为何会状态膨胀?

何为状态?

状态是对一切情况的描述。在区块链上,state描述了谁在某个时间点拥有什么,以及所有智能合约在该时间点的状况。
Polygon Miden的状态定义,以及,其它rollup和智能合约区块链的状态定义均如此。

区块链使用得越多,其状态就越大。这个问题被称为状态膨胀。

  • 在以太坊基于账户的状态模型中,随着越来越多的人使用该链,账户数量自然会增长,而且不能删除这些账户。
  • 状态膨胀带来了危险的后果:
    • 减缓了网络的速度并使网络集中,因为应对不断增长的状态的要求也在提高。最终,每个公共区块链都需要解决状态的问题。

对于Polygon Miden,一个核心考虑因素是:

  • 使内置状态膨胀最小化。
  • 实际上,其目标是:不需要存储整个状态的情况下,实现产块和区块验证。
    • 对于区块验证:可通过零知识(ZK)证明实现的。这就是ZK的全部意义:能够在不需要查看信息的情况下验证信息。
    • 对于产块:Polygon Miden引入了并发状态模型。

3. Polygon Miden中的状态

如Polygon Miden zkRollup中的UTXO+账户混合状态模型中所述,Polygon Miden中有账户和notes:

  • notes为帐户发送和接收资产的方式。
  • 账户消费和生成notes。

这样一来,账户就会改变状态。账户和notes有各自的状态,即它们在某个时间点的特定状况。Polygon Miden的当前状态是:

  • 在某个时间点上所有帐户和notes的状态。

Polygon Miden的全局状态存储在三个数据库中:

  • 帐户数据库:在Tiered Sparse Merkle Tree (TSMT)中记录每个帐户的最新状态。
  • notes数据库:在append-only Merkle Mountain Range中记录所有notes。
  • Nullier数据库:在Tiered Sparse Merkle Tree (TSMT)中记录 某note是否已被消费。

在这里插入图片描述
为什么Polygon Miden有两个note数据库?

  • note数据库为append-only且永久存储所有notes,
  • 而nullifier数据库存储哪些notes不能再被消费。

将notes分别存储到这两个数据库中,为Polygon Miden提供了客户端证明和高级隐私。

  • 1)将notes和nullifier分开的第一个原因是客户端证明。
    当用户在本地创建proofs时,必须证明其想要消费的notes在note数据库中。
    该note的Merkle路径被用作proof的witness data。在像Merkle Mountain Range这样的append-only数据结构中,更新数据结构时,此witness data不会过时。这意味着,即使用户没有这个数据库的最新状态,也可以生成有效的证明,因此无需向Operators查询不断变化的状态。而Merkle树的根会随着每次更新而变化。
  • 2)将notes和nullifier分开的第二个原因是隐私。
    在Polygon Miden中,nullifiers会破坏已创建notes和已消费notes之间的可链接性。当notes被消费时,其nullifier在nullifier数据库中被设置为1。然而,要知道某note的nullifier,需要知道该note的所有细节。这意味着,如果某note是私人的,并且Opertor仅存储该note的哈希值,那么只有那些拥有该note详细信息的人才能知道该note是否已被消费。ZCash首先引入了Nullifier这种方法。

但这种增强隐私的解决方案会引入另一个问题:

  • 若所有notes都被永久存储,那么维护这些数据所需的存储空间将快速增长。

在揭示Polygon Miden如何进一步管理状态膨胀之前,先描述:

  • 如何生成全局状态的区块?
  • 谁来生成全局状态的区块?
  • 如何验证全局状态的区块?
  • 谁来验证全局状态的区块?

3.1 Operators

在Polygon Miden中,全局状态由Operators管理。Operators运行Polygon Miden节点并确保三个数据库的完整性。为了防止双花,Operators有责任确保在交易中创建的nullifiers尚未出现在nullifier数据库中。这就是为什么Operators需存储一个完整的nullifier数据库。

然而,Polygon Miden也将一些数据存储的相关责任推给了用户:

  • 激励用户在本地保存notes数据,并且只公开存储这些notes的承诺值。这允许Operators积极地裁剪nullifier数据库,并只存储notes的承诺值。
  • 激励用户自己处理帐户状态存储,而不是向Operators公开存储所有内容。同样,Operators存储用户账户状态的承诺值并确保任何更改的正确性。不过用户也可选择向Operators公开存储帐户数据和note数据。

4. Polygon Miden如何管理状态膨胀?

由于Operators不需要知道整个状态来验证或生成新区块,所以Operators不需要存储整个状态。那么,区块验证和区块生产是如何实现的呢?

其核心思想很简单:

  • 用户存储其数据,而不是与Operators一起存储完整的状态数据,Polygon Miden只跟踪对数据的承诺值。至少对大多数账户来说,某些智能合约需公开可见。
    • 这最大限度地减少了状态膨胀——因为Operators不需要存储不断增长的数据库——并提供了隐私,因为所有其他用户和Operators只看到其他用户数据的哈希值。
  • 同样,无完整状态的情况下,区块验证之所以可行,是因为ZK证明的美妙之处。Operators可存储一个私人帐户,这是对某个状态的承诺值,即意味着只是一个哈希值。这样,Operators就不知道某个特定账户中有多少资产,也不知道某note上到底写着什么,但Operators仍可验证状态变化的正确性。即使在长时间的高使用率下,帐户数据库和note数据库也可保持可管理性。

与以太坊不同,Polygon Miden上私人账户的规模对状态膨胀的影响可忽略不计。每个私人帐户只为全局状态贡献40个字节(帐户ID为8个字节,帐户哈希为32个字节)。这意味着10亿个私人帐户只需要40GB。Operators只需要知道哈希值就可以验证单个状态转换。

如前所述,Operators仍然必须存储完整的nullifier数据库以进行区块验证。nullifier数据库将随着所消费交易的数量而线性增长。这将对状态膨胀非常不利——在1000个TPS的情况下,该状态将以每年约1TB的速度增长。

因此,在Polygon Miden中,有epochs,并且在每个epoch之后都会创建一个新的nullifier数据库。Operators存储最后两个完整的树和所有历史nullifiers’ tree的树根。这意味着老的notes仍可被消费;用户只需要做多一点点工作。通过将这个epoch参数添加到nullifier数据库,状态膨胀的主要驱动因素变成了每秒交易数(TPS)。

在这里插入图片描述
借助Polygon Miden的并发状态模型,所产区块仅具有部分状态是可能的。一个区块包含新创建的notes和nullifiers:

  • Notes只是附加到Notes数据库中。
  • 对于nullifiers,Operators需要更新nullifier Merkle树,如前所述,这需要完整树的知识。
    • 但Operators不需要知道该账户的内容就可以更新它——就像以太坊不需要确切知道rollup上发生了什么就可以在相应的智能合约中更新rollup的状态根一样。这意味着,在Polygon Miden中,每个帐户都可被视为第3层(Layer 3)。

具有这些功能的架构所生成的rollup,在隐私最大化的同时,最大限度地减少了状态增长。这创建了一个强大的反馈循环。

总结下,Polygon Miden使用的状态模型非常独特,是:

  • 账户模型(如以太坊)、
  • UTXO模型(如比特币)
  • 和 ZK证明

的组合。从而获得一个具有并发链下状态的基于actor的模型。

参考资料

[1] Polygon Labs 2023年6月博客 Polygon Miden: State 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 => 并行 + 隐私

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

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

相关文章

定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”

各位CSDN的uu们好呀,今天,小雅兰的内容是51单片机中的定时器以及按键控制LED流水灯模式&定时器时钟,下面,让我们进入51单片机的世界吧!!! 定时器 按键控制LED流水灯模式 定时器时钟 源代…

功能比较:Redisson vs Jedis

Redis最流行的两个Java客户端库是Redisson和Jedis。Redisson提供内存中的数据网格功能,支持Redis的各种分布式对象和服务。另一方面,Jedis是一个更轻量级的产品,它缺乏其他库的某些功能。 如果你正在为Redis寻找一个Java客户端库&#xf…

辅助驾驶功能开发-功能对标篇(6)-NOA领航辅助系统-上汽智己

1.横向对标参数 厂商上汽智己车型L7LS7上市时间20222022Q4方案11V5R1L+1DMS11V5R2L+1DMS摄像头前视摄像头2*(5M,长焦+广角)3侧视摄像头44后视摄像头11环视摄像头44DMS摄像头11雷达毫米波雷达554D毫米波雷达//超声波雷达1212激光雷达1*(速腾聚创M1,125线,905nm)2(速腾聚创)域控供…

【开源项目】tinyprintf 用于嵌入式系统的小型printf和sprintf库

【开源项目】tinyprintf 用于嵌入式系统的小型printf和sprintf库 简介 tinyprintf 是一个用于小型嵌入式系统的微型 printf 和 sprintf 库。这个库实际上只由两个文件 tinypprintf.c 和 tinyprintf.h 组成。 LICENSE:MIT, BSD 或者 LGPL license 项目地址&#…

微服务技术栈-Docker应用部署

文章目录 前言一、数据卷二、Docker 应用部署1、MySQL部署2、Tomcat部署3、Nginx部署4、Redis部署5、Kafka部署 总结 前言 之前文章讲到过,docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器,接下来我们将…

数据结构与算法-(7)---栈的应用-(4)后缀表达式求值

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

vue 使用 创建二维数组响应数据 渲染 echarts图标

目前我遇到的情况就是用动态的二维数组数据渲染echarts图标,我们从后端收到的接口一般是个一维数组,需要手动构建并且保证响应式。接下来我做了个案例 一、案例总逻辑 1. 先创建一个vue项目 2. 添加 echarts依赖 3. 模拟数据请求,构建二维数组…

DevicData-D-XXXXXXXX勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言: 在数字时代,数据安全成为一项至关重要的挑战。DevicData-D-XXXXXXXX勒索病毒(以下简称DevicData病毒)是这场战斗中的新敌人,它能够以毁灭性的方式加密您的数据,迫使您在数据和时间之间做出艰难的选择…

59. 螺旋矩阵 II

题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: 输入:n …

AcWing 288. 休息时间,《算法竞赛进阶指南》,环形与后效性处理

288. 休息时间 - AcWing题库 在某个星球上,一天由 N 个小时构成,我们称 0 点到 1 点为第 1 个小时、1 点到 2 点为第 2 个小时,以此类推。 在第 i 个小时睡觉能够恢复 Ui 点体力。 在这个星球上住着一头牛,它每天要休息 B 个小…

基于SpringBoot的房屋租赁管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 屋主管理 房屋信息管理 房屋租赁公告 租用订单管理 房屋信息管理 保洁管理 房屋信息 租用订单管理 取消订单管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 互联网发展至今,无论是其理论还是…

【面试题精讲】如果一个类没有声明构造方法,该程序能正确执行吗?

“ 有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top ” 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是构造方法? 构造方法(Constructor)是一种特殊的方法&#x…

Centos 服务器 MySQL 8.0 快速开启远程访问

环境: MySQL 8.0(低版本会有些不同), Rocky Linux 9.0(CentOS) 直接上干货,相信大家看到这个文章的时候都已经安装完了。 1. 先从服务器上使用 root 进行登录(刚安装完默认只能本地…

java Spring Boot在配置文件中关闭热部署

之前更大家一起搭建了一个热部署的开发环境 但是 大家要清楚一个情况 我们线上程序运行突然内部发生变化这是不可能的。 所以 他就只会对我们开发环境有效 是否开启 我们可以通过 application配置文件来完成 我这里是yml格式的 参考代码如下 spring:devtools:restart:enabled…

OpenWrt使用Privoxy插件修改UA

OpenWrt使用privoxy修改UA 1.安装privoxy插件 SSH连接到路由器 更新插件列表 update opkg安装插件 opkg install privoxy luci-app-privoxy luci-i18n-privoxy-zh-cn重启路由器 2.配置privoxy 打开配置页面 文件和目录 访问和控制 转发 杂项 日志 编辑配置 浏览器打开 …

代码随想录算法训练营第五十八天 | 动态规划 part 16 | 583. 两个字符串的删除操作、72. 编辑距离

目录 583. 两个字符串的删除操作思路思路2代码 72. 编辑距离思路代码 583. 两个字符串的删除操作 Leetcode 思路 dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。递推公…

云原生Kubernetes:简化K8S应用部署工具Helm

目录 一、理论 1.HELM 2.部署HELM2 3.部署HELM3 二、实验 1.部署 HELM2 2.部署HELM3 三、问题 1.api版本过期 2.helm初始化报错 3.pod状态为ImagePullBackOff 4.helm 命令显示 no repositories to show 的错误 5.Helm安装报错 6.git命令报错 7.CentOS 7 下git c…

volatile关键字使用总结

先说结论 1. volatile关键字可以让编译器层面减少优化,每次使用时必须从内存中取数据,而不是从cpu缓存或寄存器中获取 2. volatile关键字不能完全禁止指令重排,准确地说是两个volatile修饰的变量之间的命令不会进行指令重排 3. 使用volati…

模板方法模式,基于继承实现的简单的设计模式(设计模式与开发实践 P11)

文章目录 实现举例应用钩子 Hook 模板方法模式是一种基于继承的设计模式,由两部分构成: 抽象父类(一般封装了子类的算法框架)具体的实现子类 实现 简单地通过继承就可以实现 举例 足球赛 和 篮球赛 都有 3 个步骤&#xff0c…

常用Redis界面化软件

对于Redis的操作,前期有过介绍【Centos 下安装 Redis 及命令行操作】。而在Redis的日常开发调试中,可使用可视化软件方便进行操作。 本篇主要介绍Redis可视化的两款工具:Redis Desktop Manager和AnotherRedisDesktopManager。 1、Redis Desk…