Facebook Libra 准入控制(AC)简介

准入控制 Admission Control

准入控制(AC)是 Libra 的公共 API,它响应来自客户端的公共 gRPC 请求。

概述

准入控制响应客户端的两种请求:

  • SubmitTransaction - 将交易提交给关联的验证器。
  • UpdateToLatestLedger - 查询存储,例如帐户状态,交易日志,协议等。

实施细节

准入控制(AC)实现了两个公共 API:

  • SubmitTransaction(SubmitTransactionRequest)
    将针对请求执行多次验证:
    1、先检查交易签名。如果检查失败,将返回 AdmissionControlStatus :: Rejected 给客户端;然后由 vm_validator 验证该交易。如果失败则将相应的 VMStatus 返回给客户端。
    2、一旦交易通过所有验证,AC 将从存储中查询发件人的帐户余额和最新序列号,并将其与客户端请求一起发送到内存池 Mempool。
    3、如果 Mempool 返回 MempoolAddTransactionStatus :: Valid 则会将 AdmissionControlStatus :: Accepted 返回给客户端,表示提交成功。否则将相应的 AdmissionControlStatus 返回给客户端。
  • UpdateToLatestLedger(UpdateToLatestLedgerRequest)。 AC中不执行额外处理。请求直接传递给存储进行查询。

这个模块是如何组织的?

.
├── README.md
├── admission_control_proto
│   └── src
│       └── proto                           # Protobuf 定义文件
└── admission_control_service
    └── src                                 # gRPC 服务源文件
        ├── admission_control_node.rs       # 在一个单独的线程中运行 AC 的包装器
        ├── admission_control_service.rs    # gRPC 服务及主要逻辑
        ├── main.rs                         # AC 二进制包的运行入口
        └── unit_tests                      # 单测

该模块与以下组件交互:

Mempool 组件,从客户端提交交易。存储组件,用于查询验证器存储。

译自:https://developers.libra.org/docs/crates/admission-control

发布了293 篇原创文章 · 获赞 260 · 访问量 232万+

猜你喜欢

转载自blog.csdn.net/zhangxin09/article/details/94210914