Skip to main content

aptos-keyless_validation

aptos-move/aptos-vm/src/keyless_validation.rs

这个 Rust 代码文件主要涉及 Aptos 区块链项目中的无钥验证(Keyless Validation)。它定义了一些函数和宏,用于从链上获取资源和配置,并验证交易中的无钥认证器(Keyless Authenticators)。下面是对每个函数和宏的解释:

  1. value_deserialization_error!:

    • 这是一个宏,用于生成带有特定错误消息的VMStatus对象,表示值反序列化错误。
  2. get_resource_on_chain:

    • 这个函数用于从链上获取资源。它通过解析资源的字节数据并反序列化为指定的类型T来实现这一点。如果获取或反序列化过程失败,它会返回适当的VMStatus错误。
  3. get_current_time_onchain:

    • 这个函数用于从链上获取当前时间配置(CurrentTimeMicroseconds)。如果获取失败,它会返回一个反序列化错误。
  4. get_jwks_onchain:

    • 这个函数用于从链上获取 JSON Web Key 集合(PatchedJWKs)。如果获取失败,它会返回一个反序列化错误。
  5. get_groth16_vk_onchain:

    • 这个函数用于从链上获取 Groth16 验证密钥(Groth16VerificationKey)。它调用get_resource_on_chain函数来实现这一点。
  6. get_configs_onchain:

    • 这个函数用于从链上获取配置(Configuration)。它调用get_resource_on_chain函数来实现这一点。
  7. get_jwk_for_authenticator:

    • 这个函数用于获取与给定公钥和签名对应的 JSON Web Key(JWK)。它解析 JWT 头并从 JWK 集合中获取相应的 JWK。如果解析或获取失败,它会返回适当的VMStatus错误。
  8. validate_authenticators:

    • 这个函数是整个文件的核心功能,它用于验证交易中的所有无钥认证器。它执行以下步骤:
      • 检查特性标志以确保相关功能已启用。
      • 检查 Groth16 验证密钥是否已设置(如果有零知识证明认证器)。
      • 获取链上配置并检查交易中的签名数量是否超出限制。
      • 获取链上的当前时间并检查所有认证器的过期时间。
      • 获取链上的 JWK 集合。
      • 验证每个认证器的签名和证书,包括零知识证明和 OpenID 签名。

这个代码文件的主要目的是确保交易中的无钥认证器是有效的,并且可以根据链上的配置和资源进行验证。