@@ -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
@@ -53,12 +56,9 @@ use lightning_transaction_sync::EsploraSyncClient;
53
56
use lightning_liquidity:: lsps2:: client:: LSPS2ClientConfig ;
54
57
use lightning_liquidity:: { LiquidityClientConfig , LiquidityManager } ;
55
58
56
- #[ cfg( any( vss, vss_test) ) ]
57
- use crate :: io:: vss_store:: VssStore ;
58
- use bdk:: bitcoin:: secp256k1:: Secp256k1 ;
59
- use bdk:: blockchain:: esplora:: EsploraBlockchain ;
60
- use bdk:: database:: SqliteDatabase ;
61
- use bdk:: template:: Bip84 ;
59
+ use bdk_wallet:: template:: Bip84 ;
60
+ use bdk_wallet:: KeychainKind ;
61
+ use bdk_wallet:: Wallet as BdkWallet ;
62
62
63
63
use bip39:: Mnemonic ;
64
64
@@ -342,6 +342,8 @@ impl NodeBuilder {
342
342
/// previously configured.
343
343
#[ cfg( any( vss, vss_test) ) ]
344
344
pub fn build_with_vss_store ( & self , url : String , store_id : String ) -> Result < Node , BuildError > {
345
+ use bitcoin:: key:: Secp256k1 ;
346
+
345
347
let logger = setup_logger ( & self . config ) ?;
346
348
347
349
let seed_bytes = seed_bytes_from_config (
@@ -351,14 +353,13 @@ impl NodeBuilder {
351
353
) ?;
352
354
let config = Arc :: new ( self . config . clone ( ) ) ;
353
355
354
- let xprv = bitcoin:: bip32:: ExtendedPrivKey :: new_master ( config. network . into ( ) , & seed_bytes)
355
- . map_err ( |e| {
356
- log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
357
- BuildError :: InvalidSeedBytes
358
- } ) ?;
356
+ let xprv = bitcoin:: bip32:: Xpriv :: new_master ( config. network , & seed_bytes) . map_err ( |e| {
357
+ log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
358
+ BuildError :: InvalidSeedBytes
359
+ } ) ?;
359
360
360
361
let vss_xprv = xprv
361
- . ckd_priv ( & Secp256k1 :: new ( ) , ChildNumber :: Hardened { index : 877 } )
362
+ . derive_priv ( & Secp256k1 :: new ( ) , & [ ChildNumber :: Hardened { index : 877 } ] )
362
363
. map_err ( |e| {
363
364
log_error ! ( logger, "Failed to derive VSS secret: {}" , e) ;
364
365
BuildError :: KVStoreSetupFailed
@@ -532,36 +533,35 @@ fn build_with_store_internal(
532
533
logger : Arc < FilesystemLogger > , kv_store : Arc < DynStore > ,
533
534
) -> Result < Node , BuildError > {
534
535
// Initialize the on-chain wallet and chain access
535
- let xprv = bitcoin:: bip32:: ExtendedPrivKey :: new_master ( config. network . into ( ) , & seed_bytes)
536
- . map_err ( |e| {
537
- log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
538
- BuildError :: InvalidSeedBytes
539
- } ) ?;
540
-
541
- let wallet_name = bdk:: wallet:: wallet_name_from_descriptor (
542
- Bip84 ( xprv, bdk:: KeychainKind :: External ) ,
543
- Some ( Bip84 ( xprv, bdk:: KeychainKind :: Internal ) ) ,
544
- config. network . into ( ) ,
545
- & Secp256k1 :: new ( ) ,
546
- )
547
- . map_err ( |e| {
548
- log_error ! ( logger, "Failed to derive wallet name: {}" , e) ;
549
- BuildError :: WalletSetupFailed
536
+ let xprv = bitcoin:: bip32:: Xpriv :: new_master ( config. network , & seed_bytes) . map_err ( |e| {
537
+ log_error ! ( logger, "Failed to derive master secret: {}" , e) ;
538
+ BuildError :: InvalidSeedBytes
550
539
} ) ?;
551
540
552
- let database_path = format ! ( "{}/bdk_wallet_{}.sqlite" , config. storage_dir_path, wallet_name) ;
553
- let database = SqliteDatabase :: new ( database_path) ;
554
-
555
- let bdk_wallet = bdk:: Wallet :: new (
556
- Bip84 ( xprv, bdk:: KeychainKind :: External ) ,
557
- Some ( Bip84 ( xprv, bdk:: KeychainKind :: Internal ) ) ,
558
- config. network . into ( ) ,
559
- database,
560
- )
561
- . map_err ( |e| {
562
- log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
563
- BuildError :: WalletSetupFailed
564
- } ) ?;
541
+ let descriptor = Bip84 ( xprv, KeychainKind :: External ) ;
542
+ let change_descriptor = Bip84 ( xprv, KeychainKind :: Internal ) ;
543
+ let mut wallet_persister =
544
+ KVStoreWalletPersister :: new ( Arc :: clone ( & kv_store) , Arc :: clone ( & logger) ) ;
545
+ let wallet_opt = BdkWallet :: load ( )
546
+ . descriptor ( KeychainKind :: External , Some ( descriptor. clone ( ) ) )
547
+ . descriptor ( KeychainKind :: Internal , Some ( change_descriptor. clone ( ) ) )
548
+ . extract_keys ( )
549
+ . check_network ( config. network )
550
+ . load_wallet ( & mut wallet_persister)
551
+ . map_err ( |e| {
552
+ log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
553
+ BuildError :: WalletSetupFailed
554
+ } ) ?;
555
+ let bdk_wallet = match wallet_opt {
556
+ Some ( wallet) => wallet,
557
+ None => BdkWallet :: create ( descriptor, change_descriptor)
558
+ . network ( config. network )
559
+ . create_wallet ( & mut wallet_persister)
560
+ . map_err ( |e| {
561
+ log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
562
+ BuildError :: WalletSetupFailed
563
+ } ) ?,
564
+ } ;
565
565
566
566
let ( blockchain, tx_sync, tx_broadcaster, fee_estimator) = match chain_data_source_config {
567
567
Some ( ChainDataSourceConfig :: Esplora ( server_url) ) => {
@@ -741,7 +741,7 @@ fn build_with_store_internal(
741
741
} else {
742
742
// We're starting a fresh node.
743
743
let genesis_block_hash =
744
- bitcoin:: blockdata:: constants:: genesis_block ( config. network . into ( ) ) . block_hash ( ) ;
744
+ bitcoin:: blockdata:: constants:: genesis_block ( config. network ) . block_hash ( ) ;
745
745
746
746
let chain_params = ChainParameters {
747
747
network : config. network . into ( ) ,
0 commit comments