@ -3035,6 +3035,7 @@ bool simple_wallet::accept_loaded_tx(const std::function<size_t()> get_num_txes,
size_t min_mixin = ~ 0 ;
std : : unordered_map < std : : string , uint64_t > dests ;
const std : : string wallet_address = m_wallet - > get_account ( ) . get_public_address_str ( m_wallet - > testnet ( ) ) ;
int first_known_non_zero_change_index = - 1 ;
for ( size_t n = 0 ; n < get_num_txes ( ) ; + + n )
{
const tools : : wallet2 : : tx_construction_data & cd = get_tx ( n ) ;
@ -3069,10 +3070,15 @@ bool simple_wallet::accept_loaded_tx(const std::function<size_t()> get_num_txes,
fail_msg_writer ( ) < < tr ( " Claimed change is larger than payment to the change address " ) ;
return false ;
}
if ( memcmp( & cd . change_dts . addr , & get_tx ( 0 ) . change_dts . addr , sizeof ( cd . change_dts . addr ) ) )
if ( cd. change_dts . amount > 0 )
{
fail_msg_writer ( ) < < tr ( " Change does to more than one address " ) ;
return false ;
if ( first_known_non_zero_change_index = = - 1 )
first_known_non_zero_change_index = n ;
if ( memcmp ( & cd . change_dts . addr , & get_tx ( first_known_non_zero_change_index ) . change_dts . addr , sizeof ( cd . change_dts . addr ) ) )
{
fail_msg_writer ( ) < < tr ( " Change goes to more than one address " ) ;
return false ;
}
}
change + = cd . change_dts . amount ;
it - > second - = cd . change_dts . amount ;