@@ -3960,25 +3960,17 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
3960
3960
if (data.watchonly_wallet ) {
3961
3961
LOCK (data.watchonly_wallet ->cs_wallet );
3962
3962
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 ;
3969
3965
dests_to_delete.push_back (addr_pair.first );
3970
3966
continue ;
3971
3967
}
3972
3968
}
3973
3969
if (data.solvable_wallet ) {
3974
3970
LOCK (data.solvable_wallet ->cs_wallet );
3975
3971
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 ;
3982
3974
dests_to_delete.push_back (addr_pair.first );
3983
3975
continue ;
3984
3976
}
@@ -3998,21 +3990,13 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
3998
3990
// Labels for everything else ("send") should be cloned to all
3999
3991
if (data.watchonly_wallet ) {
4000
3992
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 ;
4007
3995
}
4008
3996
if (data.solvable_wallet ) {
4009
3997
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 ;
4016
4000
}
4017
4001
}
4018
4002
}
@@ -4023,10 +4007,12 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
4023
4007
WalletBatch batch{wallet.GetDatabase ()};
4024
4008
for (const auto & [destination, addr_book_data] : wallet.m_address_book ) {
4025
4009
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)
4028
4010
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 );
4030
4016
}
4031
4017
};
4032
4018
if (data.watchonly_wallet ) persist_address_book (*data.watchonly_wallet );
0 commit comments