库中的特征绑定不满足错误

时间:2018-12-10 08:20:19

标签: random rust traits

我正在尝试使用secp256k1库生成密钥对。

在官方文档中,我找到了以下代码:

use rand::OsRng;
use secp256k1::{Secp256k1, Message};

let secp = Secp256k1::new();
let mut rng = OsRng::new().expect("OsRng");
let (secret_key, public_key) = secp.generate_keypair(&mut rng);

然后将其放入我的Cargo.toml

[dependencies]
rand = "0.6.1"

[dependencies.secp256k1]
features = ["rand"]
version = "0.12.0"

但是,出现此编译错误:

| secp.generate_keypair(&mut rng);
|      ^^^^^^^^^^^^^^^^ the trait `secp256k1::rand::Rng` is not implemented for 
                        `std::result::Result<rand::rngs::OsRng, rand::Error>`

我对Rust还是很陌生,我想了解它,但是我发现这非常困难。请解释我的错误。谢谢!

1 个答案:

答案 0 :(得分:2)

这似乎是板条箱版本不匹配。 rand板条箱的最新版本是0.6.1,但是secp256k1 0.12.0取决于更旧的版本-0.4.3

一个快速解决方案是使用旧版本的rand

[dependencies]
rand = "0.4.3"

并考虑要求secp256k1的作者更新其依赖性。

我发现此问题的方法是在Cargo.lock文件中进行搜索,该文件包含您的应用程序使用的所有实际依赖关系版本。