Libra结构

2019-11-11

### 文件结构

文件结构

  • admission_control

    • Libra的公共API接口,它用于接收来自客户端的公共gRPC请求
    • 准入控制(AC)处理于来自客户的两种类型的请求
        1. 提交交易: 向关联的验证器提交交易
        • 验证过程
          • 首先检查交易签名
          • 然后由vm_validator验证交易
          • ✅ 通过所有验证
            • 发送到内存池
              • 提交成功
              • 提交失败
        1. 更新最新分布式账本 - 查询存储,例如帐户状态,交易日志,验证等
        • 请求将直接传递到存储进行查询
  • 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: 验证编译后的字节码的语义。
  • 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。
  • rust-toolchain

  • scripts

  • state-synchronizer

  • storage

    • 存储模块为Libra区块链上的所有数据集以及Libra Core内部使用的必要数据提供可靠和高效的持久存储。
    • 存储模块目的:
        1. 保留区块链数据,特别是验证方通过共识协议达成一致的交易及其输出。
        1. 为任何查询提供一个带有Merkle证明的响应,该查询要求部分区块链数据。
  • target

  • terraform

  • testsuite

  • types

  • vm-validator