【发布时间】:2019-07-25 12:13:09
【问题描述】:
我正在尝试使用https://docs.rs/ethkey/0.2.5/ethkey/ 此处的函数为以太坊编写密钥文件:
let key = EthAccount::load_or_generate("Users/Documents/Code/Thor/thor/parity/keys", "passwd")
.expect("should load or generate new eth key");
println!("{:?}", key.address());
不幸的是,它不起作用并出现以下错误:
thread 'main' panicked at 'should load or generate new eth key: Error(SerdeJsonError(Error("Is a directory (os error 21)", line: 0, column: 0)), State { next_error: None, backtrace: InternalBacktrace { backtrace: None } })', src/libcore/result.rs:999:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
更新
load_or_generate 在我输入~ 作为第一个参数时有效,但不是我真正想要我的密钥的文件路径,即Users/Documents/Code/Thor/thor/parity/keys
更新
我现在正在使用前面带有斜杠的完整路径,但仍然有效。即
let key = EthAccount::load_or_generate("./Users/samueldare/Documents/Code/Thor/thor/parity/keys", "passwd")
.expect("should load or generate new eth key");
println!("{:?}", key.address());
我会在这方面给予指点
【问题讨论】:
-
这与your other question有何不同?
-
现在不使用 home,使用文件路径适用于 home,即 ` ~ ` 但不是文件路径。即
"Users/Documents/Code/Thor/thor/parity/keys" -
正在使用 vscode 吗?如果是这样,请右键单击函数 (
load_or_generate) 并转到该函数的源代码并开始阅读以确定该函数需要什么。这将帮助您了解 Serde crate 生成的错误消息,其中包含用于解析此消息。 -
但如果我理解错误,ethkey 会抱怨
.../parity/keys是一个目录,而不是一个文件。该文档还说:pub fn load_or_generate<P, W>(file_path: P, password: W)所以它应该是一个文件,而不是一个目录? -
这就是 ok(()) 腿.. 错误是要创建一个新的密钥文件 let (secret, log_msg) = match File::open(&file_path) { Ok(file) => { 让 key_file: KeyFile = serde_json::from_reader(file)?;让秘密 = SecretKey::from_crypto(&key_file.crypto, &pwd)?; (秘密,“加载”)} Err(_e) => { 让秘密 = SecretKey::from_raw(&random_bytes())?; save_key(&secret, &file_path, pwd)?; (秘密,“生成并保存”)
标签: rust rust-cargo