37个版本 (16个稳定版)

2.0.14 2024年3月6日
2.0.11 2023年11月16日
2.0.8 2023年7月15日
2.0.2 2023年3月28日
0.1.3 2020年6月20日

#920魔法豆

Download history 47923/week @ 2024-04-14 46286/week @ 2024-04-21 38709/week @ 2024-04-28 40031/week @ 2024-05-05 44803/week @ 2024-05-12 41473/week @ 2024-05-19 38264/week @ 2024-05-26 43558/week @ 2024-06-02 46340/week @ 2024-06-09 45640/week @ 2024-06-16 46155/week @ 2024-06-23 38909/week @ 2024-06-30 40200/week @ 2024-07-07 42122/week @ 2024-07-14 43516/week @ 2024-07-21 42281/week @ 2024-07-28

169,940 每月下载量
217 个crate中(25个直接使用)

MIT/Apache

1MB
21K SLoC

ethers-signers

本地签名以太坊交易的统一接口。

警告

此库正在被弃用。更多信息请参阅 #2667

您可以通过实现 Signer 特征来扩展功能以支持其他签名者,例如硬件安全模块、KMS等。

公开的接口返回可恢复的签名。要将签名和TransactionRequest 转换为 Transaction,请参阅签名中间件。

支持的签名者

更多信息,请参阅书籍

示例

# use ethers_signers::{LocalWallet, Signer};
# use ethers_core::{k256::ecdsa::SigningKey, types::TransactionRequest};
# async fn foo() -> Result<(), Box<dyn std::error::Error>> {
// instantiate the wallet
let wallet = "dcf2cbdd171a21c480aa7f53d77f31bb102282b3ff099c78e3118b37348c72f7"
    .parse::<LocalWallet>()?;

// create a transaction
let tx = TransactionRequest::new()
    .to("vitalik.eth") // this will use ENS
    .value(10000).into();

// sign it
let signature = wallet.sign_transaction(&tx).await?;

// can also sign a message
let signature = wallet.sign_message("hello world").await?;
signature.verify("hello world", wallet.address()).unwrap();
# Ok(())
# }

签名以太坊前缀消息(eip-712

# use ethers_signers::{Signer, LocalWallet};
# async fn foo() -> Result<(), Box<dyn std::error::Error>> {
let message = "Some data";
let wallet = LocalWallet::new(&mut rand::thread_rng());

// Sign the message
let signature = wallet.sign_message(message).await?;

// Recover the signer from the message
let recovered = signature.recover(message)?;

assert_eq!(recovered, wallet.address());
# Ok(())
# }

依赖项

~12–30MB
~475K SLoC