Facebook Libra 内存池组件(Mempool)简介
内存池 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)简介相关推荐
- 内存池组件以及根据nginx内存池源码设计实现简易内存池
目录 造轮子内存池原因引入 大量的malloc/free小内存所带来的弊端 弊端 出现场景 大牛解决措施(nginx内存池) 内存池技术 啥叫作内存池技术 内存池技术为啥可以解决上文弊端 高并发内存池 ...
- 如何衡量系统内存健康程度: memdelay简介
简介 最近在upstream上, Johannes Weiner发了一个memdelay的patch, 主要是衡量系统内存的健康程度, 在对它进行分析和优化之后, 做了一个简单的总结 memdelay ...
- Facebook Libra不会和主权货币竞争
"Libra之父"马库斯听证会证词曝光:Facebook Libra不会和主权货币竞争 据外媒报道,美国参议院银行.住房和城市事务委员会将于北京时间周二晚10点就Facebook的 ...
- 以太坊V神首次点评Facebook Libra
以太坊2.0拥有1024个分片,共识算法和跨分片沟通由信标链管理.对于Facebook Libra,Vitalik认为,它"绝对会"和去中心化的区块链公链形成竞争. 本文旨在传递更 ...
- Facebook Libra的Move语言与其他语言有什么不同?
硅谷Live / 实地探访 / 热点探秘 / 深度探讨 前言 6 月 18 日,Facebook 发布 Libra 项目白皮书,旨在建立一个简单的全球性货币且为数十亿人赋能的金融基础设施.Facebo ...
- 关于c语言字符串函数和一些内存函数的的简介
关于c语言字符串函数和一些内存函数的的简介 求字符串长度的函数 strlen函数介绍![在这里插入图片描述](https://img-blog.csdnimg.cn/20190301142458376 ...
- ListView控件使用简介(转载)
ListView控件使用简介 ListView控件在各类程序中,具有数据显示直观,操作方便的特点.所以使用率极高,但控件的各类参数众多,很多初学者不易掌握,在此列举该控件的一些常用方法,属性,希望对初 ...
- 区块链与金融基础设施——兼论Facebook Libra
前言 本文作者为万向区块链&PlatON云图首席经济学家邹传伟博士.邹博士研究了区块链对金融基础设施的影响,并从这个角度分析了近期备受关注的Facebook Libra.本文的结论是:金融基础 ...
- TokenInsight 对话首席——Facebook Libra背后共识算法第一作者首次中文平台深度访谈...
邀行业首席,谈市场现状,见趋势未来!第14期<对话首席>线上直播,于7月19日(周五)上午11点举办. 本次<对话首席>特邀Facebook Libra背后共识算法第一作者.康 ...
最新文章
- find到带空格文件名用xargs处理的技巧
- 世界不乏爱因斯坦,缺乏的适合他茁壮成长的环境
- 解决System.Web.Script.Serialization导入失败
- 在MFC中使用Cstring
- Hibernate的CURD操作
- jquery 图像滑块_如何使用jQuery构建图像滑块
- 5个节点hadoop安装(zookeeper)
- ArcGIS10.2安装教程
- 思科交换机配置链路聚合
- 【计算机网络】(谢希仁)第七版答案
- python之OCR文字识别
- LOMO效果的PS Action
- 浅谈大数据和人工智能
- iOS报错 之 The app delegate must implement the window property if it wants to use
- 【收藏】2020届互联网公司校招时间总表
- 今日芯声 | 马云才是孙正义背后的男人!孙正义称从马云身上学到很多
- excel字符串和单元格拼接_excel拼接函数_excel使用公式进行文本拼接的方法
- Android开发之播放音频
- java线程安全的list_Java的List如何实现线程安全?
- 伪装计算机主机,位置伪装大师电脑版
热门文章
- 两个程序悲催的进化旅程
- 岭南师范学院专插本计算机,2019年岭南师范学院专插本最低录取分数线
- 傻乖透明小电视(最近在苦逼实习,实习结束整理发布,先来点彩蛋,关注后不会错过哦~)——ESP8266 NodeMCU+OLED+DFPlayer Mini+小喇叭
- matlab打开dat形式文件_matlab 读取dat文件
- dw网页制作入学教程_网站制作之dreamweaver入门
- 测试ResNet在ImageNet验证集上的准确率
- 用动态面板阈值模型研究金融和经济增长的关系
- IMX6ULL裸机程序--4.时钟树分析
- SaveLoad--Unity存档读档的学习总结
- 达人评测 迅鲲1300t相当于骁龙多少 迅鲲1300T对比骁龙870哪个好