@@ -15,6 +15,8 @@ use crate::fee_estimator::OnchainFeeEstimator;
15
15
use crate :: gossip:: GossipSource ;
16
16
use crate :: io;
17
17
use crate :: io:: sqlite_store:: SqliteStore ;
18
+ #[ cfg( any( vss, vss_test) ) ]
19
+ use crate :: io:: vss_store:: VssStore ;
18
20
use crate :: liquidity:: LiquiditySource ;
19
21
use crate :: logger:: { log_error, log_info, FilesystemLogger , Logger } ;
20
22
use crate :: message_handler:: NodeCustomMessageHandler ;
@@ -25,6 +27,7 @@ use crate::types::{
25
27
ChainMonitor , ChannelManager , DynStore , GossipSync , Graph , KeysManager , MessageRouter ,
26
28
OnionMessenger , PeerManager ,
27
29
} ;
30
+ use crate :: wallet:: persist:: KVStoreWalletPersister ;
28
31
use crate :: wallet:: Wallet ;
29
32
use crate :: { LogLevel , Node } ;
30
33
@@ -54,12 +57,9 @@ use lightning_transaction_sync::EsploraSyncClient;
54
57
use lightning_liquidity:: lsps2:: client:: LSPS2ClientConfig ;
55
58
use lightning_liquidity:: { LiquidityClientConfig , LiquidityManager } ;
56
59
57
- #[ cfg( any( vss, vss_test) ) ]
58
- use crate :: io:: vss_store:: VssStore ;
59
- use bdk:: bitcoin:: secp256k1:: Secp256k1 ;
60
- use bdk:: blockchain:: esplora:: EsploraBlockchain ;
61
- use bdk:: database:: SqliteDatabase ;
62
- use bdk:: template:: Bip84 ;
60
+ use bdk_wallet:: template:: Bip84 ;
61
+ use bdk_wallet:: KeychainKind ;
62
+ use bdk_wallet:: Wallet as BdkWallet ;
63
63
64
64
use bip39:: Mnemonic ;
65
65
@@ -357,6 +357,8 @@ impl NodeBuilder {
357
357
/// previously configured.
358
358
#[ cfg( any( vss, vss_test) ) ]
359
359
pub fn build_with_vss_store ( & self , url : String , store_id : String ) -> Result < Node , BuildError > {
360
+ use bitcoin:: key:: Secp256k1 ;
361
+
360
362
let logger = setup_logger ( & self . config ) ?;
361
363
362
364
let seed_bytes = seed_bytes_from_config (
@@ -366,14 +368,13 @@ impl NodeBuilder {
366
368
) ?;
367
369
let config = Arc :: new ( self . config . clone ( ) ) ;
368
370
369
- let xprv = bitcoin:: bip32:: ExtendedPrivKey :: new_master ( config. network . into ( ) , & seed_bytes)
370
- . map_err ( |e| {
371
- log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
372
- BuildError :: InvalidSeedBytes
373
- } ) ?;
371
+ let xprv = bitcoin:: bip32:: Xpriv :: new_master ( config. network , & seed_bytes) . map_err ( |e| {
372
+ log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
373
+ BuildError :: InvalidSeedBytes
374
+ } ) ?;
374
375
375
376
let vss_xprv = xprv
376
- . ckd_priv ( & Secp256k1 :: new ( ) , ChildNumber :: Hardened { index : 877 } )
377
+ . derive_priv ( & Secp256k1 :: new ( ) , & [ ChildNumber :: Hardened { index : 877 } ] )
377
378
. map_err ( |e| {
378
379
log_error ! ( logger, "Failed to derive VSS secret: {}" , e) ;
379
380
BuildError :: KVStoreSetupFailed
@@ -555,36 +556,35 @@ fn build_with_store_internal(
555
556
logger : Arc < FilesystemLogger > , kv_store : Arc < DynStore > ,
556
557
) -> Result < Node , BuildError > {
557
558
// Initialize the on-chain wallet and chain access
558
- let xprv = bitcoin:: bip32:: ExtendedPrivKey :: new_master ( config. network . into ( ) , & seed_bytes)
559
- . map_err ( |e| {
560
- log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
561
- BuildError :: InvalidSeedBytes
562
- } ) ?;
563
-
564
- let wallet_name = bdk:: wallet:: wallet_name_from_descriptor (
565
- Bip84 ( xprv, bdk:: KeychainKind :: External ) ,
566
- Some ( Bip84 ( xprv, bdk:: KeychainKind :: Internal ) ) ,
567
- config. network . into ( ) ,
568
- & Secp256k1 :: new ( ) ,
569
- )
570
- . map_err ( |e| {
571
- log_error ! ( logger, "Failed to derive wallet name: {}" , e) ;
572
- BuildError :: WalletSetupFailed
559
+ let xprv = bitcoin:: bip32:: Xpriv :: new_master ( config. network , & seed_bytes) . map_err ( |e| {
560
+ log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
561
+ BuildError :: InvalidSeedBytes
573
562
} ) ?;
574
563
575
- let database_path = format ! ( "{}/bdk_wallet_{}.sqlite" , config. storage_dir_path, wallet_name) ;
576
- let database = SqliteDatabase :: new ( database_path) ;
577
-
578
- let bdk_wallet = bdk:: Wallet :: new (
579
- Bip84 ( xprv, bdk:: KeychainKind :: External ) ,
580
- Some ( Bip84 ( xprv, bdk:: KeychainKind :: Internal ) ) ,
581
- config. network . into ( ) ,
582
- database,
583
- )
584
- . map_err ( |e| {
585
- log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
586
- BuildError :: WalletSetupFailed
587
- } ) ?;
564
+ let descriptor = Bip84 ( xprv, KeychainKind :: External ) ;
565
+ let change_descriptor = Bip84 ( xprv, KeychainKind :: Internal ) ;
566
+ let mut wallet_persister =
567
+ KVStoreWalletPersister :: new ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) ;
568
+ let wallet_opt = BdkWallet :: load ( )
569
+ . descriptor ( KeychainKind :: External , Some ( descriptor. clone ( ) ) )
570
+ . descriptor ( KeychainKind :: Internal , Some ( change_descriptor. clone ( ) ) )
571
+ . extract_keys ( )
572
+ . check_network ( config. network )
573
+ . load_wallet ( & mut wallet_persister)
574
+ . map_err ( |e| {
575
+ log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
576
+ BuildError :: WalletSetupFailed
577
+ } ) ?;
578
+ let bdk_wallet = match wallet_opt {
579
+ Some ( wallet) => wallet,
580
+ None => BdkWallet :: create ( descriptor, change_descriptor)
581
+ . network ( config. network )
582
+ . create_wallet ( & mut wallet_persister)
583
+ . map_err ( |e| {
584
+ log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
585
+ BuildError :: WalletSetupFailed
586
+ } ) ?,
587
+ } ;
588
588
589
589
let ( blockchain, tx_sync, tx_broadcaster, fee_estimator) = match chain_data_source_config {
590
590
Some ( ChainDataSourceConfig :: Esplora ( server_url) ) => {
@@ -764,7 +764,7 @@ fn build_with_store_internal(
764
764
} else {
765
765
// We're starting a fresh node.
766
766
let genesis_block_hash =
767
- bitcoin:: blockdata:: constants:: genesis_block ( config. network . into ( ) ) . block_hash ( ) ;
767
+ bitcoin:: blockdata:: constants:: genesis_block ( config. network ) . block_hash ( ) ;
768
768
769
769
let chain_params = ChainParameters {
770
770
network : config. network . into ( ) ,
0 commit comments