内存池 Mempool 是位于内存的缓冲区,那些等待执行的交易便保存于此。

概述

准入控制(AC)模块将交易发送到内存池。在共识提交之前,内存池将交易保留一段时间。添加新交易时,内存池会与系统中的其他验证器(验证程序节点)共享此交易。内存池是“共享的”,因为各个内存池之间的交易都与其他验证器共享。这有助于维护伪全局的排序(pseudoglobal ordering)。

当验证器从另一个内存池接收交易的时候会对验证器进行排序,然后加入到接收验证器的有序队列。为了减少共享内存池中的网络消耗,每个验证器负责自己交易的通讯。我们不重播来自对等验证器(Peer Validator)的交易。

我们只广播那些有可能包含在下一个区块中的交易。这意味着交易的序列是发件人帐户的下一个序列,或者是发送方帐户的顺序。例如当前帐户的序列为 2,本地内存池包含序列为 2,3,4,7,8 的交易,则广播交易只是 2,3 和 4。

共识模块从内存池得到交易,但内存池不会把交易推到共识模块。这是为了确保在达成共识之前为交易做好准备:

  • 内存池可以基于气化值继续排序交易,并且
  • 共识允许在内存池中建立交易。

这会把交易分组到一个共识区块中,并按气化值确定优先级。

内存池不跟踪发送到共识模块的那些交易。对于每个 get_block 请求(从内存池提取的一个交易区块),共识模块会发送一组从内存池中提取但未提交的交易。这使得内存池对不同共识的分支保持不可知。

当交易完全执行并写入存储时,共识模块会通知内存池,然后内存池l从其内部状态删除该交易。

实施细节

在内部的内存池被建模为 HashMap<AccountAddress, AccountTransactions>,构建了各种索引。

主索引 - PriorityIndex 是一个有序的交易队列,它已“准备好”包含在下一个块中(即它们具有与该帐户的当前序列号修图的序列号)。这个队列按气化值(Gas)价格排序,这样如果客户愿意为每个执行单位支付更多气化值(比其他客户),那么他们可以提前达成共识。

请注意,全局排序是按照气化值排序的,即使如此,对于单个帐户却是按序号来排序交易的。下一个区块中尚未整合好的所有交易都是单独的 ParkingLotIndex 的一部分。一旦某个事件解除阻塞,它们就会被移动到有序队列中。

举个例子:内存池有一个序列号为 4 的交易,而该帐户的当前序列号是 3。该交易被认为“尚未就绪”。来自共识协议的回调通知交易已提交(例如交易 3 已提交给另一个节点,因此已经算在链上提交了)。此事件则会“解除阻塞”本地交易,并将交易 4 移动到 OrderedQueue。

内存池只持有有限数量的交易,以避免积压系统,和防止滥用和被攻击。内存池中的交易有两种超时(expiration)类型:systemTTL 和客户端指定的超时。当其中任何一个超时内存池会删除那交易。

后台的 SystemTTL 会定期检查,对于每一笔共识提交请求都会检查其超时过期值,该过期值是客户端指定的。我们使用一个单独的 SystemTTL 来确保交易不会永远停留在内存池中,即使共识协议没有取得进展。

文件结构

mempool/src
├── core_mempool             # 核心数据结构
├── proto                    # protobuf 内存池交互的接口
├── lib.rs
├── mempool_service.rs       # gRPC 服务
├── runtime.rs               # 内存池和 gRPC 服务的共享绑定
└── shared_mempool.rs        # 共享内存池

译自:https://developers.libra.org/docs/crates/mempool

