Solana在技术底层架构上,不得不提到的两个技术层面一个就是海湾流(Gulf Stream)以及海平面(Sealvel),这两个技术相辅相成,是支撑Solana成为新的世界级公链的两大支柱。

海湾流(Gulf Stream):无内存交易转发协议

内存池(MemPool)是一组已经提交,但尚未被网络处理的交易。

就比特币和以太坊而言,内存池的大小通常以未确认交易的数量来衡量,取决于区块空间的供应和需求。即使在区块链时代早期,当内存池增加时,也会对整个网络造成严重的瓶颈影响。

那么,Solana是如何精益求精的?

在不增加网络吞吐量的情况下,Solana验证器可以管理10万笔交易的内存池大小。这意味着,在网络吞吐量为5万TPS的情况下,10万笔交易的内存池在几秒钟内就能执行。这就是让Solana成为世界上性能最强无许可区块链的原因。

Solana网络对这个问题的解决方案是将交易缓存和转发(forwarding)推送到网络边缘,这被称之为海湾流(Gulf Stream)。

由于每个验证器都知道未来领导者的顺序,客户和验证器提前将交易转发给预期的领导者。这使得验证器可以提前执行交易,减少确认时间,更快地切换领导者,并减少未确认交易池对验证器的内存压力,让Solana每秒可处理5万笔交易。这种解决方案在领导者不确定的区块链网络中是不可能的。

它又是如何工作的呢?

客户端(比如钱包)签署引用特定区块哈希的交易。客户端选择一个已经被网络完全确认的、最近的区块哈希。区块大约每800毫秒被提出一次,每增加一个区块都需要成倍的增加时间来展开。使用默认的超时曲线,在最坏的情况下,完全确认的区块哈希是32个区块。

一旦一笔交易被转发到任何验证器,验证器就会将其转发到未来的领导者之一。客户端可以订阅验证器的交易确认信息。客户端知道区块哈希在有限的时间内过期,或者交易被网络确认。这允许客户端签署对保证执行或失败的交易进行签名。

一旦网络过了回滚点,交易引用的区块哈希就会过期,客户就可以保证交易现在是无效的,且永远不会在链上执行。

到目前为止,很明显,区块链网络的功能只有在其内存池最小的情况下才会发挥作用。

当交易吞吐量有限的网络承担着尝试改造全新的扩展技术来解决不断增加的内存池的努力时,Solana从一开始就通过海湾流等优化设计来解决第一代区块链网络的问题,并实现巨大的交易吞吐量。

海平面(Sealevel):智能合约运作并行引擎

 

以太坊的EVM和EOS的基于WASM的runtime都是单线程的。这意味着每次都会有一个智能合约修改区块链的状态。

而Solana建立的智能合约运作并行引擎——海平面(Sealevel),可以并行处理数以万计的合约,并使用验证器作为核心。它可以使Solana的执行时间更有效率,还可让交易在相同状态的区块链上同时执行。

Solana之所以能够并行处理交易,是因为Solana的一笔交易在执行时,将读取或写入所有状态。这不仅允许非重叠的交易并发执行,而且允许只读取相同状态的交易也并发执行。

Solana的帐户数据库Cloudbreak是一个公钥到帐户的映射。所有者是管理账户状态转换的程序的公钥。程序是代码,无状态。它们依靠分配给它们的账户中的数据向量进行状态转换。

默认情况下,所有账户开始时都是由系统程序拥有的。用户定义的程序由加载器程序加载。加载器程序能够将账户中的数据标记为可执行。

此时,加载器验证了字节码,字节码被加载到的账户可以作为一个可执行程序使用。新账户可以被标记为由用户定义的程序所拥有。

这里的关键是,程序是代码,在键值存储中,存在一些键的子集,这个程序并且只有这个程序有写访问权限。

交易指定一个指令向量。每条指令都包含程序、程序指令和交易要读写的账户列表。

像readv或writeev这样的接口会提前告诉内核用户想要读取或写入的内存。这允许操作系统预取、准备设备并在设备允许的情况下同时执行操作。

在Solana上,每条指令都会提前告诉虚拟机它要读和写哪些账户。

SIMD指令允许单段代码在多个数据流上执行。这意味着Sealevel可以执行一个额外的优化,这是Solana设计所特有的。

在性能方面没有免费的午餐。为了使SIMD优化可行,所执行的指令应该包含少量的分支,而且应该都采取相同的分支。

通过海平面的并行处理,与单线程运行时相比,Solana能够实现极高的吞吐量和可用性。

