Skip to content

Commit 3c17c42

Browse files
committed
feat!(keys): use NetworkKind
1 parent 9126e97 commit 3c17c42

File tree

2 files changed

+207
-191
lines changed

2 files changed

+207
-191
lines changed

wallet/src/keys/bip39.rs

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Bitcoin Dev Kit
22
// Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
33
//
4-
// Copyright (c) 2020-2021 Bitcoin Dev Kit Developers
4+
// Copyright (c) 2020-2025 Bitcoin Dev Kit Developers
55
//
66
// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
77
// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
@@ -15,11 +15,15 @@
1515
// something that should be fairly simple to re-implement.
1616

1717
use alloc::string::String;
18-
use bitcoin::bip32;
19-
use bitcoin::Network;
2018

19+
use bitcoin::{bip32, Network};
2120
use miniscript::ScriptContext;
2221

22+
use super::{
23+
any_network_kind, DerivableKey, DescriptorKey, ExtendedKey, GeneratableKey, GeneratedKey,
24+
KeyError,
25+
};
26+
2327
pub use bip39::{Error, Language, Mnemonic};
2428

2529
type Seed = [u8; 64];
@@ -38,20 +42,16 @@ pub enum WordCount {
3842
Words24 = 256,
3943
}
4044

41-
use super::{
42-
any_network, DerivableKey, DescriptorKey, ExtendedKey, GeneratableKey, GeneratedKey, KeyError,
43-
};
44-
45-
fn set_valid_on_any_network<Ctx: ScriptContext>(
45+
fn set_valid_on_any_network_kind<Ctx: ScriptContext>(
4646
descriptor_key: DescriptorKey<Ctx>,
4747
) -> DescriptorKey<Ctx> {
48-
// We have to pick one network to build the xprv, but since the bip39 standard doesn't
49-
// encode the network, the xprv we create is actually valid everywhere. So we override the
50-
// valid networks with `any_network()`.
51-
descriptor_key.override_valid_networks(any_network())
48+
// We have to pick one network kind to build the xprv, but since the BIP39 standard doesn't
49+
// encode the network kind, the xprv we create is actually valid everywhere. So we override the
50+
// valid network kinds with `any_network_kind()`.
51+
descriptor_key.override_valid_network_kinds(any_network_kind())
5252
}
5353

54-
/// Type for a BIP39 mnemonic with an optional passphrase
54+
/// Type for a BIP39 mnemonic with an optional passphrase.
5555
pub type MnemonicWithPassphrase = (Mnemonic, Option<String>);
5656

5757
#[cfg_attr(docsrs, doc(cfg(feature = "keys-bip39")))]
@@ -69,7 +69,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for Seed {
6969
.into_extended_key()?
7070
.into_descriptor_key(source, derivation_path)?;
7171

72-
Ok(set_valid_on_any_network(descriptor_key))
72+
Ok(set_valid_on_any_network_kind(descriptor_key))
7373
}
7474
}
7575

@@ -91,7 +91,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for MnemonicWithPassphrase {
9191
.into_extended_key()?
9292
.into_descriptor_key(source, derivation_path)?;
9393

94-
Ok(set_valid_on_any_network(descriptor_key))
94+
Ok(set_valid_on_any_network_kind(descriptor_key))
9595
}
9696
}
9797

@@ -127,7 +127,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for Mnemonic {
127127
.into_extended_key()?
128128
.into_descriptor_key(source, derivation_path)?;
129129

130-
Ok(set_valid_on_any_network(descriptor_key))
130+
Ok(set_valid_on_any_network_kind(descriptor_key))
131131
}
132132
}
133133

@@ -145,22 +145,21 @@ impl<Ctx: ScriptContext> GeneratableKey<Ctx> for Mnemonic {
145145
let entropy = &entropy[..(word_count as usize / 8)];
146146
let mnemonic = Mnemonic::from_entropy_in(language, entropy)?;
147147

148-
Ok(GeneratedKey::new(mnemonic, any_network()))
148+
Ok(GeneratedKey::new(mnemonic, any_network_kind()))
149149
}
150150
}
151151

