【问题标题】:the trait bound is not satisfied error in library [duplicate]库中的特征界限不满足错误[重复]
【发布时间】:2019-05-11 03:02:21
【问题描述】:

我正在尝试使用 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 很陌生,我正在努力理解它,但我发现它非常困难。请解释我的错误是什么。谢谢!

【问题讨论】:

  • 我已经复制了您的代码并得到了另一个错误:“在当前范围内找不到类型 secp256k1::Secp256k1&lt;secp256k1::All&gt; 的名为 generate_keypair 的方法”。请提供minimal reproducible example,包括 crate 版本,这样可以得到同样的错误。

标签: random rust traits


【解决方案1】:

这似乎是 crate 版本不匹配。 rand crate 的最新版本是 0.6.1,但 secp256k1 0.12.0 依赖于更旧的版本 - 0.4.3。

快速解决方法是使用旧版本的rand:

[dependencies]
rand = "0.4.3"

并考虑要求secp256k1 的作者更新他们的依赖关系。

我发现这个的方法是在 Cargo.lock 文件中搜索,该文件包含您的应用程序使用的所有实际版本的依赖项。

【讨论】:

  • 在 Cargo.lock 文件中搜索——副本描述了一种更自动化的方法来查找此错误。
  • 更新他们的依赖关系——我会特别要求他们增加版本范围。大概他们的代码可以支持 rand 的 0.4 到 0.6 版本。
猜你喜欢
  • 1970-01-01
  • 2022-11-27
  • 2021-08-23
  • 1970-01-01
  • 2021-01-17
  • 2021-07-24
  • 2019-10-11
  • 1970-01-01
  • 2021-03-28
相关资源
最近更新 更多