Merge bitcoindevkit/bdk#1246: Fix: apply loaded changeset to indexed_graph when loading a wallet from persistence
f4863c6314904ddd5da586fed0abb8f04ccee396 fix(wallet): apply loaded changeset to indexed_graph (thunderbiscuit) Pull request description: ### Description This PR applies the tx_graph from the changeset when loading a wallet from persistence. This ensures among other things that the revealed keychain indices get picked up by the new wallet. A test for this has been added/modified from an old test. ### Notes to the reviewers ### Changelog notice Fix: loading a wallet from persistence now restores keychain indices. ### Checklists #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing #### Bugfixes: * [ ] This pull request breaks the existing API * [x] I've added tests to reproduce the issue which are now passing * [ ] I'm linking the issue being fixed by this PR ACKs for top commit: evanlinjin: ACK f4863c6314904ddd5da586fed0abb8f04ccee396 Tree-SHA512: c8502077ba25e6fb953829b020b396774aa0569f7272e7818f30ddabed9d1d8ce791729bebc92b9ec1059028399495cb79ea147cf900f25aace94045dd7290a6
This commit is contained in:
		
						commit
						01698ae5ec
					
				| @ -517,7 +517,9 @@ impl<D> Wallet<D> { | ||||
|             create_signers(&mut index, &secp, descriptor, change_descriptor, network) | ||||
|                 .map_err(LoadError::Descriptor)?; | ||||
| 
 | ||||
|         let indexed_graph = IndexedTxGraph::new(index); | ||||
|         let mut indexed_graph = IndexedTxGraph::new(index); | ||||
|         indexed_graph.apply_changeset(changeset.indexed_tx_graph); | ||||
| 
 | ||||
|         let persist = Persist::new(db); | ||||
| 
 | ||||
|         Ok(Wallet { | ||||
|  | ||||
| @ -71,19 +71,26 @@ fn load_recovers_wallet() { | ||||
|     let file_path = temp_dir.path().join("store.db"); | ||||
| 
 | ||||
|     // create new wallet
 | ||||
|     let wallet_keychains = { | ||||
|     let wallet_spk_index = { | ||||
|         let db = bdk_file_store::Store::create_new(DB_MAGIC, &file_path).expect("must create db"); | ||||
|         let wallet = | ||||
|             Wallet::new(get_test_wpkh(), None, db, Network::Testnet).expect("must init wallet"); | ||||
|         wallet.keychains().clone() | ||||
|         let mut wallet = Wallet::new(get_test_tr_single_sig_xprv(), None, db, Network::Testnet) | ||||
|             .expect("must init wallet"); | ||||
| 
 | ||||
|         wallet.try_get_address(New).unwrap(); | ||||
|         wallet.spk_index().clone() | ||||
|     }; | ||||
| 
 | ||||
|     // recover wallet
 | ||||
|     { | ||||
|         let db = bdk_file_store::Store::open(DB_MAGIC, &file_path).expect("must recover db"); | ||||
|         let wallet = Wallet::load(get_test_wpkh(), None, db).expect("must recover wallet"); | ||||
|         let wallet = | ||||
|             Wallet::load(get_test_tr_single_sig_xprv(), None, db).expect("must recover wallet"); | ||||
|         assert_eq!(wallet.network(), Network::Testnet); | ||||
|         assert_eq!(wallet.spk_index().keychains(), &wallet_keychains); | ||||
|         assert_eq!(wallet.spk_index().keychains(), wallet_spk_index.keychains()); | ||||
|         assert_eq!( | ||||
|             wallet.spk_index().last_revealed_indices(), | ||||
|             wallet_spk_index.last_revealed_indices() | ||||
|         ); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user