152152
#[cfg(test)]
153153
mod test {
154+
use super::WordCount;
155+
154156
use alloc::string::ToString;
155157
use core::str::FromStr;
156158

157-
use bitcoin::bip32;
158-
159159
use bip39::{Language, Mnemonic};
160+
use bitcoin::bip32;
160161

161-
use crate::keys::{any_network, GeneratableKey, GeneratedKey};
162-
163-
use super::WordCount;
162+
use crate::keys::{any_network_kind, GeneratableKey, GeneratedKey};
164163

165164
#[test]
166165
fn test_keys_bip39_mnemonic() {
@@ -170,10 +169,10 @@ mod test {
170169
let path = bip32::DerivationPath::from_str("m/44'/0'/0'/0").unwrap();
171170

172171
let key = (mnemonic, path);
173-
let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap();
172+
let (desc, keys, network_kinds) = crate::descriptor!(wpkh(key)).unwrap();
174173
assert_eq!(desc.to_string(), "wpkh([be83839f/44'/0'/0']xpub6DCQ1YcqvZtSwGWMrwHELPehjWV3f2MGZ69yBADTxFEUAoLwb5Mp5GniQK6tTp3AgbngVz9zEFbBJUPVnkG7LFYt8QMTfbrNqs6FNEwAPKA/0/*)#0r8v4nkv");
175174
assert_eq!(keys.len(), 1);
176-
assert_eq!(networks, any_network());
175+
assert_eq!(network_kinds, any_network_kind());
177176
}
178177

179178
#[test]
@@ -184,10 +183,10 @@ mod test {
184183
let path = bip32::DerivationPath::from_str("m/44'/0'/0'/0").unwrap();
185184

186185
let key = ((mnemonic, Some("passphrase".into())), path);
187-
let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap();
186+
let (desc, keys, network_kinds) = crate::descriptor!(wpkh(key)).unwrap();
188187
assert_eq!(desc.to_string(), "wpkh([8f6cb80c/44'/0'/0']xpub6DWYS8bbihFevy29M4cbw4ZR3P5E12jB8R88gBDWCTCNpYiDHhYWNywrCF9VZQYagzPmsZpxXpytzSoxynyeFr4ZyzheVjnpLKuse4fiwZw/0/*)#h0j0tg5m");
189188
assert_eq!(keys.len(), 1);
190-
assert_eq!(networks, any_network());
189+
assert_eq!(network_kinds, any_network_kind());
191190
}
192191

193192
#[test]
@@ -198,7 +197,7 @@ mod test {
198197
crate::keys::test::TEST_ENTROPY,
199198
)
200199
.unwrap();
201-
assert_eq!(generated_mnemonic.valid_networks, any_network());
200+
assert_eq!(generated_mnemonic.valid_network_kinds, any_network_kind());
202201
assert_eq!(
203202
generated_mnemonic.to_string(),
204203
"primary fetch primary fetch primary fetch primary fetch primary fetch primary fever"
@@ -210,18 +209,18 @@ mod test {
210209
crate::keys::test::TEST_ENTROPY,
211210
)
212211
.unwrap();
213-
assert_eq!(generated_mnemonic.valid_networks, any_network());
212+
assert_eq!(generated_mnemonic.valid_network_kinds, any_network_kind());
214213
assert_eq!(generated_mnemonic.to_string(), "primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary fetch primary foster");
215214
}
216215

217216
#[test]
218217
fn test_keys_generate_bip39_random() {
219218
let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
220219
Mnemonic::generate((WordCount::Words12, Language::English)).unwrap();
221-
assert_eq!(generated_mnemonic.valid_networks, any_network());
220+
assert_eq!(generated_mnemonic.valid_network_kinds, any_network_kind());
222221

223222
let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
224223
Mnemonic::generate((WordCount::Words24, Language::English)).unwrap();
225-
assert_eq!(generated_mnemonic.valid_networks, any_network());
224+
assert_eq!(generated_mnemonic.valid_network_kinds, any_network_kind());
226225
}
227226
}

0 commit comments

Comments
 (0)