@ -9154,8 +9154,7 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>>
template < typename T >
void wallet2 : : transfer_selected ( const std : : vector < cryptonote : : tx_destination_entry > & dsts , const std : : vector < size_t > & selected_transfers , size_t fake_outputs_count ,
std : : vector < std : : vector < tools : : wallet2 : : get_outs_entry > > & outs , std : : unordered_set < crypto : : public_key > & valid_public_keys_cache ,
uint64_t unlock_time , uint64_t fee , const std : : vector < uint8_t > & extra , T destination_split_strategy , const tx_dust_policy & dust_policy , cryptonote : : transaction & tx , pending_tx & ptx ,
bool use_view_tags )
uint64_t unlock_time , uint64_t fee , const std : : vector < uint8_t > & extra , T destination_split_strategy , const tx_dust_policy & dust_policy , cryptonote : : transaction & tx , pending_tx & ptx )
{
using namespace cryptonote ;
// throw if attempting a transaction with no destinations
@ -9315,7 +9314,7 @@ void wallet2::transfer_selected(const std::vector<cryptonote::tx_destination_ent
void wallet2 : : transfer_selected_rct ( std : : vector < cryptonote : : tx_destination_entry > dsts , const std : : vector < size_t > & selected_transfers , size_t fake_outputs_count ,
std : : vector < std : : vector < tools : : wallet2 : : get_outs_entry > > & outs , std : : unordered_set < crypto : : public_key > & valid_public_keys_cache ,
uint64_t unlock_time , uint64_t fee , const std : : vector < uint8_t > & extra , cryptonote : : transaction & tx , pending_tx & ptx , const rct : : RCTConfig & rct_config , bool use_view_tags )
uint64_t unlock_time , uint64_t fee , const std : : vector < uint8_t > & extra , cryptonote : : transaction & tx , pending_tx & ptx , const rct : : RCTConfig & rct_config )
{
using namespace cryptonote ;
// throw if attempting a transaction with no destinations
@ -10291,7 +10290,6 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp
rct : : RangeProofPaddedBulletproof ,
bulletproof_plus ? 4 : 3
} ;
const bool use_view_tags = use_fork_rules ( get_view_tag_fork ( ) , 0 ) ;
std : : unordered_set < crypto : : public_key > valid_public_keys_cache ;
const uint64_t base_fee = get_base_fee ( ) ;
@ -10639,10 +10637,10 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp
tx . selected_transfers . size ( ) < < " inputs " ) ;
if ( use_rct )
transfer_selected_rct ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
test_tx , test_ptx , rct_config , use_view_tags );
test_tx , test_ptx , rct_config );
else
transfer_selected ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx , use_view_tags );
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx );
auto txBlob = t_serializable_object_to_blob ( test_ptx . tx ) ;
needed_fee = calculate_fee ( use_per_byte_fee , test_ptx . tx , txBlob . size ( ) , base_fee , fee_multiplier , fee_quantization_mask ) ;
available_for_fee = test_ptx . fee + test_ptx . change_dts . amount + ( ! test_ptx . dust_added_to_fee ? test_ptx . dust : 0 ) ;
@ -10682,10 +10680,10 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_2(std::vector<cryp
while ( needed_fee > test_ptx . fee ) {
if ( use_rct )
transfer_selected_rct ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
test_tx , test_ptx , rct_config , use_view_tags );
test_tx , test_ptx , rct_config );
else
transfer_selected ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx , use_view_tags );
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx );
txBlob = t_serializable_object_to_blob ( test_ptx . tx ) ;
needed_fee = calculate_fee ( use_per_byte_fee , test_ptx . tx , txBlob . size ( ) , base_fee , fee_multiplier , fee_quantization_mask ) ;
LOG_PRINT_L2 ( " Made an attempt at a final " < < get_weight_string ( test_ptx . tx , txBlob . size ( ) ) < < " tx, with " < < print_money ( test_ptx . fee ) < <
@ -10881,7 +10879,7 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_all(uint64_t below
const size_t tx_weight_two_rings = estimate_tx_weight ( use_rct , 2 , fake_outs_count , 2 , 0 , bulletproof , clsag , bulletproof_plus ) ;
THROW_WALLET_EXCEPTION_IF ( tx_weight_one_ring > tx_weight_two_rings , error : : wallet_internal_error , " Estimated tx weight with 1 input is larger than with 2 inputs! " ) ;
const size_t tx_weight_per_ring = tx_weight_two_rings - tx_weight_one_ring ;
const uint64_t fractional_threshold = ( base_fee * tx_weight_per_ring ) / ( use_per_byte_fee ? 1 : 1024 ) ;
const uint64_t fractional_threshold = ( fee_multiplier * base_fee * tx_weight_per_ring ) / ( use_per_byte_fee ? 1 : 1024 ) ;
std : : unordered_set < crypto : : public_key > valid_public_keys_cache ;
THROW_WALLET_EXCEPTION_IF ( unlocked_balance ( subaddr_account , false ) = = 0 , error : : wallet_internal_error , " No unlocked balance in the specified account " ) ;
@ -11068,10 +11066,10 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_from(const crypton
tx . selected_transfers . size ( ) < < " outputs " ) ;
if ( use_rct )
transfer_selected_rct ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
test_tx , test_ptx , rct_config , use_view_tags );
test_tx , test_ptx , rct_config );
else
transfer_selected ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx , use_view_tags );
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx );
auto txBlob = t_serializable_object_to_blob ( test_ptx . tx ) ;
needed_fee = calculate_fee ( use_per_byte_fee , test_ptx . tx , txBlob . size ( ) , base_fee , fee_multiplier , fee_quantization_mask ) ;
available_for_fee = test_ptx . fee + test_ptx . change_dts . amount ;
@ -11105,10 +11103,10 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_from(const crypton
}
if ( use_rct )
transfer_selected_rct ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
test_tx , test_ptx , rct_config , use_view_tags );
test_tx , test_ptx , rct_config );
else
transfer_selected ( tx . dsts , tx . selected_transfers , fake_outs_count , outs , valid_public_keys_cache , unlock_time , needed_fee , extra ,
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx , use_view_tags );
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx );
txBlob = t_serializable_object_to_blob ( test_ptx . tx ) ;
needed_fee = calculate_fee ( use_per_byte_fee , test_ptx . tx , txBlob . size ( ) , base_fee , fee_multiplier , fee_quantization_mask ) ;
LOG_PRINT_L2 ( " Made an attempt at a final " < < get_weight_string ( test_ptx . tx , txBlob . size ( ) ) < < " tx, with " < < print_money ( test_ptx . fee ) < <
@ -11144,10 +11142,10 @@ std::vector<wallet2::pending_tx> wallet2::create_transactions_from(const crypton
pending_tx test_ptx ;
if ( use_rct ) {
transfer_selected_rct ( tx . dsts , tx . selected_transfers , fake_outs_count , tx . outs , valid_public_keys_cache , unlock_time , tx . needed_fee , extra ,
test_tx , test_ptx , rct_config , use_view_tags );
test_tx , test_ptx , rct_config );
} else {
transfer_selected ( tx . dsts , tx . selected_transfers , fake_outs_count , tx . outs , valid_public_keys_cache , unlock_time , tx . needed_fee , extra ,
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx , use_view_tags );
detail : : digit_split_strategy , tx_dust_policy ( : : config : : DEFAULT_DUST_THRESHOLD ) , test_tx , test_ptx );
}
auto txBlob = t_serializable_object_to_blob ( test_ptx . tx ) ;
tx . tx = test_tx ;