准入控制
是Libra的公共API接口,它用于接收来自客户端的公共gRPC请求。
接受两种类型的请求: 提交交易;更新最新分布式账本
字节码验证程序
用于检查堆栈使用、类型、资源及引用的安全性
CFG构建,通过将指令集拆解为一组基本块,构造一个控制流程图。
引用在字节码语言中是一等的。函数可以通过以下几种方式获得新的引用:
- 输入参数。
- 获取局部变量中地址值。
- 获取全局发布地址值。
- 从对包含结构的引用中获取地址的字段。
- 函数返回值。
共识协议
共识协议组件使用LibraBFT共识协议进行状态机复制。
选择HotStuff协议作为LibraBFT的基础有三个原因: (i) 简单和模块化; (ii) 方便将共识与执行集成的能力; (iii) 在早期实验中表现良好。HotStuff协议分解为安全模块(投票和提交规则)和存活模块(“复活起搏器”)。 这种解耦提供了开发和实验两套可独立并行运行环境的能力。
共识组件中的主要子组件是:TxnManager ,StateComputer,BlockStore,EventProcessor ,Pacemaker ,SafetyRules
加密组件
加密组件承载我们在Libra中使用的关于加密所有实现:散列,签名和密钥派生/生成。 NextGen目录包含未来版本中要使加密的实现:新的加密API增强类型安全,可验证的随机函数,BLS签名。
执行组件
执行组件根据完全有序的交易,通过Move虚拟机来计算每个交易输出,然后将输出应用于先前的状态,并生成一个新的状态,执行组件和共识算法 — HotStuff 一种基于领导者的算法 — 协同工作, 帮助它提议对一组拟议的交易及其执行达成一致
内存池 Mempool
内存池是一个内存缓冲区,用于保存等待执行的交易。
在内部,内存池被建模为 HashMap<AccountAddress, AccountTransactions>
并在其上构建了各种索引。
Move IR 编译器
Move IR编译器将Move IR编译为其字节码表示形式。
Move 编程语言
Move 语言目录由五个部分组成:VM,字节码验证器,Move中间层表示 (IR: intermediate representation) 编译器,标准库,一些测试 。
网络
网络组件向验证器的其他组件提供点对点网络服务。
网络组件是专门为促进共识和共享内存池协议而设计的。目前,它为这些组件提供了两个主要接口:RPC,DirectSend。
网络组件使用:Multiaddr,TCP,Noise ,Yamux ,推送类型的 gossip
存储模块
存储模块为Libra区块链上的所有数据集以及Libra Core内部使用的必要数据提供可靠和高效的持久存储。
存储模块使用 RocksDB 作为其物理存储引擎。
虚拟机
MoveVM 有两个主要的包:核心VM(core VM)和VM运行环境(VM runtime)。