区块链世界的大数据入门之zkMapReduce简介

1. 引言

跨链互操作性的未来将围绕多链dapp之间的动态和数据丰富的关系构建。Lagrange Labs 正在构建粘合剂,以帮助安全地扩展基于零知识证明的互操作性。

2. ZK大数据栈

Lagrange Labs 的ZK大数据栈 为一种专有的证明结构,用于在任意动态分布式计算的同时生成大规模batch storage proof。ZK大数据堆栈可扩展到任何分布式计算框架,从MapReduce到RDD再到分布式SQL。

使用Lagrange Labs ZK大数据栈,可以从单个区块头生成证明,用于证明任意深度的历史storage slot 状态数组 和 对这些状态执行的分布式计算的结果。简而言之,每个证明都在一个步骤中结合了storage proof的验证 和 可验证的分布式计算。

在本文中,将讨论ZK-MapReduce(ZKMR)——Lagrange Labs ZK大数据栈 的第一个产品。

3. 何为MapReduce

在传统的顺序计算中,单个处理器按照线性路径执行整个程序,其中每条指令都按其在代码中出现的顺序执行。使用MapReduce和类似的分布式计算范式(如RDD),计算被划分为多个小任务,这些小任务可以在多个处理器上并行执行。

MapReduce的工作原理是将一个大数据集分解成更小的块,并将它们分布在一个机器集群中。大体上,这种计算遵循三个不同的步骤:

  • 1)Map:每台机器对其数据块执行map操作,将其转换为一组键值(key-value)对。
  • 2)Shuffle:对Map操作生成的键值对按键(key)进行shuffle和排序。
  • 3)Reduce:Shuffle的结果被传递给Reduce操作,Reduce操作聚合数据并产生最终输出。

MapReduce的主要优点在于其可扩展性。由于计算分布在多台机器上,因此它可以处理无法按顺序处理的大规模数据集。此外,MapReduce的分布式特性允许计算在更多的机器上水平扩展,而不是在计算时间方面垂直扩展。
在这里插入图片描述
分布式计算范例(如MapReduce或RDD)通常用于Web 2.0架构中,用于处理和分析大型数据集。大多数大型web 2.0公司,如谷歌、亚马逊和脸书,都在很大程度上利用分布式计算来处理PB级的搜索数据和用户数据集。用于分布式计算的现代框架包括Hive、Presto和Spark。

3. zkMapReduce介绍

Lagrange的zkMapReduce(zkMR)为MapReduce的扩展,其利用递归证明来证明基于大量链上状态数据的分布式计算的正确性。通过在分布式计算作业的Map或Reduce步骤期间为每个给定worker生成计算正确性的证明来实现的。这些证明可以递归组合,构建整个分布式计算工作流有效性的单一证明。换句话说,可以将较小计算的证明组合起来,以创建整个计算的证明。

将worker computation的多个sub-proofs组合成单个zkMR proof的能力使其能够更有效地扩展到大型数据集上的复杂计算。
在这里插入图片描述
与zkVM相比,zkMR的主要优势之一在于,其能在合约现有和历史storage state基础之上执行动态计算。无需:

  • 分别跨越一系列区块来证明storage inclusion
  • 再基于aggregated data set之上证明一系列计算

zkMR(以及Lagrange的其它ZK大数据产品)支持将以上2者组合为单个proof。与其他设计相比,这样可大幅降低生成zkMR proof的证明时长。

3.1 zkMR示例

为理解递归证明的组合原理,先举个简单的例子。假设需计算某DEX内某资产对 在指定期间内的平均流动性。为此,必须:

  • 对于每个区块,必须展示其correctness of an inclusion proof on the state root,以证明该DEX内的流动性数量。
  • 必须对每个区块的流动性求和,再除以区块数。

这样的顺序计算类似为:

# Sequential Execution
func calculate_avg_eth_price_per_block(var mpt_paths, var liquidity_per_block){
    
    var sum = 0;
    
    for(int i=0; i<len(liquidity_per_block); i++){
        
         verify_inclusion(liquidity_per_block[i], mpt_path[i])
         sum += liquidity_per_block[i]
        
    }
    
    var avg_liquidity = sum / num_blocks

    // return the average liquidity
    return avg_liquidity
}

