智能合约语言(eDSL)—— 并行化方案 2

        这个并行算法最初其实是在aptos上实现的,aptos上使用的是move虚拟机,后来我把它移植到我们链上了,但是wasm虚拟机。还是费了不少事情。

        目前evm并行也比较火,像monad,sei等。经过调研发现,其实evm的并行,还是occ的路子,和aptos的方案也差不多,都是在这之上进行各种优化,比较链结果和vm都不一样。所以现在又准备再次移植,把他移植到evm上,不过这次打算把并行做成一个通用的模块,这样不管你用的什么虚拟机,你的交易格式有啥不一样的,存储有啥区别的,简单的修改,就可以顺利的将并行模块加入到自己的链上,直接使用,不需要像我之前那么麻烦。

      为了做成通用的模型,所以我们先对虚拟机进行抽象。

虚拟机抽象

        在区块链中,所有的虚拟机都是类似的,用来执行合约,更新链上的状态;不论是move,wasm还是evm,都是一样的,是一个黑盒子。你输入交易,它返回读写集和结果;

        需要抽象的部分,虚拟机就是输入与输出,这一部分每个vm都是不一样的;所有的虚拟机,大概可以认为是输入交易以及链的上下文;输出就是交易的结果,包括是否成功,以及改变的状态。这些数据我们不会变化,为了规范,可能就是使用trait来进行定义。

        除了这些原始数据之外,还需要添加一个缓存模块,用来缓存整个区块处理过程中,所有交易涉及到的读写集;这个缓存模块下边会介绍到。

      另外vm还需要进行一些修改,VM在需要读写数据的时候,需要先读取缓存模块,如果没有再从数据中读取,写入数据也是先写入缓存模块,等整个块都处理完了,没有问题,才写入数据库。

缓存模型

全局缓存

多版本存储

        并行处理区块交易的过程中,每一笔交易,每一次执行(incarnation),写入的数据集合。每一笔交易,每一次执行(incarnation),的读取也是优先从这里读取。相当于保存了当前链世界状态的一个子集,由于处理过程中,有验证阶段,可能会导致某些交易多次执行,所以在未处理完区块之前,数据还是不稳定的。

数据结构如下:

key:map<txid,map<incarnation , value>>

块交易读写集

块中所有的交易的读写集数组,每个交易都会分开记录,用于验证。

局部缓存

交易读集合

每一笔交易,读集合;

交易写集合

每一笔交易,写集合,交易处理完成之后,会更新到全局缓存之中,等整个区块处理完成之后,在写入数据库中。

为什么需要缓存

        为什么需要它,这就和我们并行处理的调度有关系了,当我们并行的处理一个块的交易时,这些交易就是一个整体,他们既有独立的部分,又有关联的部分;独立的部分就是每个交易需要处理的内容不一样,有的可能是nft,有的可能是质押,或者dex等;但是所有的交易都需要修改世界状态,而且还会因为修改世界状态的先后,产生依赖关系,需要我们就需要记录每笔交易的与世界状态交互的记录,以此作为依据,及时的调整我们的调度策略。

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

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

相关文章

Python 获取当前IP地址(爬虫代理)

Python 获取当前IP地址&#xff08;爬虫代理&#xff09; 在Python中&#xff0c;获取当前的公网IP地址通常涉及到发送一个请求到外部服务&#xff0c;因为本地IP地址通常只在你的私有网络内部是可见的&#xff0c;而公网IP地址是由你的ISP&#xff08;互联网服务提供商&#x…

如何查看哪些组策略应用于你的电脑和用户帐户?这里有详细步骤

如果你希望在电脑上查看所有有效的组策略设置,以下是操作方法。 什么是Windows中的组策略 在Windows世界中,组策略为网络管理员提供了一种将特定设置分配给用户组或计算机组的方法。然后,无论何时组中的用户登录到联网的PC,或无论何时启动组中的PC,都会应用这些设置。 …

牛客NC222 插入区间【中等 数组,区间合并问题 Java/Go/PHP/C++】lintcode30 插入区间

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1d784b5472ab4dde88ea2331d16ee909 https://www.lintcode.com/problem/30/solution/56586 思路 Java代码 import java.util.*;/** public class Interval {* int start;* int end;* public Interval(int …

python web自动化(分布式测试Grid)

Grid介绍 Selenium Grid 是 Selenium 提供的⼀个⼯具&#xff0c;⽤于⽀持在多台计算机上并⾏运⾏测试。 它允许将测试分发到不同的机器和浏览器组合上&#xff0c;同时收集结果。 1.并⾏执⾏测试⽤例&#xff1a;在不同的机器上并⾏执⾏测试⽤例&#xff0c;从⽽加速整个测试过…

详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)

目录 前言1. 基本知识2. Demo3. 实战4. 模版 前言 由于需要在登录时&#xff0c;附上一些用户说明书的弹窗 对于ElMessageBox的基本知识详细了解 可通过官网了解基本的语法知识ElMessageBox官网基本知识 1. 基本知识 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;其中…

初识C语言——第二十四天

