13 unstable releases (3 breaking)
new 0.3.5 | Sep 13, 2024 |
---|---|
0.3.4 | Sep 13, 2024 |
0.3.0 | Aug 28, 2024 |
0.2.1 | Aug 2, 2024 |
0.0.0-reserved | Nov 23, 2023 |
#193 in Magic Beans
77,182 downloads per month
Used in 55 crates
(14 directly)
23KB
333 lines
alloy-signer
Ethereum signer abstraction.
You can implement the Signer
trait to extend functionality to other signers
such as Hardware Security Modules, KMS etc. See its documentation for more.
Signer implementations in Alloy:
Examples
Sign an Ethereum prefixed message (EIP-712):
use alloy_signer::{Signer, SignerSync};
use alloy_signer_local::PrivateKeySigner;
// Instantiate a signer.
let signer = PrivateKeySigner::random();
// Sign a message.
let message = "Some data";
let signature = signer.sign_message_sync(message.as_bytes())?;
// Recover the signer from the message.
let recovered = signature.recover_address_from_msg(message)?;
assert_eq!(recovered, signer.address());
# Ok::<_, Box<dyn std::error::Error>>(())
Sign a transaction:
use alloy_consensus::TxLegacy;
use alloy_primitives::{U256, address, bytes};
use alloy_signer::{Signer, SignerSync};
use alloy_signer_local::PrivateKeySigner;
use alloy_network::{TxSignerSync};
// Instantiate a signer.
let signer = "dcf2cbdd171a21c480aa7f53d77f31bb102282b3ff099c78e3118b37348c72f7"
.parse::<PrivateKeySigner>()?;
// Create a transaction.
let mut tx = TxLegacy {
to: address!("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045").into(),
value: U256::from(1_000_000_000),
gas_limit: 2_000_000,
nonce: 0,
gas_price: 21_000_000_000,
input: bytes!(),
chain_id: Some(1),
};
// Sign it.
let signature = signer.sign_transaction_sync(&mut tx)?;
# Ok::<_, Box<dyn std::error::Error>>(())
Dependencies
~16MB
~356K SLoC