#crypto #ethers #ethereum #web3 #celo

ethers-signers

A unified interface for locally signing Ethereum transactions

36 releases (15 stable)

2.0.13 Jan 30, 2024
2.0.11 Nov 16, 2023
2.0.10 Sep 7, 2023
2.0.8 Jul 15, 2023
0.1.3 Jun 20, 2020

#1283 in Magic Beans

Download history 27808/week @ 2023-10-29 30178/week @ 2023-11-05 30785/week @ 2023-11-12 35389/week @ 2023-11-19 42858/week @ 2023-11-26 44665/week @ 2023-12-03 41550/week @ 2023-12-10 39160/week @ 2023-12-17 22397/week @ 2023-12-24 31233/week @ 2023-12-31 46470/week @ 2024-01-07 48676/week @ 2024-01-14 49196/week @ 2024-01-21 77298/week @ 2024-01-28 58772/week @ 2024-02-04 52797/week @ 2024-02-11

241,794 downloads per month
Used in 168 crates (19 directly)

MIT/Apache

325KB
7K SLoC

ethers-signers

A unified interface for locally signing Ethereum transactions.

Warning

This library is in the process of being deprecated. See #2667 for more information.

You can implement the Signer trait to extend functionality to other signers such as Hardware Security Modules, KMS etc.

The exposed interfaces return a recoverable signature. In order to convert the signature and the TransactionRequest to a Transaction, look at the signing middleware.

Supported signers:

For more information, please refer to the book.

Examples

# 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(())
# }

Sign an Ethereum prefixed message (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(())
# }

Dependencies

~0–20MB
~270K SLoC