@@ -40,7 +40,8 @@ use lightning::util::persist::{
4040use lightning:: util:: ser:: ReadableArgs ;
4141use lightning:: util:: sweep:: OutputSweeper ;
4242use lightning_persister:: fs_store:: v1:: FilesystemStore ;
43- use vss_client:: headers:: VssHeaderProvider ;
43+ use lightning_persister:: vss_client:: headers:: VssHeaderProvider ;
44+ use lightning_persister:: vss_store:: VssStoreBuilder ;
4445
4546use crate :: chain:: ChainSource ;
4647use crate :: config:: {
@@ -59,7 +60,6 @@ use crate::io::utils::{
5960 read_node_metrics, read_output_sweeper, read_payments, read_peer_info, read_pending_payments,
6061 read_scorer, write_node_metrics,
6162} ;
62- use crate :: io:: vss_store:: VssStoreBuilder ;
6363use crate :: io:: {
6464 self , PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE , PAYMENT_INFO_PERSISTENCE_SECONDARY_NAMESPACE ,
6565 PENDING_PAYMENT_INFO_PERSISTENCE_PRIMARY_NAMESPACE ,
@@ -84,6 +84,7 @@ use crate::wallet::persist::KVStoreWalletPersister;
8484use crate :: wallet:: Wallet ;
8585use crate :: { Node , NodeMetrics } ;
8686
87+ const VSS_HARDENED_CHILD_INDEX : u32 = 877 ;
8788const LSPS_HARDENED_CHILD_INDEX : u32 = 577 ;
8889const PERSISTER_MAX_PENDING_UPDATES : u64 = 100 ;
8990
@@ -663,7 +664,8 @@ impl NodeBuilder {
663664 fixed_headers : HashMap < String , String > ,
664665 ) -> Result < Node , BuildError > {
665666 let logger = setup_logger ( & self . log_writer_config , & self . config ) ?;
666- let builder = VssStoreBuilder :: new ( node_entropy, vss_url, store_id, self . config . network ) ;
667+ let vss_xprv = derive_vss_xprv ( & node_entropy, self . config . network ) ?;
668+ let builder = VssStoreBuilder :: new ( vss_xprv, vss_url, store_id) ;
667669 let vss_store = builder. build_with_sigs_auth ( fixed_headers) . map_err ( |e| {
668670 log_error ! ( logger, "Failed to setup VSS store: {}" , e) ;
669671 BuildError :: KVStoreSetupFailed
@@ -699,7 +701,8 @@ impl NodeBuilder {
699701 lnurl_auth_server_url : String , fixed_headers : HashMap < String , String > ,
700702 ) -> Result < Node , BuildError > {
701703 let logger = setup_logger ( & self . log_writer_config , & self . config ) ?;
702- let builder = VssStoreBuilder :: new ( node_entropy, vss_url, store_id, self . config . network ) ;
704+ let vss_xprv = derive_vss_xprv ( & node_entropy, self . config . network ) ?;
705+ let builder = VssStoreBuilder :: new ( vss_xprv, vss_url, store_id) ;
703706 let vss_store =
704707 builder. build_with_lnurl ( lnurl_auth_server_url, fixed_headers) . map_err ( |e| {
705708 log_error ! ( logger, "Failed to setup VSS store: {}" , e) ;
@@ -721,13 +724,14 @@ impl NodeBuilder {
721724 /// unrecoverable, i.e., if they remain unresolved after internal retries are exhausted.
722725 ///
723726 /// [VSS]: https://github.com/lightningdevkit/vss-server/blob/main/README.md
724- /// [`FixedHeaders`]: vss_client::headers::FixedHeaders
727+ /// [`FixedHeaders`]: lightning_persister:: vss_client::headers::FixedHeaders
725728 pub fn build_with_vss_store_and_fixed_headers (
726729 & self , node_entropy : NodeEntropy , vss_url : String , store_id : String ,
727730 fixed_headers : HashMap < String , String > ,
728731 ) -> Result < Node , BuildError > {
729732 let logger = setup_logger ( & self . log_writer_config , & self . config ) ?;
730- let builder = VssStoreBuilder :: new ( node_entropy, vss_url, store_id, self . config . network ) ;
733+ let vss_xprv = derive_vss_xprv ( & node_entropy, self . config . network ) ?;
734+ let builder = VssStoreBuilder :: new ( vss_xprv, vss_url, store_id) ;
731735 let vss_store = builder. build_with_fixed_headers ( fixed_headers) . map_err ( |e| {
732736 log_error ! ( logger, "Failed to setup VSS store: {}" , e) ;
733737 BuildError :: KVStoreSetupFailed
@@ -752,7 +756,8 @@ impl NodeBuilder {
752756 header_provider : Arc < dyn VssHeaderProvider > ,
753757 ) -> Result < Node , BuildError > {
754758 let logger = setup_logger ( & self . log_writer_config , & self . config ) ?;
755- let builder = VssStoreBuilder :: new ( node_entropy, vss_url, store_id, self . config . network ) ;
759+ let vss_xprv = derive_vss_xprv ( & node_entropy, self . config . network ) ?;
760+ let builder = VssStoreBuilder :: new ( vss_xprv, vss_url, store_id) ;
756761 let vss_store = builder. build_with_header_provider ( header_provider) . map_err ( |e| {
757762 log_error ! ( logger, "Failed to setup VSS store: {}" , e) ;
758763 BuildError :: KVStoreSetupFailed
@@ -2023,6 +2028,19 @@ fn optionally_install_rustls_cryptoprovider() {
20232028 } ) ;
20242029}
20252030
2031+ fn derive_vss_xprv ( node_entropy : & NodeEntropy , network : Network ) -> Result < Xpriv , BuildError > {
2032+ let seed_bytes = node_entropy. to_seed_bytes ( ) ;
2033+ let secp_ctx = Secp256k1 :: new ( ) ;
2034+ Xpriv :: new_master ( network, & seed_bytes)
2035+ . and_then ( |master| {
2036+ master. derive_priv (
2037+ & secp_ctx,
2038+ & [ ChildNumber :: Hardened { index : VSS_HARDENED_CHILD_INDEX } ] ,
2039+ )
2040+ } )
2041+ . map_err ( |_| BuildError :: KVStoreSetupFailed )
2042+ }
2043+
20262044/// Sets up the node logger.
20272045fn setup_logger (
20282046 log_writer_config : & Option < LogWriterConfig > , config : & Config ,
0 commit comments