准入控制 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