#language #api-client #json-selector #public-key #transaction #http-client #cli

bin+lib walleth

一个 (WIP) Rust 库,用于轻松创建、管理、使用和保护以太坊账户

1 个不稳定版本

0.1.0 2023年9月18日

#5 in #json-selector

自定义许可

39KB
639

walleth

一个 (WIP) Rust 库,用于轻松创建、管理、使用和保护以太坊账户。与密钥交互和签名交易将像呼吸一样简单(将会)。

目录

模块

密钥链

密钥链是管理钱包密钥的主要数据结构,它提供了访问由助记词(在构造时提供或动态创建)生成的 HD 钱包。

其核心目的是提供一个易于使用的 API 来创建、管理、使用和保护身份,或公私钥对。

密钥链所持有的敏感数据可以使用密码锁定。提供的密码和随机盐用于推导出公钥,该公钥用于加密安全组件中的所有内部 Vault

有关 VaultSafe 的更多信息可以在 保险库安全组件 部分中找到。

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) 钱包,它可以生成新的密钥并签名交易。

当锁定时,助记词短语会被安全加密,密钥会被从内存中移除。当解锁时,助记词短语会被解密,密钥会在内存中重新创建。

如果你查看过 KeychainVault 的 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