Facebook Libra 内存池组件(Mempool)简介相关推荐

  1. 内存池组件以及根据nginx内存池源码设计实现简易内存池

    目录 造轮子内存池原因引入 大量的malloc/free小内存所带来的弊端 弊端 出现场景 大牛解决措施(nginx内存池) 内存池技术 啥叫作内存池技术 内存池技术为啥可以解决上文弊端 高并发内存池 ...

  2. 如何衡量系统内存健康程度: memdelay简介

    简介 最近在upstream上, Johannes Weiner发了一个memdelay的patch, 主要是衡量系统内存的健康程度, 在对它进行分析和优化之后, 做了一个简单的总结 memdelay ...

  3. Facebook Libra不会和主权货币竞争

    "Libra之父"马库斯听证会证词曝光:Facebook Libra不会和主权货币竞争 据外媒报道,美国参议院银行.住房和城市事务委员会将于北京时间周二晚10点就Facebook的 ...

  4. 以太坊V神首次点评Facebook Libra

    以太坊2.0拥有1024个分片,共识算法和跨分片沟通由信标链管理.对于Facebook Libra,Vitalik认为,它"绝对会"和去中心化的区块链公链形成竞争. 本文旨在传递更 ...

  5. Facebook Libra的Move语言与其他语言有什么不同?

    硅谷Live / 实地探访 / 热点探秘 / 深度探讨 前言 6 月 18 日,Facebook 发布 Libra 项目白皮书,旨在建立一个简单的全球性货币且为数十亿人赋能的金融基础设施.Facebo ...

  6. 关于c语言字符串函数和一些内存函数的的简介

    关于c语言字符串函数和一些内存函数的的简介 求字符串长度的函数 strlen函数介绍![在这里插入图片描述](https://img-blog.csdnimg.cn/20190301142458376 ...

  7. ListView控件使用简介(转载)

    ListView控件使用简介 ListView控件在各类程序中,具有数据显示直观,操作方便的特点.所以使用率极高,但控件的各类参数众多,很多初学者不易掌握,在此列举该控件的一些常用方法,属性,希望对初 ...

  8. 区块链与金融基础设施——兼论Facebook Libra

    前言 本文作者为万向区块链&PlatON云图首席经济学家邹传伟博士.邹博士研究了区块链对金融基础设施的影响,并从这个角度分析了近期备受关注的Facebook Libra.本文的结论是:金融基础 ...

  9. TokenInsight 对话首席——Facebook Libra背后共识算法第一作者首次中文平台深度访谈...

    邀行业首席,谈市场现状,见趋势未来!第14期<对话首席>线上直播,于7月19日(周五)上午11点举办. 本次<对话首席>特邀Facebook Libra背后共识算法第一作者.康 ...

最新文章

  1. find到带空格文件名用xargs处理的技巧
  2. 世界不乏爱因斯坦,缺乏的适合他茁壮成长的环境
  3. 解决System.Web.Script.Serialization导入失败
  4. 在MFC中使用Cstring
  5. Hibernate的CURD操作
  6. jquery 图像滑块_如何使用jQuery构建图像滑块
  7. 5个节点hadoop安装(zookeeper)
  8. ArcGIS10.2安装教程
  9. 思科交换机配置链路聚合
  10. 【计算机网络】(谢希仁)第七版答案
  11. python之OCR文字识别
  12. LOMO效果的PS Action
  13. 浅谈大数据和人工智能
  14. iOS报错 之 The app delegate must implement the window property if it wants to use
  15. 【收藏】2020届互联网公司校招时间总表
  16. 今日芯声 | 马云才是孙正义背后的男人!孙正义称从马云身上学到很多
  17. excel字符串和单元格拼接_excel拼接函数_excel使用公式进行文本拼接的方法
  18. Android开发之播放音频
  19. java线程安全的list_Java的List如何实现线程安全?
  20. 伪装计算机主机,位置伪装大师电脑版

热门文章

  1. 两个程序悲催的进化旅程
  2. 岭南师范学院专插本计算机,2019年岭南师范学院专插本最低录取分数线
  3. 傻乖透明小电视(最近在苦逼实习,实习结束整理发布,先来点彩蛋,关注后不会错过哦~)——ESP8266 NodeMCU+OLED+DFPlayer Mini+小喇叭
  4. matlab打开dat形式文件_matlab 读取dat文件
  5. dw网页制作入学教程_网站制作之dreamweaver入门
  6. 测试ResNet在ImageNet验证集上的准确率
  7. 用动态面板阈值模型研究金融和经济增长的关系
  8. IMX6ULL裸机程序--4.时钟树分析
  9. SaveLoad--Unity存档读档的学习总结
  10. 达人评测 迅鲲1300t相当于骁龙多少 迅鲲1300T对比骁龙870哪个好