aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-03-03 23:31:38 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-03-03 23:31:56 +0000
commit3153349325361909798926852a1c756c48656430 (patch)
tree16fced9db280bdd1c8ac21ecba3f59ae88700ff2 /src
parentMerge pull request #1832 (diff)
downloadmonero-3153349325361909798926852a1c756c48656430.tar.xz
core: quantize per kB fee to 8 decimals
Diffstat (limited to 'src')
-rw-r--r--src/cryptonote_config.h1
-rw-r--r--src/cryptonote_core/blockchain.cpp20
2 files changed, 20 insertions, 1 deletions
diff --git a/src/cryptonote_config.h b/src/cryptonote_config.h
index 1bc7c6269..d1036a1de 100644
--- a/src/cryptonote_config.h
+++ b/src/cryptonote_config.h
@@ -128,6 +128,7 @@
#define THREAD_STACK_SIZE 5 * 1024 * 1024
#define HF_VERSION_DYNAMIC_FEE 4
+#define PER_KB_FEE_QUANTIZATION_DECIMALS 8
// New constants are intended to go here
namespace config
diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp
index a65af3317..f49050918 100644
--- a/src/cryptonote_core/blockchain.cpp
+++ b/src/cryptonote_core/blockchain.cpp
@@ -2796,6 +2796,19 @@ void Blockchain::check_ring_signature(const crypto::hash &tx_prefix_hash, const
}
//------------------------------------------------------------------
+static uint64_t get_fee_quantization_mask()
+{
+ static uint64_t mask = 0;
+ if (mask == 0)
+ {
+ mask = 1;
+ for (size_t n = PER_KB_FEE_QUANTIZATION_DECIMALS; n < CRYPTONOTE_DISPLAY_DECIMAL_POINT; ++n)
+ mask *= 10;
+ }
+ return mask;
+}
+
+//------------------------------------------------------------------
uint64_t Blockchain::get_dynamic_per_kb_fee(uint64_t block_reward, size_t median_block_size)
{
if (median_block_size < CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V2)
@@ -2810,7 +2823,12 @@ uint64_t Blockchain::get_dynamic_per_kb_fee(uint64_t block_reward, size_t median
div128_32(hi, lo, 1000000, &hi, &lo);
assert(hi == 0);
- return lo;
+ // quantize fee up to 8 decimals
+ uint64_t mask = get_fee_quantization_mask();
+ uint64_t qlo = (lo + mask - 1) / mask * mask;
+ MDEBUG("lo " << print_money(lo) << ", qlo " << print_money(qlo) << ", mask " << mask);
+
+ return qlo;
}
//------------------------------------------------------------------