@ -1805,33 +1805,18 @@ bool DescriptorScriptPubKeyMan::TopUp(unsigned int size)
}
}
m_map_pubkeys [ pubkey ] = i ;
m_map_pubkeys [ pubkey ] = i ;
}
}
// Write the cache
// Merge and write the cache
for ( const auto & parent_xpub_pair : temp_cache . GetCachedParentExtPubKeys ( ) ) {
DescriptorCache new_items = m_wallet_descriptor . cache . MergeAndDiff ( temp_cache ) ;
CExtPubKey xpub ;
for ( const auto & parent_xpub_pair : new_items . GetCachedParentExtPubKeys ( ) ) {
if ( m_wallet_descriptor . cache . GetCachedParentExtPubKey ( parent_xpub_pair . first , xpub ) ) {
if ( xpub ! = parent_xpub_pair . second ) {
throw std : : runtime_error ( std : : string ( __func__ ) + " : New cached parent xpub does not match already cached parent xpub " ) ;
}
continue ;
}
if ( ! batch . WriteDescriptorParentCache ( parent_xpub_pair . second , id , parent_xpub_pair . first ) ) {
if ( ! batch . WriteDescriptorParentCache ( parent_xpub_pair . second , id , parent_xpub_pair . first ) ) {
throw std : : runtime_error ( std : : string ( __func__ ) + " : writing cache item failed " ) ;
throw std : : runtime_error ( std : : string ( __func__ ) + " : writing cache item failed " ) ;
}
}
m_wallet_descriptor . cache . CacheParentExtPubKey ( parent_xpub_pair . first , parent_xpub_pair . second ) ;
}
}
for ( const auto & derived_xpub_map_pair : temp_cache . GetCachedDerivedExtPubKeys ( ) ) {
for ( const auto & derived_xpub_map_pair : new_items . GetCachedDerivedExtPubKeys ( ) ) {
for ( const auto & derived_xpub_pair : derived_xpub_map_pair . second ) {
for ( const auto & derived_xpub_pair : derived_xpub_map_pair . second ) {
CExtPubKey xpub ;
if ( m_wallet_descriptor . cache . GetCachedDerivedExtPubKey ( derived_xpub_map_pair . first , derived_xpub_pair . first , xpub ) ) {
if ( xpub ! = derived_xpub_pair . second ) {
throw std : : runtime_error ( std : : string ( __func__ ) + " : New cached derived xpub does not match already cached derived xpub " ) ;
}
continue ;
}
if ( ! batch . WriteDescriptorDerivedCache ( derived_xpub_pair . second , id , derived_xpub_map_pair . first , derived_xpub_pair . first ) ) {
if ( ! batch . WriteDescriptorDerivedCache ( derived_xpub_pair . second , id , derived_xpub_map_pair . first , derived_xpub_pair . first ) ) {
throw std : : runtime_error ( std : : string ( __func__ ) + " : writing cache item failed " ) ;
throw std : : runtime_error ( std : : string ( __func__ ) + " : writing cache item failed " ) ;
}
}
m_wallet_descriptor . cache . CacheDerivedExtPubKey ( derived_xpub_map_pair . first , derived_xpub_pair . first , derived_xpub_pair . second ) ;
}
}
}
}
m_max_cached_index + + ;
m_max_cached_index + + ;