在当前范围内找不到类型为 `secp256k1::Secp256k1` 的名为 `generate_keypair` 的方法

max*_*axm 1 rust

我正在尝试在 Rust 中使用 secp256k1 库。我有一个简单的测试程序无法编译,因为它找不到generate_keypair

extern crate secp256k1;
extern crate rand;

use secp256k1::{Secp256k1, ContextFlag};
use rand::{thread_rng};

fn main() {
    let full = Secp256k1::with_caps(ContextFlag::Full);
    let (sk, pk) = full.generate_keypair(&mut thread_rng()).unwrap();
}
Run Code Online (Sandbox Code Playgroud)

这无法编译并出现错误:

extern crate secp256k1;
extern crate rand;

use secp256k1::{Secp256k1, ContextFlag};
use rand::{thread_rng};

fn main() {
    let full = Secp256k1::with_caps(ContextFlag::Full);
    let (sk, pk) = full.generate_keypair(&mut thread_rng()).unwrap();
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我使用该库的方式与其在库的测试中的使用方式类似。

我已经将 rand 回滚到 0.3,将 secp256k1 回滚到 0.6,现在它可以工作了。我对任何关于为什么现在已损坏的想法感兴趣。

She*_*ter 5

docs.rs上 secp256k1 0.8.1 版文档没有列出任何方法generate_keypair

如果你查看源代码,你会看到:

/// Generates a random keypair. Convenience function for `key::SecretKey::new`
/// and `key::PublicKey::from_secret_key`; call those functions directly for
/// batch key generation. Requires a signing-capable context.
#[inline]
#[cfg(any(test, feature = "rand"))]
pub fn generate_keypair<R: Rng>(&self, rng: &mut R)
Run Code Online (Sandbox Code Playgroud)

generate_keypair功能仅在您启用可选rand依赖项时可用。这是在提交 29892960中引入的。不幸的是,这个 crate 的维护者没有将版本标签发布到 git 存储库,因此很难判断这个更改发生在哪个版本。