Refactor: Remove unused Mutex on DescriptorSecretKey inner field

This commit is contained in:
thunderbiscuit 2023-08-18 13:09:09 -04:00
parent 4ae169f860
commit 106d31c9c3
No known key found for this signature in database
GPG Key ID: 88253696EB836462
2 changed files with 23 additions and 24 deletions

View File

@ -1,4 +1,3 @@
use std::ops::Deref;
use crate::{BdkError, DescriptorPublicKey, DescriptorSecretKey}; use crate::{BdkError, DescriptorPublicKey, DescriptorSecretKey};
use bdk::bitcoin::secp256k1::Secp256k1; use bdk::bitcoin::secp256k1::Secp256k1;
use bdk::bitcoin::util::bip32::Fingerprint; use bdk::bitcoin::util::bip32::Fingerprint;
@ -36,9 +35,9 @@ impl Descriptor {
keychain_kind: KeychainKind, keychain_kind: KeychainKind,
network: Network, network: Network,
) -> Self { ) -> Self {
let derivable_key = secret_key.inner_mutex.lock().unwrap(); let derivable_key = &secret_key.inner;
match derivable_key.deref() { match derivable_key {
BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { BdkDescriptorSecretKey::XPrv(descriptor_x_key) => {
let derivable_key = descriptor_x_key.xkey; let derivable_key = descriptor_x_key.xkey;
let (extended_descriptor, key_map, _) = let (extended_descriptor, key_map, _) =
@ -87,9 +86,9 @@ impl Descriptor {
keychain_kind: KeychainKind, keychain_kind: KeychainKind,
network: Network, network: Network,
) -> Self { ) -> Self {
let derivable_key = secret_key.inner_mutex.lock().unwrap(); let derivable_key = &secret_key.inner;
match derivable_key.deref() { match derivable_key {
BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { BdkDescriptorSecretKey::XPrv(descriptor_x_key) => {
let derivable_key = descriptor_x_key.xkey; let derivable_key = descriptor_x_key.xkey;
let (extended_descriptor, key_map, _) = let (extended_descriptor, key_map, _) =
@ -138,9 +137,9 @@ impl Descriptor {
keychain_kind: KeychainKind, keychain_kind: KeychainKind,
network: Network, network: Network,
) -> Self { ) -> Self {
let derivable_key = secret_key.inner_mutex.lock().unwrap(); let derivable_key = &secret_key.inner;
match derivable_key.deref() { match derivable_key {
BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { BdkDescriptorSecretKey::XPrv(descriptor_x_key) => {
let derivable_key = descriptor_x_key.xkey; let derivable_key = descriptor_x_key.xkey;
let (extended_descriptor, key_map, _) = let (extended_descriptor, key_map, _) =
@ -189,9 +188,9 @@ impl Descriptor {
keychain_kind: KeychainKind, keychain_kind: KeychainKind,
network: Network, network: Network,
) -> Self { ) -> Self {
let derivable_key = secret_key.inner_mutex.lock().unwrap(); let derivable_key = &secret_key.inner;
match derivable_key.deref() { match derivable_key {
BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { BdkDescriptorSecretKey::XPrv(descriptor_x_key) => {
let derivable_key = descriptor_x_key.xkey; let derivable_key = descriptor_x_key.xkey;
let (extended_descriptor, key_map, _) = let (extended_descriptor, key_map, _) =

View File

@ -66,37 +66,37 @@ impl DerivationPath {
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct DescriptorSecretKey { pub(crate) struct DescriptorSecretKey {
pub(crate) inner_mutex: Mutex<BdkDescriptorSecretKey>, pub(crate) inner: BdkDescriptorSecretKey,
} }
impl DescriptorSecretKey { impl DescriptorSecretKey {
pub(crate) fn new(network: Network, mnemonic: Arc<Mnemonic>, password: Option<String>) -> Self { pub(crate) fn new(network: Network, mnemonic: Arc<Mnemonic>, password: Option<String>) -> Self {
let mnemonic = mnemonic.inner.clone(); let mnemonic = mnemonic.inner.clone();
let xkey: ExtendedKey = (mnemonic, password).into_extended_key().unwrap(); let xkey: ExtendedKey = (mnemonic, password).into_extended_key().unwrap();
let inner = BdkDescriptorSecretKey::XPrv(DescriptorXKey { let descriptor_secret_key = BdkDescriptorSecretKey::XPrv(DescriptorXKey {
origin: None, origin: None,
xkey: xkey.into_xprv(network).unwrap(), xkey: xkey.into_xprv(network).unwrap(),
derivation_path: BdkDerivationPath::master(), derivation_path: BdkDerivationPath::master(),
wildcard: bdk::descriptor::Wildcard::Unhardened, wildcard: bdk::descriptor::Wildcard::Unhardened,
}); });
Self { Self {
inner_mutex: Mutex::new(inner), inner: descriptor_secret_key,
} }
} }
pub(crate) fn from_string(private_key: String) -> Result<Self, BdkError> { pub(crate) fn from_string(private_key: String) -> Result<Self, BdkError> {
let inner = BdkDescriptorSecretKey::from_str(private_key.as_str()) let descriptor_secret_key = BdkDescriptorSecretKey::from_str(private_key.as_str())
.map_err(|e| BdkError::Generic(e.to_string()))?; .map_err(|e| BdkError::Generic(e.to_string()))?;
Ok(Self { Ok(Self {
inner_mutex: Mutex::new(inner), inner: descriptor_secret_key,
}) })
} }
pub(crate) fn derive(&self, path: Arc<DerivationPath>) -> Result<Arc<Self>, BdkError> { pub(crate) fn derive(&self, path: Arc<DerivationPath>) -> Result<Arc<Self>, BdkError> {
let secp = Secp256k1::new(); let secp = Secp256k1::new();
let descriptor_secret_key = self.inner_mutex.lock().unwrap(); let descriptor_secret_key = &self.inner;
let path = path.inner_mutex.lock().unwrap().deref().clone(); let path = path.inner_mutex.lock().unwrap().deref().clone();
match descriptor_secret_key.deref() { match descriptor_secret_key {
BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { BdkDescriptorSecretKey::XPrv(descriptor_x_key) => {
let derived_xprv = descriptor_x_key.xkey.derive_priv(&secp, &path)?; let derived_xprv = descriptor_x_key.xkey.derive_priv(&secp, &path)?;
let key_source = match descriptor_x_key.origin.clone() { let key_source = match descriptor_x_key.origin.clone() {
@ -110,7 +110,7 @@ impl DescriptorSecretKey {
wildcard: descriptor_x_key.wildcard, wildcard: descriptor_x_key.wildcard,
}); });
Ok(Arc::new(Self { Ok(Arc::new(Self {
inner_mutex: Mutex::new(derived_descriptor_secret_key), inner: derived_descriptor_secret_key,
})) }))
} }
BdkDescriptorSecretKey::Single(_) => Err(BdkError::Generic( BdkDescriptorSecretKey::Single(_) => Err(BdkError::Generic(
@ -120,19 +120,19 @@ impl DescriptorSecretKey {
} }
pub(crate) fn extend(&self, path: Arc<DerivationPath>) -> Result<Arc<Self>, BdkError> { pub(crate) fn extend(&self, path: Arc<DerivationPath>) -> Result<Arc<Self>, BdkError> {
let inner = self.inner_mutex.lock().unwrap(); let descriptor_secret_key = &self.inner;
let path = path.inner_mutex.lock().unwrap().deref().clone(); let path = path.inner_mutex.lock().unwrap().deref().clone();
match inner.deref() { match descriptor_secret_key {
BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { BdkDescriptorSecretKey::XPrv(descriptor_x_key) => {
let extended_path = descriptor_x_key.derivation_path.extend(path); let extended_path = descriptor_x_key.derivation_path.extend(path);
let extended_inner = BdkDescriptorSecretKey::XPrv(DescriptorXKey { let extended_descriptor_secret_key = BdkDescriptorSecretKey::XPrv(DescriptorXKey {
origin: descriptor_x_key.origin.clone(), origin: descriptor_x_key.origin.clone(),
xkey: descriptor_x_key.xkey, xkey: descriptor_x_key.xkey,
derivation_path: extended_path, derivation_path: extended_path,
wildcard: descriptor_x_key.wildcard, wildcard: descriptor_x_key.wildcard,
}); });
Ok(Arc::new(Self { Ok(Arc::new(Self {
inner_mutex: Mutex::new(extended_inner), inner: extended_descriptor_secret_key,
})) }))
} }
BdkDescriptorSecretKey::Single(_) => Err(BdkError::Generic( BdkDescriptorSecretKey::Single(_) => Err(BdkError::Generic(
@ -143,7 +143,7 @@ impl DescriptorSecretKey {
pub(crate) fn as_public(&self) -> Arc<DescriptorPublicKey> { pub(crate) fn as_public(&self) -> Arc<DescriptorPublicKey> {
let secp = Secp256k1::new(); let secp = Secp256k1::new();
let descriptor_public_key = self.inner_mutex.lock().unwrap().to_public(&secp).unwrap(); let descriptor_public_key = self.inner.to_public(&secp).unwrap();
Arc::new(DescriptorPublicKey { Arc::new(DescriptorPublicKey {
inner: descriptor_public_key, inner: descriptor_public_key,
}) })
@ -151,7 +151,7 @@ impl DescriptorSecretKey {
/// Get the private key as bytes. /// Get the private key as bytes.
pub(crate) fn secret_bytes(&self) -> Vec<u8> { pub(crate) fn secret_bytes(&self) -> Vec<u8> {
let inner = self.inner_mutex.lock().unwrap(); let inner = &self.inner;
let secret_bytes: Vec<u8> = match inner.deref() { let secret_bytes: Vec<u8> = match inner.deref() {
BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { BdkDescriptorSecretKey::XPrv(descriptor_x_key) => {
descriptor_x_key.xkey.private_key.secret_bytes().to_vec() descriptor_x_key.xkey.private_key.secret_bytes().to_vec()
@ -165,7 +165,7 @@ impl DescriptorSecretKey {
} }
pub(crate) fn as_string(&self) -> String { pub(crate) fn as_string(&self) -> String {
self.inner_mutex.lock().unwrap().to_string() self.inner.to_string()
} }
} }