#签名验证 #验证签名 #通用 #验证器 #地址 #钱包 #erc-6492

eth-signature-verifier

基于ERC-6492的通用以太坊签名验证

2个不稳定版本

0.2.0 2024年7月24日
0.1.0 2024年7月23日

#16#验证签名

Download history 205/week @ 2024-07-19 162/week @ 2024-07-26 9/week @ 2024-08-02 39/week @ 2024-08-09

415 每月下载量

MIT 许可证

68KB
1.5K SLoC

Rust 1.5K SLoC // 0.0% comments Solidity 158 SLoC // 0.2% comments

基于ERC-6492的通用以太坊签名验证

此crate验证任何以太坊签名,包括

  • EOAs
  • 带有ERC-1271的智能合约钱包
  • 带有ERC-6492的预部署合约钱包

用法

此crate使用Alloy,并需要一个RPC提供商来验证所有签名类型。

use alloy::primitives::{address, bytes, eip191_hash_message};
use alloy::providers::{network::Ethereum, ReqwestProvider};
use eth_signature_verifier::verify_signature;

#[tokio::main]
async fn main() {
    let address = address!("0xc0ffee254729296a45a3885639AC7E10F9d54979");
    let message = "coffee";
    let signature = bytes!("0x9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658");
    let provider = ReqwestProvider::<Ethereum>::new_http("https://rpc.example.com");

    let verification = verify_signature(signature, address, message, provider).await.unwrap();
    if verification.is_valid() {
        // signature valid
    }
}

此crate还允许从签名中提取地址,如下所示

use eth_signature_verifier::extract_address;

#[tokio::main]
async fn main() {
    let signature = bytes!("0x9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658")
    let address = extract_address(signature).await.unwrap(); // works for EOA, ERC1271, ERC6492
    dbg!(address);
}

src/lib.rs中查看测试用例以获取更多示例。

依赖项

~138MB
~2.5M SLoC