1 个不稳定版本
0.1.0 | 2023年9月18日 |
---|
#5 in #json-selector
39KB
639 行
walleth
一个 (WIP) Rust 库,用于轻松创建、管理、使用和保护以太坊账户。与密钥交互和签名交易将像呼吸一样简单(将会)。
目录
模块
密钥链
密钥链是管理钱包密钥的主要数据结构,它提供了访问由助记词(在构造时提供或动态创建)生成的 HD 钱包。
其核心目的是提供一个易于使用的 API 来创建、管理、使用和保护身份,或公私钥对。
密钥链所持有的敏感数据可以使用密码锁定。提供的密码和随机盐用于推导出公钥,该公钥用于加密安全组件中的所有内部 Vault
。
有关 Vault
和 Safe
的更多信息可以在 保险库 和 安全组件 部分中找到。
use walleth::Keychain
// Let's create a Keychain, a simple identity manager
let keychain = Keychain::new();
// And then add an ethereum address in a single line!
// The `account` variable is an instance of a struct
// that contains some non-sensitive data (no private keys!)
let account = keychain.add_account().unwrap();
// Let's execute something whenever the keychain state
// changes
keychain.subscribe(|state| {
println!("Keychain state changed: {:?}", state);
});
// And then lock it!
keychain.lock("my crazy password");
// You forgot to sign something?
// unlock again..
keychain.unlock("my crazy password");
// ..and use a signer!
let signature = keychain.use_signer(account.address, |signer| {
Ok(signer.sign(&b"A message")?)
}).unwrap();
保险库
保险库是一个安全包装在助记词短语背后的分层确定性 (HD) 钱包,它可以生成新的密钥并签名交易。
当锁定时,助记词短语会被安全加密,密钥会被从内存中移除。当解锁时,助记词短语会被解密,密钥会在内存中重新创建。
如果你查看过 Keychain
,Vault
的 API 可能看起来很熟悉
use walleth::Vault;
// Create a new vault
let vault = Vault::new();
// Generate new private key from the HD wallet in the vault
vault.add_key();
vault.add_key();
// Lock the vault
vault.lock(b"my secret password");
// Unlock the vault
vault.unlock(b"my secret password");
// Use a signer from the vault
vault.use_signer(0, |signer| {
signer.sign(&[0; 32])
});
安全组件
安全组件是一个对加密数据的无特定用途的容器,它提供了一个方便的函数来从密钥、一些未加密的字节和一些任意元数据创建它。
元数据不会被加密,可以用来存储有关加密数据的信息。
在构造时传递的未加密字节切片会被加密,可以用来存储敏感信息。
use walleth::Safe;
let safe = Safe::new("metadata", &[0, 1, 2, 3]);
assert_eq!(safe.metadata, "metadata");
assert_eq!(safe.get_bytes(), &[0, 1, 2, 3]);
let safe = Safe::from_plain_bytes("metadata", &[0, 32], &[0, 1, 2, 3, 4]).unwrap();
assert_eq!(safe.metadata, "metadata");
assert_eq!(safe.get_bytes(), &[0, 1, 2, 3]);
HDWallet
一个用于创建分层确定性钱包的简单模块。
use walleth::HDWallet;
// Create a new wallet from random seed
let hdwallet = HDWallet::new();
// Or from a mnemonic
let hdwallet = HDWallet::::from_mnemonic_str("grocery belt target explain clay essay focus spatial skull brain measure matrix toward visual protect owner stone scale slim ghost panda exact combine game").unwrap();
// Derive private key at path m'/60'/0'/0'/0
let private_key = hdwallet.private_key_at_path(0, 0, 0);
依赖项
~7.5MB
~79K SLoC