但是,随着所包含state数量的增加,该程序的性能将急速下降。以下图为例,展示每个链单位时间内的区块数。以Arbitrum上的单个DEX一个月内某单一DEX的平均流动性为例,其需要的数据需横跨约6500万个rollup区块。
在这里插入图片描述
但是,借助zkMR,可将该dataset切分为更小的chunks,并分发给多个处理器。每个机器执行map操作——计算Merkle-Patricia Trie(MPT)proof 并基于其chunk of data对流动性求和。该map操作会生成key-value pair,其中key为某constant string(如average_liquidity),value为a tuple containing the sum and count。

该map操作输出的为一组key-value pairs,可shuffled and sorted by key,然后传递给reduce操作。reduce接收的为key-value pair,其中key为average_liquidity,value为a list of tuples containing the sum and count of the liquidity from each map操作。该reduce操作将通过对单个sums和counts求和来聚合数据,然后将final sum除以final count,以获得最终的平均流动性。

示例代码为:

# Map step
func map(liquidity_data_chunk,mpt_path_chunk){
    
    var sum = 0
    
    for(int i=0; i<len(liquidity_data_chunk); i++){
        
         verify_inclusion(liquidity_data_chunk[i], mpt_path_chunk[i])
         sum += liquidity_data_chunk[i]
    }
    
    return ("average_liquidity", (sum, len(liquidity_data_chunk)))
}

# Reduce step
func reduce(liquidity_data_chunk){
    
    var sum = 0
    var count = 0
    
    for(int i=0; i<len(liquidity_data_chunk); i++){
        
        sum += value[0]
        count += value[1]
    }
    
    return ("average_liquidity", sum/count)
}

广义上来说,可将开发者定义和消费zkMR proof的流程分为三步:

  • 1)定义dataframe和computations:zkMR proof基于某dataframe来执行,所谓dataframe是指一定范围的区块,以及这些区块内的特定memory slots。如上例中,dataframe是指流动性求平均的区块方位,memory slot对应某DEX内某资产的流动性。
  • 2)为batched storage生成证明 并 分发计算:zkMR proof会验证某特定dataframe input的计算结果。每个dataframe对应某个特定的区块头。组委验证计算的一部分,每个proof必须证明现有底层状态数据存在的同时,还需证明基于这些数据的动态计算结果。如上例中,所谓的动态计算设置求平均操作。
  • 3)Proof verification:zkMR proof可提交并在任意EVM兼容链上验证(后续将支持更多的虚拟机)。

在这里插入图片描述

3.2 增加不可知传输层

在这里插入图片描述
zkMR proof(以及其他zk Big Data proof)的强大特性之一是其可实现传输层不可知。由于proof是基于初始的区块头input生成的,任何现有的传输层都可用于生成和relay zkMR proof。现有的传输层包含有;

  • messaging protocol
  • oracle
  • bridge
  • watcher/cron job
  • 甚至untrusted or incentivized用户机制

zkMR proof的灵活性可大幅增加链间state的表达性,而不需要与现有的高性能传输基础设施竞争。

Lagrange SDK提供了简单的接口来将zk Big Data proof集成进任何现有的跨链messaging或bridging协议中。通过简单的函数调用,某协议可简单请求某指定区块头内某特定dataframe的任意计算结果的proof。

当与现有协议集成时,zkMR不设计为对用作proof input的区块头的有效性做assertion。通常当传输消息时,传输协议可证明或断言某区块头的有效性,也可额外包含基于某dataframe历史状态之上的动态计算。

值得指出的是,zkMR proof还支持将多个链的proof合并为单个final computation。

4. zkMR性能改进

现有的zkMR看起来要比传统的线性计算更复杂,其性能可随并行处理器/机器而水平扩展,而不是随时间垂直扩展。

最大并行化情况下,证明某zk MapReduce流程的时间复杂度为 O ( log ⁡ ( n ) ) O(\log (n)) O(log(n)),而顺序执行需要的run-time为 O ( n ) O(n) O(n)

