@@ -1201,6 +1201,50 @@ mod test {
12011201 assert_eq ! ( update. last_unused. internal, 8 ) ;
12021202 }
12031203
1204+ #[ test]
1205+ fn test_merge_v3_then_v4_preserves_following_last_unused_on_restore ( ) {
1206+ let desc: WolletDescriptor = lwk_test_util:: wollet_descriptor_string ( ) . parse ( ) . unwrap ( ) ;
1207+ let network = Network :: default_regtest ( ) ;
1208+ let wollet_status = WolletBuilder :: new ( network, desc. clone ( ) ) . build ( ) . unwrap ( ) . status ( ) ;
1209+ let mut update = Update {
1210+ version : 3 ,
1211+ wollet_status,
1212+ new_txs : DownloadTxResult :: default ( ) ,
1213+ txid_height_new : vec ! [ ] ,
1214+ txid_height_delete : vec ! [ ] ,
1215+ timestamps : vec ! [ ] ,
1216+ scripts_with_blinding_pubkey : vec ! [ ] ,
1217+ tip : super :: default_blockheader ( ) ,
1218+ unspent : vec ! [ ] ,
1219+ last_unused : LastUnused :: default ( ) ,
1220+ } ;
1221+
1222+ let following = Update {
1223+ version : 4 ,
1224+ wollet_status : wollet_status + 1 ,
1225+ new_txs : DownloadTxResult :: default ( ) ,
1226+ txid_height_new : vec ! [ ] ,
1227+ txid_height_delete : vec ! [ ] ,
1228+ timestamps : vec ! [ ] ,
1229+ scripts_with_blinding_pubkey : vec ! [ ] ,
1230+ tip : super :: default_blockheader ( ) ,
1231+ unspent : vec ! [ ] ,
1232+ last_unused : LastUnused {
1233+ external : 7 ,
1234+ internal : 11 ,
1235+ } ,
1236+ } ;
1237+
1238+ update. merge ( following) ;
1239+ assert_eq ! ( update. version, 4 ) ;
1240+
1241+ let merged = Update :: deserialize ( & update. serialize ( ) . unwrap ( ) ) . unwrap ( ) ;
1242+ let mut wollet = WolletBuilder :: new ( network, desc) . build ( ) . unwrap ( ) ;
1243+ wollet. apply_update ( merged) . unwrap ( ) ;
1244+
1245+ assert_eq ! ( wollet. address( None ) . unwrap( ) . index( ) , 7 ) ;
1246+ }
1247+
12041248 #[ test]
12051249 fn test_apply_v4_update_fetch_max_semantics ( ) {
12061250 let desc: WolletDescriptor = lwk_test_util:: wollet_descriptor_string ( ) . parse ( ) . unwrap ( ) ;
0 commit comments