@@ -63,7 +63,7 @@ use bdk_wallet::Wallet as BdkWallet;
63
63
use bip39:: Mnemonic ;
64
64
65
65
use bitcoin:: secp256k1:: PublicKey ;
66
- use bitcoin:: { BlockHash , Network } ;
66
+ use bitcoin:: { constants , BlockHash , Network } ;
67
67
68
68
use bitcoin:: bip32:: { ChildNumber , Xpriv } ;
69
69
use std:: collections:: HashMap ;
@@ -168,6 +168,8 @@ pub enum BuildError {
168
168
WalletSetupFailed ,
169
169
/// We failed to setup the logger.
170
170
LoggerSetupFailed ,
171
+ /// The given network does not match.
172
+ NetworkMismatch ,
171
173
}
172
174
173
175
impl fmt:: Display for BuildError {
@@ -189,6 +191,7 @@ impl fmt::Display for BuildError {
189
191
Self :: WalletSetupFailed => write ! ( f, "Failed to setup onchain wallet." ) ,
190
192
Self :: LoggerSetupFailed => write ! ( f, "Failed to setup the logger." ) ,
191
193
Self :: InvalidNodeAlias => write ! ( f, "Given node alias is invalid." ) ,
194
+ Self :: NetworkMismatch => write ! ( f, "Given network does not match the node's network." ) ,
192
195
}
193
196
}
194
197
}
@@ -903,10 +906,19 @@ fn build_with_store_internal(
903
906
. descriptor ( KeychainKind :: Internal , Some ( change_descriptor. clone ( ) ) )
904
907
. extract_keys ( )
905
908
. check_network ( config. network )
909
+ . check_genesis_hash ( constants:: genesis_block ( config. network ) . block_hash ( ) )
906
910
. load_wallet ( & mut wallet_persister)
907
- . map_err ( |e| {
908
- log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
909
- BuildError :: WalletSetupFailed
911
+ . map_err ( |e| match e {
912
+ bdk_wallet:: LoadWithPersistError :: InvalidChangeSet (
913
+ bdk_wallet:: LoadError :: Mismatch ( bdk_wallet:: LoadMismatch :: Network { .. } ) ,
914
+ ) => BuildError :: NetworkMismatch ,
915
+ bdk_wallet:: LoadWithPersistError :: InvalidChangeSet (
916
+ bdk_wallet:: LoadError :: Mismatch ( bdk_wallet:: LoadMismatch :: Genesis { .. } ) ,
917
+ ) => BuildError :: NetworkMismatch ,
918
+ _ => {
919
+ log_error ! ( logger, "Failed to set up wallet: {}" , e) ;
920
+ BuildError :: WalletSetupFailed
921
+ } ,
910
922
} ) ?;
911
923
let bdk_wallet = match wallet_opt {
912
924
Some ( wallet) => wallet,
0 commit comments