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 在 魔法豆
169,940 每月下载量
在 217 个crate中(25个直接使用)
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