Merge pull request #1631

58e82506 Blockfill - Sort tx pool correctly (Alexis Enston)
5f7a8741 Blockfill - Take TX fees into account properly (Alexis Enston)
4ecab0d8 Consider empty block when filling with TXs (Alexis Enston)
This commit is contained in:
Riccardo Spagni 2017-02-02 19:41:25 +02:00
commit a6f61b8419
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD

View file

@ -63,7 +63,7 @@ namespace cryptonote
size_t const TRANSACTION_SIZE_LIMIT_V2 = (((CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V2 * 125) / 100) - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE); size_t const TRANSACTION_SIZE_LIMIT_V2 = (((CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V2 * 125) / 100) - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE);
time_t const MIN_RELAY_TIME = (60 * 5); // only start re-relaying transactions after that many seconds time_t const MIN_RELAY_TIME = (60 * 5); // only start re-relaying transactions after that many seconds
time_t const MAX_RELAY_TIME = (60 * 60 * 4); // at most that many seconds between resends time_t const MAX_RELAY_TIME = (60 * 60 * 4); // at most that many seconds between resends
float const ACCEPT_THRESHOLD = 0.99f; float const ACCEPT_THRESHOLD = 1.0f;
// a kind of increasing backoff within min/max bounds // a kind of increasing backoff within min/max bounds
time_t get_relay_delay(time_t now, time_t received) time_t get_relay_delay(time_t now, time_t received)
@ -253,7 +253,7 @@ namespace cryptonote
tvc.m_verifivation_failed = false; tvc.m_verifivation_failed = false;
m_txs_by_fee_and_receive_time.emplace(std::pair<double, std::time_t>((double)blob_size / fee, receive_time), id); m_txs_by_fee_and_receive_time.emplace(std::pair<double, std::time_t>(fee / (double)blob_size, receive_time), id);
return true; return true;
} }
@ -614,6 +614,10 @@ namespace cryptonote
total_size = 0; total_size = 0;
fee = 0; fee = 0;
//baseline empty block
get_block_reward(median_size, total_size, already_generated_coins, best_coinbase, version);
size_t max_total_size = 2 * median_size - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE; size_t max_total_size = 2 * median_size - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE;
std::unordered_set<crypto::key_image> k_images; std::unordered_set<crypto::key_image> k_images;
@ -641,7 +645,7 @@ namespace cryptonote
sorted_it++; sorted_it++;
continue; continue;
} }
uint64_t coinbase = block_reward + fee; uint64_t coinbase = block_reward + fee + tx_it->second.fee;
if (coinbase < template_accept_threshold(best_coinbase)) if (coinbase < template_accept_threshold(best_coinbase))
{ {
LOG_PRINT_L2(" would decrease coinbase to " << print_money(coinbase)); LOG_PRINT_L2(" would decrease coinbase to " << print_money(coinbase));
@ -728,7 +732,7 @@ namespace cryptonote
// no need to store queue of sorted transactions, as it's easy to generate. // no need to store queue of sorted transactions, as it's easy to generate.
for (const auto& tx : m_transactions) for (const auto& tx : m_transactions)
{ {
m_txs_by_fee_and_receive_time.emplace(std::pair<double, time_t>((double)tx.second.blob_size / tx.second.fee, tx.second.receive_time), tx.first); m_txs_by_fee_and_receive_time.emplace(std::pair<double, time_t>(tx.second.fee / (double)tx.second.blob_size, tx.second.receive_time), tx.first);
} }
// Ignore deserialization error // Ignore deserialization error