Solana|认识海湾流(Gulf Stream)以及海平面(Sealevel)_SolanaUniverse_火星财经

Solana 交易执行机制相关推荐

  1. 海外市场交易执行策略的实践

    海外证券市场交易执行策略真正得到重视是在1986年.该年,美国劳工部发布了86-1指引,要求金融市场将重点放在降低交易成本上,这使得证券市场开始重视交易成本,纷纷调整或优化交易执行策略.近年来,海外诸 ...

  2. js等待 callback 执行完毕_前端开发,一篇文章让你彻底搞懂,什么是JavaScript执行机制!...

    不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序.因为javascript是一门单线程语言,所以我们可 ...

  3. 深入理解js的执行机制

    写在前面 javascript在浏览器中被浏览器的js引擎执行解释,从执行上下文的角度分析一下js的执行机制 执行上下文 执行上下文被定义成javascript引擎在处理理解js代码时,所创建的一个动 ...

  4. JS在浏览器中的执行机制

    对JS执行机制进行一些梳理 单线程 JS是单线程执行的,但并不代表浏览器只有一个线程,它还包括: UI渲染线程 浏览器事件触发线程 http请求线程 计时器线程 EventLoop轮询的处理线程 JS ...

  5. 这一次,彻底弄懂 JavaScript 执行机制

    本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定 ...

  6. 彻底搞懂JavaScript执行机制

    首先我们大家都了解的是,JavaScript 是一门单线程语言,所以我们就可以得出: JavaScript 是按照语句顺序执行的 首先看: let a = '1' console.log(a) let ...

  7. 理解JavaScript的执行机制

    一直没有深入了解过JavaScript的事件执行机制,直到看到了这篇文章:<这一次,彻底弄懂JavaScript执行机制> 才发觉熟悉JavaScript的执行机制非常重要. 毕竟在跟进项 ...

  8. Session执行机制与原理

    什么是Session 首先了解一下Session的中文意思:一次会话,什么是一次会话呢?我举个例子:就我们现在上网,打开浏览器浏览网站当时开始到你关闭浏览器,就称之为一次会话: 也可以这么理解,当你在 ...

  9. .vb.net 执行js方法_Deno的执行机制

    上一篇主要围绕Deno核心模块中安全沙箱机制与依赖引入管理进行了讲解.本篇文章我们将对Deno的执行机制进行一些介绍. Deno的架构 先说说Deno的架构吧,这是官网的核心架构图 不过这张图很久没更 ...

  10. JVM调优系列:(三)类加载和执行机制

    类加载机制 JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述: 每个ClassLoader加载Class的过程是: 1.检测此Class是否载入过(即 ...

最新文章

  1. Flask-RESTful之请求处理
  2. 关于微信小程序登录授权
  3. Oracle osw监控工具的使用示例
  4. 图像处理(七)导向滤波磨皮
  5. arm linux内核调试,kgdb在ARM开发板上调试kernel成功
  6. 使用vue组件搭建网页应用
  7. 如何用sbt新建akka项目
  8. 数字信号处理——时频分析(短时傅里叶变换)
  9. 如何理解Spring对缓存的支持
  10. pyqt5设置dialog的标题_Python GUI教程(一):在PyQt5中创建第一个GUI图形用户界面...
  11. 云服务器更换系统要钱吗,云服务器可以更换系统吗
  12. m.微博各种接口分析
  13. 威纶通触摸屏控制台达变频器
  14. uniapp 小程序扫描二维码
  15. python matplotlib 基础练习:画一元二次函数
  16. 市场分析文档(从0到1开始设计产品,明确你想做的产品的方向)
  17. 09.python常用数据类型—字典
  18. 【包学包会】系统篇【重装+备份+还原】
  19. OKRs, How Google sets goals, Startup Lab workshop | Chatopera
  20. 如何提高亚马逊排名?亚马逊排名规则有哪些?

热门文章

  1. 205615872 能用来干么?
  2. 页面滚动可视区域的获取
  3. 理解数据类型与数学运算:摄氏温度与华氏温度的相互转换
  4. 九度OJ1451题-信封错装
  5. C/C++变量在内存中的位置及初始化问题
  6. 机器学习之KNN 算法
  7. 定向搜索(beam search)
  8. 15种排序算法可视化展示
  9. ios怎么引入masonry_iOS Masonry的使用需要注意的地方
  10. explain ref_explain的属性详解与提速百倍的优化示例