@@ -354,6 +354,50 @@ where
354354 }
355355 }
356356
357+ /// Construct a new [`Wallet`] with the given `keyring`, `genesis_hash` and `lookahead`.
358+ ///
359+ /// The `genesis_hash` (if not specified) will be inferred from `keyring.network` and
360+ /// `DEFAULT_LOOKAHEAD` will be used in case `lookahead` is not specified.
361+ pub fn with_custom_params (
362+ mut keyring : KeyRing < K > ,
363+ genesis_hash : Option < BlockHash > ,
364+ lookahead : Option < u32 > ,
365+ use_spk_cache : bool ,
366+ ) -> Self {
367+ let network = keyring. network ;
368+ let genesis_inferred = bitcoin:: constants:: genesis_block ( network) . block_hash ( ) ;
369+
370+ let ( chain, chain_changeset) =
371+ LocalChain :: from_genesis_hash ( genesis_hash. unwrap_or ( genesis_inferred) ) ;
372+
373+ let mut index =
374+ KeychainTxOutIndex :: new ( lookahead. unwrap_or ( DEFAULT_LOOKAHEAD ) , use_spk_cache) ;
375+
376+ let descriptors = core:: mem:: take ( & mut keyring. descriptors ) ;
377+ for ( keychain, desc) in descriptors {
378+ let _inserted = index
379+ . insert_descriptor ( keychain, desc)
380+ . expect ( "err: failed to insert descriptor" ) ;
381+ assert ! ( _inserted) ;
382+ }
383+
384+ let tx_graph = KeychainTxGraph :: new ( index) ;
385+
386+ let stage = ChangeSet {
387+ keyring : keyring. initial_changeset ( ) ,
388+ local_chain : chain_changeset,
389+ tx_graph : bdk_chain:: tx_graph:: ChangeSet :: default ( ) ,
390+ indexer : bdk_chain:: keychain_txout:: ChangeSet :: default ( ) ,
391+ } ;
392+
393+ Self {
394+ keyring,
395+ chain,
396+ tx_graph,
397+ stage,
398+ }
399+ }
400+
357401 /// Reveal the next address of the default `keychain`.
358402 ///
359403 /// This is equivalent to calling [`Self::reveal_next_address`] with the default `keychain` as
0 commit comments