例如,计算以太坊区块数据1天内的平均流动性。顺序执行需要循环6643 steps。具有recursive proof的分布式方式,仅需要单个map操作,高达6643个并行线程以及12个recursive reduction steps。从而可将rum-time复杂度reduce 约523倍。

对于扩容方案间的state storage碎片,如app chains、app rollup L3s、alt-L2s,链上数据以指数级增长并碎片化。很快就有关于:如何处理部署在100个不同app rollups上的某DEX的1周TWAP数据?

总之,zkMR是在分布式计算环境下、在zero-knowledge上下文中处理大规模数据集的强大范例。虽然顺序计算在通用应用程序开发中效率很高,表达能力很强,但在分析和处理大型数据集时,它的优化效果很差。分布式计算的效率使其成为主流Web2的许多大数据处理的标准。在zero-knowledge上下文中,可扩展性和容错性使其成为处理不可信大数据应用程序的理想支柱,如复杂的链上定价、波动性和流动性分析。

参考资料

[1] Lagrange Labs 2023年5月博客 A Big Data Primer: Introducing ZK MapReduce

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

引入三阶失真的非线性放大器的模拟输出及使用中值滤波器去除峰值研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Jmeter快捷方式和应用图标设置

很多人在安装Jmeter,安装到本机却没有icon&#xff0c;每次使用的时候&#xff0c;每次打开应用都要找目录&#xff0c;不太方便。 【解决问题】 使用bin路径下的一个.bat文件&#xff0c;创建快捷方式。 【操作步骤】 Step1、将Jmeter 安装bin路径下的jmeter.bat 发送快捷方…

[MAUI]在.NET MAUI中实现可拖拽排序列表

.NET MAUI 中提供了拖放(drag-drop)手势识别器&#xff0c;允许用户通过拖动手势来移动控件。在这篇文章中&#xff0c;我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中&#xff0c;列表中显示不同大小的磁贴&#xff08;Tile&#xff09;并且可以拖拽排序。 …

mac arm 通过brew搭建 php+nginx+mysql+xdebug

1.安装nginx brew install nginx //安装brew services start nginx //启动2.安装php brew install php7.4 //安装export PATH"/opt/homebrew/opt/php7.4/bin:$PATH" //加入环境变量 export PATH"/opt/homebrew/opt/php7.4/sbin:$PATH"brew serv…

fiddler抓包工具的用法以及抓取手机报文定位bug

前言&#xff1a; fiddler抓包工具是日常测试中常用的一种bug定位工具 一 抓取https报文步骤 使用方法&#xff1a; 1 首先打开fiddler工具将证书导出 点击TOOLS------Options------Https-----Actions---选中第二个选项 2 把证书导出到桌面后 打开谷歌浏览器 设置---高级…

ROS2 学习(二)工作空间,节点

工作空间介绍 workspace 是存放整个项目的大目录。 其中包含&#xff1a; src&#xff1a;源码。 build&#xff1a;编译文件。 install&#xff1a;安装空间&#xff0c;存放编译成功后的目标文件。 log&#xff1a;日志。 我们新建一个工作空间目录&#xff0c;其中包…

转行软件测试四个月学习,第一次面试经过分享

我是去年上半年从销售行业转行到测试的&#xff0c;从销售公司辞职之后选择去培训班培训软件测试&#xff0c;经历了四个月左右的培训&#xff0c;在培训班结课前两周就开始投简历了&#xff0c;在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余&…

python3 0基础学习笔记

0基础学习笔记&#xff0c;临时有事暂停后边会继续学习 基础内容1. 条件语句 if - elif - else2. 错误铺捉try - except(一种保险策略&#xff09;3. 四种开发模式4. 函数&#xff1a;def用来定义函数的5. 最大值最小值函数&#xff0c;max &#xff0c;min6. is 严格的相等&am…

EXCEL按列查找,最终返回该列所需查询序列所对应的值,VLOOKUP函数

EXCEL按列查找&#xff0c;最终返回该列所需查询序列所对应的值 示例&#xff1a;国标行业分类汉字&#xff0c;匹配id 使用VLOOKUP函数 第一参数&#xff1a;拿去查询的值。 第二参数&#xff1a;匹配的数据。 Ps&#xff1a;Sheet1!$C 21 : 21: 21:E 117 &#xff0c;需要…

