7个版本

0.2.1 2024年8月2日
0.2.0 2024年7月16日
0.1.5 2024年7月16日
0.1.3 2024年6月25日
0.0.0-保留2023年11月23日

#279 in 魔法豆

Download history 3/week @ 2024-06-05 1337/week @ 2024-06-12 6014/week @ 2024-06-19 7095/week @ 2024-06-26 7856/week @ 2024-07-03 9393/week @ 2024-07-10 11930/week @ 2024-07-17 12178/week @ 2024-07-24 14955/week @ 2024-07-31 17592/week @ 2024-08-07 16693/week @ 2024-08-14

63,517 每月下载量
用于 49 个crate(13 个直接使用)

MIT/Apache

23KB
333

合金签名者

以太坊签名抽象。

您可以实现 Signer 特性,以扩展功能到其他签名者,如硬件安全模块、KMS 等。更多信息请参阅 其文档

Alloy 中的签名者实现

示例

签名以太坊前缀消息(《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>>(())

签名交易

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

依赖关系

~16MB
~352K SLoC