Skip to content

Commit e7cbf86

Browse files
temp 5: remove private keys from KeyRing
1 parent 5ef474e commit e7cbf86

File tree

5 files changed

+39
-37
lines changed

5 files changed

+39
-37
lines changed

examples/example_n_keychains/src/main.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use bdk_esplora::{esplora_client, EsploraExt};
22
use bdk_wallet::chain::DescriptorId;
3-
use bdk_wallet::{KeyRing, Wallet};
3+
use bdk_wallet::Wallet;
44
use bdk_wallet::bitcoin::Network;
55
use bdk_wallet::KeychainKind;
6+
use bdk_wallet::keyring::KeyRing;
67

78
const ESPLORA_URL: &str = "http://signet.bitcoindevkit.net";
89
const STOP_GAP: usize = 5;
@@ -26,7 +27,7 @@ fn main() -> Result<(), anyhow::Error> {
2627
println!("{:?}", keychain_ids);
2728

2829
// Create the wallet and peek addresses on each of the descriptors
29-
let mut wallet: Wallet = Wallet::new(keyring, Network::Signet).create_wallet_no_persist()?;
30+
let mut wallet: Wallet = Wallet::new(keyring).create_wallet_no_persist()?;
3031
let address_1 = wallet.peek_address(KeychainKind::Default, 0).unwrap();
3132
let address_2 = wallet.peek_address(KeychainKind::Other(keychain_ids[1]), 0).unwrap();
3233
let address_3 = wallet.peek_address(KeychainKind::Other(keychain_ids[2]), 0).unwrap();

wallet/examples/n_keychains.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use bdk_chain::DescriptorId;
2-
use bdk_wallet::{KeyRing, Wallet};
2+
use bdk_wallet::Wallet;
33
use bdk_wallet::bitcoin::Network;
44
use bdk_wallet::KeychainKind;
5+
use bdk_wallet::keyring::KeyRing;
56

67
const EXTERNAL_DESC: &str = "wpkh(tprv8ZgxMBicQKsPdy6LMhUtFHAgpocR8GC6QmwMSFpZs7h6Eziw3SpThFfczTDh5rW2krkqffa11UpX3XkeTTB2FvzZKWXqPY54Y6Rq4AQ5R8L/84'/1'/0'/0/*)";
78
const OTHER_DESC_21: &str = "wpkh(tprv8ZgxMBicQKsPdy6LMhUtFHAgpocR8GC6QmwMSFpZs7h6Eziw3SpThFfczTDh5rW2krkqffa11UpX3XkeTTB2FvzZKWXqPY54Y6Rq4AQ5R8L/84'/1'/0'/21/*)";
@@ -10,7 +11,7 @@ const OTHER_DESC_41: &str = "wpkh(tprv8ZgxMBicQKsPdy6LMhUtFHAgpocR8GC6QmwMSFpZs7
1011

1112
fn main() -> Result<(), anyhow::Error> {
1213
// Create a keyring with a single, default descriptor (aka the KeychainKind::External from the 1.2.0 API)
13-
let mut keyring = KeyRing::new(EXTERNAL_DESC, Network::Testnet4);
14+
let mut keyring = KeyRing::new(EXTERNAL_DESC, Network::Testnet);
1415

1516
// Add 3 new custom descriptors
1617
keyring.add_other_descriptor(OTHER_DESC_21);
@@ -37,6 +38,5 @@ fn main() -> Result<(), anyhow::Error> {
3738

3839
let full_scan_request = wallet.start_full_scan().build();
3940

40-
4141
Ok(())
4242
}

wallet/src/wallet/keyring.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use std::prelude::rust_2021::Vec;
1313
use bitcoin::Network;
1414
use chain::{DescriptorExt, DescriptorId};
1515
use miniscript::{Descriptor, DescriptorPublicKey};
16-
use miniscript::descriptor::KeyMap;
1716
use crate::descriptor::IntoWalletDescriptor;
1817
use crate::{DescriptorToExtract, KeychainKind};
1918
use crate::wallet::make_descriptor_to_extract;
@@ -22,7 +21,7 @@ use crate::wallet::utils::SecpCtx;
2221
/// A `WalletKeychain` is mostly a descriptor with metadata associated with it. It states whether the
2322
/// keychain is the default keychain for the wallet, and provides an identifier for it which can be
2423
/// used for retrieval.
25-
pub type WalletKeychain = (KeychainKind, (Descriptor<DescriptorPublicKey>, KeyMap));
24+
pub type WalletKeychain = (KeychainKind, Descriptor<DescriptorPublicKey>);
2625

2726
#[derive(Debug, Clone)]
2827
pub struct KeyRing {
@@ -37,8 +36,8 @@ impl KeyRing {
3736
) -> Self {
3837
let secp = SecpCtx::new();
3938
let descriptor_to_extract: DescriptorToExtract = make_descriptor_to_extract(default_descriptor);
40-
let public_descriptor: (Descriptor<DescriptorPublicKey>, KeyMap) = descriptor_to_extract(&secp, network).unwrap();
41-
let wallet_keychain = (KeychainKind::Default, public_descriptor);
39+
let public_descriptor: (Descriptor<DescriptorPublicKey>, _) = descriptor_to_extract(&secp, network).unwrap();
40+
let wallet_keychain = (KeychainKind::Default, public_descriptor.0);
4241

4342
KeyRing {
4443
keychains: vec![wallet_keychain],
@@ -64,7 +63,7 @@ impl KeyRing {
6463
let public_descriptor = descriptor_to_extract(&secp, self.network).unwrap();
6564
let descriptor_id = public_descriptor.0.descriptor_id();
6665

67-
let wallet_keychain = ((KeychainKind::Other(descriptor_id)), public_descriptor);
66+
let wallet_keychain = ((KeychainKind::Other(descriptor_id)), public_descriptor.0);
6867

6968
self.keychains.push(wallet_keychain);
7069
self
@@ -79,9 +78,13 @@ impl KeyRing {
7978
.iter()
8079
.map(|keychain| match keychain.0 {
8180
KeychainKind::Other(descriptor_id) => descriptor_id,
82-
KeychainKind::Default => keychain.1.0.descriptor_id(),
83-
KeychainKind::Change => keychain.1.0.descriptor_id(),
81+
KeychainKind::Default => keychain.1.descriptor_id(),
82+
KeychainKind::Change => keychain.1.descriptor_id(),
8483
})
8584
.collect()
8685
}
86+
87+
pub fn network(&self) -> Network {
88+
self.network
89+
}
8790
}

wallet/src/wallet/mod.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ mod persisted;
5959
pub mod signer;
6060
pub mod tx_builder;
6161
pub(crate) mod utils;
62-
mod keyring;
62+
pub mod keyring;
6363

6464
use crate::collections::{BTreeMap, HashMap, HashSet};
6565
use crate::descriptor::{
@@ -86,7 +86,7 @@ pub use persisted::*;
8686
pub use utils::IsDust;
8787
use crate::error::KeychainNotInKeyRingError;
8888
use crate::error::KeychainNotInKeyRingError::KeychainNotFound;
89-
use crate::wallet::keyring::KeyRing;
89+
use crate::keyring::KeyRing;
9090

9191
/// A Bitcoin wallet
9292
///
@@ -114,7 +114,7 @@ pub struct Wallet {
114114
stage: ChangeSet,
115115
network: Network,
116116
secp: SecpCtx,
117-
keychain_set: KeyRing
117+
key_ring: KeyRing
118118
}
119119

120120
/// An update to [`Wallet`].
@@ -288,8 +288,9 @@ impl std::error::Error for ApplyBlockError {}
288288
pub type WalletTx<'a> = CanonicalTx<'a, Arc<Transaction>, ConfirmationBlockTime>;
289289

290290
impl Wallet {
291-
pub fn new(keychain_set: KeyRing, network: Network) -> CreateParams {
292-
CreateParams::new_with_keychain_set(keychain_set, network)
291+
pub fn new(key_ring: KeyRing) -> CreateParams {
292+
let network = key_ring.network();
293+
CreateParams::new_with_keyring(key_ring, network)
293294
}
294295

295296
/// Build a new single descriptor [`Wallet`].
@@ -387,15 +388,16 @@ impl Wallet {
387388

388389
// let (descriptor, mut descriptor_keymap) = (params.descriptor)(&secp, network)?;
389390
// let (descriptor, mut descriptor_keymap) = (params.keychain_set.get_default_keychain().1.0)(&secp, network)?;
390-
let (descriptor, mut descriptor_keymap) = params.keychain_set.get_default_keychain().1;
391+
let descriptor = params.key_ring.get_default_keychain().1;
391392
check_wallet_descriptor(&descriptor)?;
392-
descriptor_keymap.extend(descriptor_keymap.clone());
393+
// descriptor_keymap.extend(descriptor_keymap.clone());
393394

394-
let signers = Arc::new(SignersContainer::build(
395-
descriptor_keymap,
396-
&descriptor,
397-
&secp,
398-
));
395+
let signers = Arc::new(SignersContainer::new());
396+
// let signers = Arc::new(SignersContainer::build(
397+
// descriptor_keymap,
398+
// &descriptor,
399+
// &secp,
400+
// ));
399401

400402
// TODO: Handle change
401403
let (change_descriptor, change_signers) = (None, Arc::new(SignersContainer::new()));
@@ -414,11 +416,11 @@ impl Wallet {
414416
// None => (None, Arc::new(SignersContainer::new())),
415417
// };
416418

417-
let index = create_indexer(params.keychain_set.clone(), params.lookahead)?;
419+
let index = create_indexer(params.key_ring.clone(), params.lookahead)?;
418420

419421
// TODO: Understand why we have the descriptors above but then request them from the indexer
420422
// here. Is it just for sanity check?
421-
let descriptor = index.get_descriptor(params.keychain_set.get_default_keychain().0).cloned();
423+
let descriptor = index.get_descriptor(params.key_ring.get_default_keychain().0).cloned();
422424
// TODO: Doesn't work because get_change_keychain() returns an Option
423425
// let change_descriptor = index.get_descriptor(params.keychain_set.get_change_keychain().0).cloned();
424426
let indexed_graph = IndexedTxGraph::new(index);
@@ -441,7 +443,7 @@ impl Wallet {
441443
indexed_graph,
442444
stage,
443445
secp,
444-
keychain_set: params.keychain_set,
446+
key_ring: params.key_ring,
445447
})
446448
}
447449

@@ -2563,7 +2565,7 @@ fn create_indexer(
25632565

25642566
// TODO: I'm here, May 2
25652567
keyring.list_keychains().iter().for_each(|k| {
2566-
indexer.insert_descriptor(k.0, k.1.0.clone()).expect("This should work");
2568+
indexer.insert_descriptor(k.0, k.1.clone()).expect("This should work");
25672569
dbg!("Inserting descriptor into indexer");
25682570
});
25692571

wallet/src/wallet/params.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use bdk_chain::keychain_txout::DEFAULT_LOOKAHEAD;
33
use bitcoin::{BlockHash, Network};
44
use miniscript::descriptor::KeyMap;
55

6-
use crate::{descriptor::{DescriptorError, ExtendedDescriptor, IntoWalletDescriptor}, utils::SecpCtx, AsyncWalletPersister, CreateWithPersistError, KeyRing, LoadWithPersistError, Wallet, WalletPersister};
6+
use crate::{descriptor::{DescriptorError, ExtendedDescriptor, IntoWalletDescriptor}, utils::SecpCtx, AsyncWalletPersister, CreateWithPersistError, wallet::keyring::KeyRing, LoadWithPersistError, Wallet, WalletPersister};
77

88
use super::{ChangeSet, LoadError, PersistedWallet};
99

@@ -27,11 +27,7 @@ where
2727
/// Parameters for [`Wallet::create`] or [`PersistedWallet::create`].
2828
#[must_use]
2929
pub struct CreateParams {
30-
pub(crate) keychain_set: KeyRing,
31-
// pub(crate) descriptor: DescriptorToExtract,
32-
// pub(crate) descriptor_keymap: KeyMap,
33-
// pub(crate) change_descriptor: Option<DescriptorToExtract>,
34-
// pub(crate) change_descriptor_keymap: KeyMap,
30+
pub(crate) key_ring: KeyRing,
3531
pub(crate) network: Network,
3632
pub(crate) genesis_hash: Option<BlockHash>,
3733
pub(crate) lookahead: u32,
@@ -81,12 +77,12 @@ impl CreateParams {
8177
// }
8278
// }
8379

84-
pub fn new_with_keychain_set(
85-
keychain_set: KeyRing,
80+
pub fn new_with_keyring(
81+
key_ring: KeyRing,
8682
network: Network,
8783
) -> Self {
8884
Self {
89-
keychain_set,
85+
key_ring,
9086
network,
9187
genesis_hash: None,
9288
lookahead: DEFAULT_LOOKAHEAD,

0 commit comments

Comments
 (0)