@ -40,6 +40,29 @@ using namespace epee;
# define ENCRYPTED_PAYMENT_ID_TAIL 0x8d
static const uint64_t valid_decomposed_outputs [ ] = {
( uint64_t ) 1 , ( uint64_t ) 2 , ( uint64_t ) 3 , ( uint64_t ) 4 , ( uint64_t ) 5 , ( uint64_t ) 6 , ( uint64_t ) 7 , ( uint64_t ) 8 , ( uint64_t ) 9 , // 1 piconero
( uint64_t ) 10 , ( uint64_t ) 20 , ( uint64_t ) 30 , ( uint64_t ) 40 , ( uint64_t ) 50 , ( uint64_t ) 60 , ( uint64_t ) 70 , ( uint64_t ) 80 , ( uint64_t ) 90 ,
( uint64_t ) 100 , ( uint64_t ) 200 , ( uint64_t ) 300 , ( uint64_t ) 400 , ( uint64_t ) 500 , ( uint64_t ) 600 , ( uint64_t ) 700 , ( uint64_t ) 800 , ( uint64_t ) 900 ,
( uint64_t ) 1000 , ( uint64_t ) 2000 , ( uint64_t ) 3000 , ( uint64_t ) 4000 , ( uint64_t ) 5000 , ( uint64_t ) 6000 , ( uint64_t ) 7000 , ( uint64_t ) 8000 , ( uint64_t ) 9000 ,
( uint64_t ) 10000 , ( uint64_t ) 20000 , ( uint64_t ) 30000 , ( uint64_t ) 40000 , ( uint64_t ) 50000 , ( uint64_t ) 60000 , ( uint64_t ) 70000 , ( uint64_t ) 80000 , ( uint64_t ) 90000 ,
( uint64_t ) 100000 , ( uint64_t ) 200000 , ( uint64_t ) 300000 , ( uint64_t ) 400000 , ( uint64_t ) 500000 , ( uint64_t ) 600000 , ( uint64_t ) 700000 , ( uint64_t ) 800000 , ( uint64_t ) 900000 ,
( uint64_t ) 1000000 , ( uint64_t ) 2000000 , ( uint64_t ) 3000000 , ( uint64_t ) 4000000 , ( uint64_t ) 5000000 , ( uint64_t ) 6000000 , ( uint64_t ) 7000000 , ( uint64_t ) 8000000 , ( uint64_t ) 9000000 , // 1 micronero
( uint64_t ) 10000000 , ( uint64_t ) 20000000 , ( uint64_t ) 30000000 , ( uint64_t ) 40000000 , ( uint64_t ) 50000000 , ( uint64_t ) 60000000 , ( uint64_t ) 70000000 , ( uint64_t ) 80000000 , ( uint64_t ) 90000000 ,
( uint64_t ) 100000000 , ( uint64_t ) 200000000 , ( uint64_t ) 300000000 , ( uint64_t ) 400000000 , ( uint64_t ) 500000000 , ( uint64_t ) 600000000 , ( uint64_t ) 700000000 , ( uint64_t ) 800000000 , ( uint64_t ) 900000000 ,
( uint64_t ) 1000000000 , ( uint64_t ) 2000000000 , ( uint64_t ) 3000000000 , ( uint64_t ) 4000000000 , ( uint64_t ) 5000000000 , ( uint64_t ) 6000000000 , ( uint64_t ) 7000000000 , ( uint64_t ) 8000000000 , ( uint64_t ) 9000000000 ,
( uint64_t ) 10000000000 , ( uint64_t ) 20000000000 , ( uint64_t ) 30000000000 , ( uint64_t ) 40000000000 , ( uint64_t ) 50000000000 , ( uint64_t ) 60000000000 , ( uint64_t ) 70000000000 , ( uint64_t ) 80000000000 , ( uint64_t ) 90000000000 ,
( uint64_t ) 100000000000 , ( uint64_t ) 200000000000 , ( uint64_t ) 300000000000 , ( uint64_t ) 400000000000 , ( uint64_t ) 500000000000 , ( uint64_t ) 600000000000 , ( uint64_t ) 700000000000 , ( uint64_t ) 800000000000 , ( uint64_t ) 900000000000 ,
( uint64_t ) 1000000000000 , ( uint64_t ) 2000000000000 , ( uint64_t ) 3000000000000 , ( uint64_t ) 4000000000000 , ( uint64_t ) 5000000000000 , ( uint64_t ) 6000000000000 , ( uint64_t ) 7000000000000 , ( uint64_t ) 8000000000000 , ( uint64_t ) 9000000000000 , // 1 monero
( uint64_t ) 10000000000000 , ( uint64_t ) 20000000000000 , ( uint64_t ) 30000000000000 , ( uint64_t ) 40000000000000 , ( uint64_t ) 50000000000000 , ( uint64_t ) 60000000000000 , ( uint64_t ) 70000000000000 , ( uint64_t ) 80000000000000 , ( uint64_t ) 90000000000000 ,
( uint64_t ) 100000000000000 , ( uint64_t ) 200000000000000 , ( uint64_t ) 300000000000000 , ( uint64_t ) 400000000000000 , ( uint64_t ) 500000000000000 , ( uint64_t ) 600000000000000 , ( uint64_t ) 700000000000000 , ( uint64_t ) 800000000000000 , ( uint64_t ) 900000000000000 ,
( uint64_t ) 1000000000000000 , ( uint64_t ) 2000000000000000 , ( uint64_t ) 3000000000000000 , ( uint64_t ) 4000000000000000 , ( uint64_t ) 5000000000000000 , ( uint64_t ) 6000000000000000 , ( uint64_t ) 7000000000000000 , ( uint64_t ) 8000000000000000 , ( uint64_t ) 9000000000000000 ,
( uint64_t ) 10000000000000000 , ( uint64_t ) 20000000000000000 , ( uint64_t ) 30000000000000000 , ( uint64_t ) 40000000000000000 , ( uint64_t ) 50000000000000000 , ( uint64_t ) 60000000000000000 , ( uint64_t ) 70000000000000000 , ( uint64_t ) 80000000000000000 , ( uint64_t ) 90000000000000000 ,
( uint64_t ) 100000000000000000 , ( uint64_t ) 200000000000000000 , ( uint64_t ) 300000000000000000 , ( uint64_t ) 400000000000000000 , ( uint64_t ) 500000000000000000 , ( uint64_t ) 600000000000000000 , ( uint64_t ) 700000000000000000 , ( uint64_t ) 800000000000000000 , ( uint64_t ) 900000000000000000 ,
( uint64_t ) 1000000000000000000 , ( uint64_t ) 2000000000000000000 , ( uint64_t ) 3000000000000000000 , ( uint64_t ) 4000000000000000000 , ( uint64_t ) 5000000000000000000 , ( uint64_t ) 6000000000000000000 , ( uint64_t ) 7000000000000000000 , ( uint64_t ) 8000000000000000000 , ( uint64_t ) 9000000000000000000 , // 1 meganero
( uint64_t ) 10000000000000000000ull
} ;
namespace cryptonote
{
//---------------------------------------------------------------
@ -82,7 +105,7 @@ namespace cryptonote
return true ;
}
//---------------------------------------------------------------
bool construct_miner_tx ( size_t height , size_t median_size , uint64_t already_generated_coins , size_t current_block_size , uint64_t fee , const account_public_address & miner_address , transaction & tx , const blobdata & extra_nonce , size_t max_outs ) {
bool construct_miner_tx ( size_t height , size_t median_size , uint64_t already_generated_coins , size_t current_block_size , uint64_t fee , const account_public_address & miner_address , transaction & tx , const blobdata & extra_nonce , size_t max_outs , uint8_t hard_fork_version ) {
tx . vin . clear ( ) ;
tx . vout . clear ( ) ;
tx . extra . clear ( ) ;
@ -102,6 +125,15 @@ namespace cryptonote
LOG_PRINT_L0 ( " Block is too big " ) ;
return false ;
}
// from hard fork 2, we cut out the low significant digits. This makes the tx smaller, and
// keeps the paid amount almost the same. The unpaid remainder gets pushed back to the
// emission schedule
if ( hard_fork_version > = 2 )
{
block_reward = block_reward - block_reward % : : config : : BASE_REWARD_CLAMP_THRESHOLD ;
}
# if defined(DEBUG_CREATE_BLOCK_TEMPLATE)
LOG_PRINT_L1 ( " Creating block template: reward " < < block_reward < <
" , fee " < < fee )
@ -109,7 +141,7 @@ namespace cryptonote
block_reward + = fee ;
std : : vector < uint64_t > out_amounts ;
decompose_amount_into_digits ( block_reward , : : config : : DEFAULT_DUST_THRESHOLD ,
decompose_amount_into_digits ( block_reward , hard_fork_version > = 2 ? 0 : : : config : : DEFAULT_DUST_THRESHOLD ,
[ & out_amounts ] ( uint64_t a_chunk ) { out_amounts . push_back ( a_chunk ) ; } ,
[ & out_amounts ] ( uint64_t a_dust ) { out_amounts . push_back ( a_dust ) ; } ) ;
@ -922,4 +954,11 @@ namespace cryptonote
return get_tx_tree_hash ( txs_ids ) ;
}
//---------------------------------------------------------------
bool is_valid_decomposed_amount ( uint64_t amount )
{
const uint64_t * begin = valid_decomposed_outputs ;
const uint64_t * end = valid_decomposed_outputs + sizeof ( valid_decomposed_outputs ) / sizeof ( valid_decomposed_outputs [ 0 ] ) ;
return std : : binary_search ( begin , end , amount ) ;
}
//---------------------------------------------------------------
}