libra协议实现(学习笔记)

准入控制

是Libra的公共API接口,它用于接收来自客户端的公共gRPC请求。

接受两种类型的请求: 提交交易;更新最新分布式账本

字节码验证程序

用于检查堆栈使用、类型、资源及引用的安全性

CFG构建,通过将指令集拆解为一组基本块,构造一个控制流程图。

引用在字节码语言中是一等的。函数可以通过以下几种方式获得新的引用:

  • 输入参数。
  • 获取局部变量中地址值。
  • 获取全局发布地址值。
  • 从对包含结构的引用中获取地址的字段。
  • 函数返回值。

共识协议

共识协议组件使用LibraBFT共识协议进行状态机复制。

选择HotStuff协议作为LibraBFT的基础有三个原因: (i) 简单和模块化; (ii) 方便将共识与执行集成的能力; (iii) 在早期实验中表现良好。HotStuff协议分解为安全模块(投票和提交规则)和存活模块(“复活起搏器”)。 这种解耦提供了开发和实验两套可独立并行运行环境的能力。

共识组件中的主要子组件是:TxnManagerStateComputerBlockStoreEventProcessorPacemakerSafetyRules

加密组件 

加密组件承载我们在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,NoiseYamux ,推送类型的 gossip

存储模块

存储模块为Libra区块链上的所有数据集以及Libra Core内部使用的必要数据提供可靠和高效的持久存储。

存储模块使用 RocksDB 作为其物理存储引擎。

虚拟机

MoveVM 有两个主要的包:核心VM(core VM)和VM运行环境(VM runtime)。

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值