@@ -3960,25 +3960,17 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
39603960 if (data.watchonly_wallet ) {
39613961 LOCK (data.watchonly_wallet ->cs_wallet );
39623962 if (data.watchonly_wallet ->IsMine (addr_pair.first )) {
3963- // Add to the watchonly. Preserve the labels, purpose, and change-ness
3964- std::string label = addr_pair.second .GetLabel ();
3965- data.watchonly_wallet ->m_address_book [addr_pair.first ].purpose = addr_pair.second .purpose ;
3966- if (!addr_pair.second .IsChange ()) {
3967- data.watchonly_wallet ->m_address_book [addr_pair.first ].SetLabel (label);
3968- }
3963+ // Add to the watchonly. Copy the entire address book entry
3964+ data.watchonly_wallet ->m_address_book [addr_pair.first ] = addr_pair.second ;
39693965 dests_to_delete.push_back (addr_pair.first );
39703966 continue ;
39713967 }
39723968 }
39733969 if (data.solvable_wallet ) {
39743970 LOCK (data.solvable_wallet ->cs_wallet );
39753971 if (data.solvable_wallet ->IsMine (addr_pair.first )) {
3976- // Add to the solvable. Preserve the labels, purpose, and change-ness
3977- std::string label = addr_pair.second .GetLabel ();
3978- data.solvable_wallet ->m_address_book [addr_pair.first ].purpose = addr_pair.second .purpose ;
3979- if (!addr_pair.second .IsChange ()) {
3980- data.solvable_wallet ->m_address_book [addr_pair.first ].SetLabel (label);
3981- }
3972+ // Add to the solvable. Copy the entire address book entry
3973+ data.solvable_wallet ->m_address_book [addr_pair.first ] = addr_pair.second ;
39823974 dests_to_delete.push_back (addr_pair.first );
39833975 continue ;
39843976 }
@@ -3998,21 +3990,13 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
39983990 // Labels for everything else ("send") should be cloned to all
39993991 if (data.watchonly_wallet ) {
40003992 LOCK (data.watchonly_wallet ->cs_wallet );
4001- // Add to the watchonly. Preserve the labels, purpose, and change-ness
4002- std::string label = addr_pair.second .GetLabel ();
4003- data.watchonly_wallet ->m_address_book [addr_pair.first ].purpose = addr_pair.second .purpose ;
4004- if (!addr_pair.second .IsChange ()) {
4005- data.watchonly_wallet ->m_address_book [addr_pair.first ].SetLabel (label);
4006- }
3993+ // Add to the watchonly. Copy the entire address book entry
3994+ data.watchonly_wallet ->m_address_book [addr_pair.first ] = addr_pair.second ;
40073995 }
40083996 if (data.solvable_wallet ) {
40093997 LOCK (data.solvable_wallet ->cs_wallet );
4010- // Add to the solvable. Preserve the labels, purpose, and change-ness
4011- std::string label = addr_pair.second .GetLabel ();
4012- data.solvable_wallet ->m_address_book [addr_pair.first ].purpose = addr_pair.second .purpose ;
4013- if (!addr_pair.second .IsChange ()) {
4014- data.solvable_wallet ->m_address_book [addr_pair.first ].SetLabel (label);
4015- }
3998+ // Add to the solvable. Copy the entire address book entry
3999+ data.solvable_wallet ->m_address_book [addr_pair.first ] = addr_pair.second ;
40164000 }
40174001 }
40184002 }
@@ -4023,10 +4007,12 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
40234007 WalletBatch batch{wallet.GetDatabase ()};
40244008 for (const auto & [destination, addr_book_data] : wallet.m_address_book ) {
40254009 auto address{EncodeDestination (destination)};
4026- std::optional<std::string> label = addr_book_data.IsChange () ? std::nullopt : std::make_optional (addr_book_data.GetLabel ());
4027- // don't bother writing default values (unknown purpose)
40284010 if (addr_book_data.purpose ) batch.WritePurpose (address, PurposeToString (*addr_book_data.purpose ));
4029- if (label) batch.WriteName (address, *label);
4011+ if (addr_book_data.label ) batch.WriteName (address, *addr_book_data.label );
4012+ for (const auto & [id, request] : addr_book_data.receive_requests ) {
4013+ batch.WriteAddressReceiveRequest (destination, id, request);
4014+ }
4015+ if (addr_book_data.previously_spent ) batch.WriteAddressPreviouslySpent (destination, true );
40304016 }
40314017 };
40324018 if (data.watchonly_wallet ) persist_address_book (*data.watchonly_wallet );
0 commit comments