函数的基本使用和递归 1.函数是什么 2.库函数 3.自定义函数 4.函数参数 5.函数调用 6.函数的嵌套调用和链式访问 7.函数的声明和定义 函数是什么 C语言中函数的分类 1.库函数 2.自定义函数 库函数&#xff1a; 简单的总结,C语言常用的库函数都有&#xff1a; #includ…

QT之常用控件

一个图形化界面当然需要有各种各样的控件&#xff0c;QT也不例外&#xff0c;在QT designer中就有提供各种各样的控件&#xff0c;用以开发图形化界面。 而想使用好一个QT控件&#xff0c;就需要了解这些控件。 QWidget 在QT中&#xff0c;所有控件都继承自 QWidget 类&…

Docker学习(4):部署web项目

一、部署vue项目 在home目录下创建项目目录 将打包好的vue项目放入该目录下&#xff0c;dist是打包好的vue项目 在项目目录下&#xff0c;编辑default.conf 内容如下&#xff1a; server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {r…

24法考证件照要求|不合格原因汇总!

6月法考报名&#xff0c;大家一定要提前熟悉下电子证件照片要求‼️ ⚠️证件照注意事项 ▪️不得上传全身照、风景照、生活照、背带(吊带)衫照、艺术照、侧面照、不规则手机照等。 ▪️本人近三个月内彩色(红、蓝、白底色均可)正面免冠电子证件照片&#xff0c;照片必须清晰完…

人工智能为犯罪地下世界带来了巨大的生产力提升

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

MySQL--执行计划

一、执行计划 1.介绍 执行计划是sql在执行时&#xff0c;优化器优化后&#xff0c;选择的cost最低的方案 通过desc、explain可以查看sql的执行计划 2.如何查看执行计划 table语句操作的表&#xff0c;在多表时才有意义type查找类型possible_keys可能会用到的索引key最终选择的…

python ofd转pdf及图片

本文部分内容参考&#xff0c;如有侵权请联系删除&#xff1a;使用 easyofd 解析ofd 文件_python模块easyofd如何使用-CSDN博客 背景需求&#xff1a;需要将邮箱中得ofd格式发票提取出来转换成pdf或者图片。 在网上搜了发现使用pyofd包&#xff0c;安装之后使用各种问题&…

VXLAN小结

1.VXLAN:(组件虚拟网络的架构核心)虚拟扩展本地局域网&#xff0c;通过隧道的形式&#xff0c;将物理上有隔离的资源&#xff0c;在逻辑上连通起来&#xff0c;使其二层互通。 a.物理网络:指的是构成 VXLAN 连接的基础 IP 网络 b.逻辑网络:指的是通过 VXLAN 构建的虚拟网络 C.N…

腾讯Java社招面试题真题,最新面试题

Java中synchronized和ReentrantLock有什么区别&#xff1f; 1、锁的实现方式不同&#xff1a; synchronized是JVM层面的锁&#xff0c;主要依赖于监视器对象&#xff08;monitor&#xff09;实现。ReentrantLock是JDK层面的锁&#xff0c;通过Java代码实现&#xff0c;提供了更…

docker 上面安装 Nginx 以及设置访问 IP 就可以访问前端工程

docker 运行 Nginx 第一步&#xff1a;搜索下镜像 首先可以使用 docker search nginx 搜索 nginx 服务 docker search nginx相关控制台输出&#xff1a; NAME DESCRIPTION STARS OFFICIAL…

[OC]深拷贝与浅拷贝

深拷贝与浅拷贝 深拷贝与浅拷贝 深拷贝与浅拷贝定义按照类型说明非容器类对象的深拷贝与浅拷贝不可变字符串可变类型字符串 容器类对象的深浅拷贝自定义类对象的深浅拷贝容器类对象的完全深拷贝1.copyItems2.解档和归档 定义 深拷贝&#xff1a;简单来说就是创建一个与被复制对…

虚拟化技术[2]之存储虚拟化

存储虚拟化 存储虚拟化简介存储虚拟化一般模型存储虚拟化实现方式基于主机存储虚拟化基于存储设备存储虚拟化基于网络存储虚拟化 案例分析&#xff1a;VMFSVMFS功能 存储虚拟化简介 存储虚拟化&#xff1a;将存储网络中的各个分散且异构的存储设备按照一定的策略映射成一个统一…

webpack5生产模式

生产模式 生产模式准备 开发模式和生产模式有不同的 配置文件 2修改webpack.prod.js文件修改webpack.dev.js文件 修改webpack.dev.js文件 1》修改输出路径为undefined 2》将绝对路径进行修改&#xff0c;进行回退 此时文件的执行命令为 修改webpack.prod.js文件 1》修改绝…

LangChain笔记

很好的LLM知识博客&#xff1a; https://lilianweng.github.io/posts/2023-06-23-agent/ LangChain的prompt hub: https://smith.langchain.com/hub 一. Q&A 1. Q&A os.environ["OPENAI_API_KEY"] “OpenAI的KEY” # 把openai-key放到环境变量里&…

【Linux】Linux的基本指令_2

文章目录 二、基本指令8. man9. nano 和 cat10. cp11. mv12. echo 和 > 和 >> 和 <13. more 和 less14. head 和 tail 和 | 未完待续 二、基本指令 8. man Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问…