3

我一直在尝试实现以下文档中给出的示例:https ://docs.rs/ed25519-dalek/1.0.1/ed25519_dalek/

我的代码很简单:

extern crate rand;
extern crate ed25519_dalek;


use rand::rngs::OsRng;
use ed25519_dalek::Keypair;


fn main() {
    let mut csprng = OsRng{};
    let keypair: Keypair = Keypair::generate(&mut csprng);
}

但是当我尝试运行时,我收到一条错误消息,指出该CryptoRng特征未在OsRng

11  |     let keypair: Keypair = Keypair::generate(&mut csprng);
    |                                              ^^^^^^^^^^^ the trait `rand_core::CryptoRng` is not implemented for `OsRng`

然而,CryptoRng只是一个标记特征,我看到它确实有一个空的 impl for OsRng...

那么这里的问题可能是什么?

4

1 回答 1

7

通常,当您收到这些令人困惑的消息时,当它明显满足时说“未满足特征绑定”,或者当它显然是正确类型时说“错误类型”,您应该始终检查包版本。截至目前(ed25519-dalek v1.0.1),它取决于 rand 0.7.0(您也可以在 crates.io 上找到它)。您正在使用更新版本的 rand,具有“更新”版本的特征,并且它正在寻找 0.7.0 特征,而您提供 0.8.0 特征。

解决方案?将 rand 降级到 0.7.0 或使用依赖重命名来获得 rand 的 2 个版本,并将旧版本用于 ec25519-dalek。

于 2021-01-04T12:41:35.513 回答