Libra结构
2019-11-11
### 文件结构
文件结构
-
admission_control
- Libra的公共API接口,它用于接收来自客户端的公共gRPC请求
- 准入控制(AC)处理于来自客户的两种类型的请求
-
- 提交交易: 向关联的验证器提交交易
- 验证过程
- 首先检查交易签名
- 然后由vm_validator验证交易
- ✅ 通过所有验证
- 发送到内存池
- 提交成功
- 提交失败
- 发送到内存池
-
- 更新最新分布式账本 - 查询存储,例如帐户状态,交易日志,验证等
- 请求将直接传递到存储进行查询
-
-
benchmark
- Libra的公共API接口,它用于接收来自客户端的公共gRPC请求
-
client
- RPC客户端上的Rust的封装
-
common
-
config
-
consensus
- 共识协议组件使用LibraBFT共识协议进行状态机复制。
- 共识组件主要在 Actor 程序模块中实现
- 使用消息传递在不同的子组件之间进行通信
- tokio 框架用作任务运行时
- 共识数据结构 BlockStore
- TxnManager 是内存池组件的接口,支持拉取交易以及删除已提交的交易。
- StateComputer 是访问执行组件的接口。
- BlockStore 维护提议块树,块执行,投票,仲裁证书和持久存储。
- EventProcessor 负责处理各个事件。
- Pacemaker 负责共识协议的活跃性。
- SafetyRules 负责共识协议的安全性。
- 所有共识消息都由其创建者签名,并由其接收者验证。
-
contributing
-
crypto
- 加密组件承载我们在Libra中使用的关于加密所有实现:散列,签名和密钥派生/生成。
- Libra 使用几种密码算法:
- SHA-3 作为主要的哈希函数。
- X25519 用于密钥交换。
- Ed25519 用于签名。
- HKDF: 基于HMAC的Extract-and-Expand密钥衍生函数(HKDF),基于 RFC 5869。
-
docker
-
documentation
-
executor
- 执行组件的主要实现
-
language
- vm
- 虚拟机 (VM), 它包含字节码格式、字节码解释器和执行交易块的基础设施。
- bytecode_verifier
- 字节码验证器, 其中包含一个静态分析工具,用于拒绝无效的Move字节码。
- IR: intermediate representation
- Move中间层表示编译器, 它将可读的程序文本编译成Move字节码.
- stdlib
- 标准库, 其中包含 LibraAccount 和 LibraCoin 等核心系统模块的Move IR代码。
- functional_tests
- 一些测试 ,用于虚拟机,字节码验证程序和编译器。
- compiler
- Move IR编译器将Move IR编译为其字节码表示形式。
- bytecode verifier: 验证编译后的字节码的语义。
- vm
-
libra-node
-
libra-swarm
-
mempool
- 准入控制(AC)模块将交易发送到内存池(Mempool)
- 在共识模块提交之前,内存池将会把交易保留一段时间
- 共识模块从内存池获取交易,内存池不会将交易推向共识
-
network
- 网络组件向验证器的其他组件提供点对点网络服务。
- RPC, 用于远程过程调用
- DirectSend, 用于向单个接收方发送“即发即忘”样式的消息
- 网络组件使用
- Multiaddr :用于对等寻址的方案。
- TCP :用于可靠传输。
- Noise :用于身份验证和点对点加密。
- Yamux :在单个链接上多路复用子流(substreams)。
- 推送类型的 gossip :用于对节点发现。
- 网络组件中的不同子组件:
- NetworkProvider
- 向客户端公开网络API。
- Peer Manager — 侦听入链接及主动连接网络上的其他对等节点。
- Connectivity Manager
- 当且仅当它是符合条件的网络成员时,才能确保我们保持与节点的连接。
- Discovery — 使用推送式来发现新的节点并更新现有节点的地址。
- Health Checker — 执行定期活动探测以确保对等/连接的健康状况。
- Direct Send — 允许向/从远程对等节点发送/接收消息。
- RPC — 允许向/从其他对等节点发送/接收RPC。
- NetworkProvider
- 网络组件向验证器的其他组件提供点对点网络服务。
-
rust-toolchain
-
scripts
-
state-synchronizer
-
storage
- 存储模块为Libra区块链上的所有数据集以及Libra Core内部使用的必要数据提供可靠和高效的持久存储。
- 存储模块目的:
-
- 保留区块链数据,特别是验证方通过共识协议达成一致的交易及其输出。
-
- 为任何查询提供一个带有Merkle证明的响应,该查询要求部分区块链数据。
-
-
target
-
terraform
-
testsuite
-
types
-
vm-validator