Skip to content

Commit 45c0cae

Browse files
committed
fix(bdk): remove rand dependency
1 parent 0543801 commit 45c0cae

File tree

20 files changed

+412
-297
lines changed

20 files changed

+412
-297
lines changed

.github/workflows/cont_integration.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ jobs:
9292
uses: Swatinem/rust-cache@v2.2.1
9393
- name: Check bdk wallet
9494
working-directory: ./crates/wallet
95-
run: cargo check --target wasm32-unknown-unknown --no-default-features --features miniscript/no-std,bdk_chain/hashbrown,dev-getrandom-wasm
95+
run: cargo check --target wasm32-unknown-unknown --no-default-features --features miniscript/no-std,bdk_chain/hashbrown
9696
- name: Check esplora
9797
working-directory: ./crates/esplora
9898
run: cargo check --target wasm32-unknown-unknown --no-default-features --features miniscript/no-std,bdk_chain/hashbrown,async

crates/wallet/Cargo.toml

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,39 +13,31 @@ edition = "2021"
1313
rust-version = "1.63"
1414

1515
[dependencies]
16-
rand = "^0.8"
16+
rand_core = { version = "0.6.0" }
1717
miniscript = { version = "12.0.0", features = ["serde"], default-features = false }
18-
bitcoin = { version = "0.32.0", features = ["serde", "base64", "rand-std"], default-features = false }
18+
bitcoin = { version = "0.32.0", features = ["serde", "base64"], default-features = false }
1919
serde = { version = "^1.0", features = ["derive"] }
2020
serde_json = { version = "^1.0" }
2121
bdk_chain = { path = "../chain", version = "0.16.0", features = ["miniscript", "serde"], default-features = false }
2222

2323
# Optional dependencies
2424
bip39 = { version = "2.0", optional = true }
2525

26-
[target.'cfg(target_arch = "wasm32")'.dependencies]
27-
getrandom = "0.2"
28-
js-sys = "0.3"
29-
3026
[features]
3127
default = ["std"]
3228
std = ["bitcoin/std", "miniscript/std", "bdk_chain/std"]
3329
compiler = ["miniscript/compiler"]
3430
all-keys = ["keys-bip39"]
3531
keys-bip39 = ["bip39"]
3632

37-
# This feature is used to run `cargo check` in our CI targeting wasm. It's not recommended
38-
# for libraries to explicitly include the "getrandom/js" feature, so we only do it when
39-
# necessary for running our CI. See: https://docs.rs/getrandom/0.2.8/getrandom/#webassembly-support
40-
dev-getrandom-wasm = ["getrandom/js"]
41-
4233
[dev-dependencies]
4334
lazy_static = "1.4"
4435
assert_matches = "1.5.0"
4536
tempfile = "3"
4637
bdk_sqlite = { path = "../sqlite" }
4738
bdk_file_store = { path = "../file_store" }
4839
anyhow = "1"
40+
rand = "^0.8"
4941

5042
[package.metadata.docs.rs]
5143
all-features = true

crates/wallet/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ fn main() {
154154
<!-- use bitcoin::base64; -->
155155
<!-- use bdk_wallet::bitcoin::consensus::serialize; -->
156156
<!-- use bdk_wallet::bitcoin::Network; -->
157+
<!-- use rand::thread_rng(); -->
157158

158159
<!-- fn main() -> Result<(), bdk_wallet::Error> { -->
159160
<!-- let blockchain = ElectrumBlockchain::from(Client::new("ssl://electrum.blockstream.info:60002")?); -->
@@ -173,7 +174,7 @@ fn main() {
173174
<!-- .enable_rbf() -->
174175
<!-- .do_not_spend_change() -->
175176
<!-- .fee_rate(FeeRate::from_sat_per_vb(5.0)); -->
176-
<!-- builder.finish()? -->
177+
<!-- builder.finish_with_aux_rand(&mut thread_rng())? -->
177178
<!-- }; -->
178179

179180
<!-- println!("Transaction details: {:#?}", details); -->

crates/wallet/examples/mnemonic_to_descriptors.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use bdk_wallet::descriptor::IntoWalletDescriptor;
1515
use bdk_wallet::keys::bip39::{Language, Mnemonic, WordCount};
1616
use bdk_wallet::keys::{GeneratableKey, GeneratedKey};
1717
use bdk_wallet::miniscript::Tap;
18+
use rand::thread_rng;
1819
use std::str::FromStr;
1920

2021
/// This example demonstrates how to generate a mnemonic phrase
@@ -25,8 +26,9 @@ fn main() -> Result<(), anyhow::Error> {
2526
// In this example we are generating a 12 words mnemonic phrase
2627
// but it is also possible generate 15, 18, 21 and 24 words
2728
// using their respective `WordCount` variant.
29+
let mut rng = thread_rng();
2830
let mnemonic: GeneratedKey<_, Tap> =
29-
Mnemonic::generate((WordCount::Words12, Language::English))
31+
Mnemonic::generate((WordCount::Words12, Language::English), &mut rng)
3032
.map_err(|_| anyhow!("Mnemonic generation error"))?;
3133

3234
println!("Mnemonic phrase: {}", *mnemonic);

crates/wallet/src/keys/bip39.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ mod test {
158158

159159
use bip39::{Language, Mnemonic};
160160

161+
use rand::thread_rng;
162+
161163
use crate::keys::{any_network, GeneratableKey, GeneratedKey};
162164

163165
use super::WordCount;
@@ -216,12 +218,12 @@ mod test {
216218

217219
#[test]
218220
fn test_keys_generate_bip39_random() {
221+
let mut rng = thread_rng();
219222
let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
220-
Mnemonic::generate((WordCount::Words12, Language::English)).unwrap();
223+
Mnemonic::generate((WordCount::Words12, Language::English), &mut rng).unwrap();
221224
assert_eq!(generated_mnemonic.valid_networks, any_network());
222-
223225
let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
224-
Mnemonic::generate((WordCount::Words24, Language::English)).unwrap();
226+
Mnemonic::generate((WordCount::Words24, Language::English), &mut rng).unwrap();
225227
assert_eq!(generated_mnemonic.valid_networks, any_network());
226228
}
227229
}

crates/wallet/src/keys/mod.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ use core::marker::PhantomData;
2020
use core::ops::Deref;
2121
use core::str::FromStr;
2222

23+
use rand_core::{CryptoRng, RngCore};
24+
2325
use bitcoin::secp256k1::{self, Secp256k1, Signing};
2426

2527
use bitcoin::bip32;
@@ -632,11 +634,12 @@ pub trait GeneratableKey<Ctx: ScriptContext>: Sized {
632634
) -> Result<GeneratedKey<Self, Ctx>, Self::Error>;
633635

634636
/// Generate a key given the options with a random entropy
635-
fn generate(options: Self::Options) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
636-
use rand::{thread_rng, Rng};
637-
637+
fn generate(
638+
options: Self::Options,
639+
rng: &mut (impl CryptoRng + RngCore),
640+
) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
638641
let mut entropy = Self::Entropy::default();
639-
thread_rng().fill(entropy.as_mut());
642+
rng.fill_bytes(entropy.as_mut());
640643
Self::generate_with_entropy(options, entropy)
641644
}
642645
}
@@ -657,8 +660,10 @@ where
657660
}
658661

659662
/// Generate a key with the default options and a random entropy
660-
fn generate_default() -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
661-
Self::generate(Default::default())
663+
fn generate_default(
664+
rng: &mut (impl CryptoRng + RngCore),
665+
) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
666+
Self::generate(Default::default(), rng)
662667
}
663668
}
664669

0 commit comments

Comments
 (0)