pub struct Bip32KeyProvider { /* private fields */ }Expand description
A BIP32 hierarchical deterministic key provider
This provider derives keypairs from a master extended private key using BIP32 derivation paths. It maintains an index counter for generating new receiving addresses.
§Example
fn example() -> Result<(), Box<dyn std::error::Error>> {
// Create from a master key with a base path (e.g., m/84'/0'/0'/0)
let master_key = Xpriv::from_str("xprv...")?;
let base_path = DerivationPath::from_str("m/84'/0'/0'/0")?;
// This will derive keys at m/84'/0'/0'/0/0, m/84'/0'/0'/0/1, etc.
let provider = Bip32KeyProvider::new(master_key, base_path);
// Get the next receiving keypair (increments index)
let kp1 = provider.get_next_keypair(KeypairIndex::New)?; // m/84'/0'/0'/0/0
let kp2 = provider.get_next_keypair(KeypairIndex::New)?; // m/84'/0'/0'/0/1
// Or derive a specific keypair by path
let custom_path = vec![84 + 0x8000_0000, 0x8000_0000, 0x8000_0000, 0, 5];
let kp = provider.get_keypair_for_path(&custom_path)?;Implementations§
Source§impl Bip32KeyProvider
impl Bip32KeyProvider
Sourcepub fn new(master_key: Xpriv, base_path: DerivationPath) -> Self
pub fn new(master_key: Xpriv, base_path: DerivationPath) -> Self
Create a new BIP32 key provider
§Arguments
master_key- The master extended private key (xpriv)base_path- The base derivation path (e.g., m/84’/0’/0’/0). The provider will append index numbers to this path.
Sourcepub fn new_with_index(
master_key: Xpriv,
base_path: DerivationPath,
start_index: u32,
) -> Self
pub fn new_with_index( master_key: Xpriv, base_path: DerivationPath, start_index: u32, ) -> Self
Create a new BIP32 key provider starting from a specific index
§Arguments
master_key- The master extended private key (xpriv)base_path- The base derivation pathstart_index- The starting index for key derivation
Trait Implementations§
Source§impl KeyProvider for Bip32KeyProvider
impl KeyProvider for Bip32KeyProvider
Source§fn get_next_keypair(
&self,
keypair_index: KeypairIndex,
) -> Result<Keypair, Error>
fn get_next_keypair( &self, keypair_index: KeypairIndex, ) -> Result<Keypair, Error>
Get a keypair for receiving funds Read more
Source§fn get_keypair_for_path(&self, path: &[u32]) -> Result<Keypair, Error>
fn get_keypair_for_path(&self, path: &[u32]) -> Result<Keypair, Error>
Get a keypair for a specific BIP32 derivation path Read more
Source§fn get_keypair_for_pk(&self, pk: &XOnlyPublicKey) -> Result<Keypair, Error>
fn get_keypair_for_pk(&self, pk: &XOnlyPublicKey) -> Result<Keypair, Error>
Get a keypair for a specific public key Read more
Source§fn get_cached_pks(&self) -> Result<Vec<XOnlyPublicKey>, Error>
fn get_cached_pks(&self) -> Result<Vec<XOnlyPublicKey>, Error>
Get all public keys that this provider currently knows about Read more
Source§fn supports_discovery(&self) -> bool
fn supports_discovery(&self) -> bool
Returns true if this provider supports key discovery Read more
Source§fn get_derivation_index_for_pk(&self, pk: &XOnlyPublicKey) -> Option<u32>
fn get_derivation_index_for_pk(&self, pk: &XOnlyPublicKey) -> Option<u32>
Get the derivation index for a cached public key. Read more
Source§fn derive_at_discovery_index(
&self,
index: u32,
) -> Result<Option<Keypair>, Error>
fn derive_at_discovery_index( &self, index: u32, ) -> Result<Option<Keypair>, Error>
Derive a keypair at a specific index without caching Read more
Source§fn cache_discovered_keypair(&self, index: u32, kp: Keypair) -> Result<(), Error>
fn cache_discovered_keypair(&self, index: u32, kp: Keypair) -> Result<(), Error>
Cache a discovered keypair at the given index Read more
fn mark_as_used(&self, pk: &XOnlyPublicKey) -> Result<(), Error>
Auto Trait Implementations§
impl Freeze for Bip32KeyProvider
impl RefUnwindSafe for Bip32KeyProvider
impl Send for Bip32KeyProvider
impl Sync for Bip32KeyProvider
impl Unpin for Bip32KeyProvider
impl UnsafeUnpin for Bip32KeyProvider
impl UnwindSafe for Bip32KeyProvider
Blanket Implementations§
Source§impl<T> AnyExt for T
impl<T> AnyExt for T
Source§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
Attempts to downcast this to
T behind referenceSource§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
Attempts to downcast this to
T behind mutable referenceSource§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
Attempts to downcast this to
T behind Rc pointerSource§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
Attempts to downcast this to
T behind Arc pointerSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request