Idea 快捷键整理

Idea快捷键和自动代码补全汇总 idea快捷键汇总 Ctrl 快捷键说明Ctrl F在当前文件进行文本查找 &#xff08;必备&#xff09;Ctrl R在当前文件进行文本替换 &#xff08;必备&#xff09;Ctrl Z撤销 &#xff08;必备&#xff09;Ctrl Y删除光标所在行 或 删除选中的行 &am…

MySQL缓存策略

文章目录 一、MySQL缓存方案的作用二、提高MySQL访问性能的方式2.1 读写分离2.1.1 是什么&#xff1f;2.1.2 解决了什么&#xff1f;2.1.3 原理是什么&#xff1f; 2.2 连接池2.1.1 是什么&#xff1f;2.1.2 解决了什么&#xff1f;2.1.3 原理是什么&#xff1f; 2.3 异步连接2…

数据通信——VRRP

引言 之前把实验做了&#xff0c;结果发现我好像没有写过VRRP的文章&#xff0c;连笔记都没记过。可能是因为对STP的记忆&#xff0c;导致现在都没忘太多。 一&#xff0c;什么是VRRP VRRP全名是虚拟路由冗余协议&#xff0c;虚拟路由&#xff0c;看名字就知道这是运行在三层接…

谷粒商城第十一天-品牌管理中关联分类

目录 一、总述 二、前端部分 1. 调整查询调用 2. 关联分类 三、后端部分 四、总结 一、总述 之前是在商品的分类管理中直接使用的若依的逆向代码 有下面的几个问题&#xff1a; 1. 表格上面的参数填写之后&#xff0c;都是按照完全匹配进行搜索&#xff0c;没有模糊匹配…

图像像素梯度

梯度 在高数中&#xff0c;梯度是一个向量&#xff0c;是有方向有大小。假设一二元函数f(x,y)&#xff0c;在某点的梯度有&#xff1a; 结果为&#xff1a; 即方向导数。梯度的方向是函数变化最快的方向&#xff0c;沿着梯度的方向容易找到最大值。 图像梯度 在一幅模糊图…

CDH6.3.2搭建HIVE ON TEZ

参考 https://blog.csdn.net/ly8951677/article/details/124152987 ----配置hive运行引擎 在/etc/hive/conf/hive-site.xml中修改如下&#xff1a; hive.execution.engine mr–>tez hive.execution.engine 设为tez或者运行代码的时候&#xff1a; set hive.execution.eng…

无涯教程-Perl - setsockopt函数

描述 此函数将SocketoptionsOPTNAME的值设置为SOCKET上指定级别的OPTVAL值。您需要导入Socket模块,以获取Tabl中显示的OPTNAME的有效值 语法 以下是此函数的简单语法- setsockopt SOCKET, LEVEL, OPTNAME, OPTVAL返回值 如果失败,此函数返回undef&#xff1b;如果成功,则返…

私有IP地址有多重要?

私有IP地址是指在局域网中使用的IP地址&#xff0c;而不是公共互联网上可访问的IP地址。私有IP地址不唯一&#xff0c;可以在不同的局域网中重复使用。这种地址分配方式能够有效地节省IP地址资源。 近日&#xff0c;国际互联网协会&#xff08;IATA&#xff09;发布了一项关于私…

Linux Day07

一、僵死进程 1.1僵死进程产生的原因 子进程先于父进程结束, 而父进程没有获取子进程退出码&#xff0c;释放子进程占用的资源&#xff0c;此时子进程将成为一个僵死进程。 在第一个框这里时父进程子进程都没有结束&#xff0c;显示其pid 父进程是2349&#xff0c;子进程是235…

小红书运营 变现方法总结(精)

大家好&#xff0c;我是网媒智星&#xff0c;今天跟大家分享一下小红书运营方面的知识&#xff0c;怎样利用小红书变现&#xff1f;全篇倾情干货输出&#xff0c;认真学习&#xff0c;保证您收获多多。 首先&#xff0c;让我们来分析一下小红书平台的优势。关于卖东西&#xff…