From 391e3940e5783c1abf3d118db152c61efa4b7ab0 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Mon, 15 May 2017 12:08:54 +0200 Subject: [PATCH] refactor fee computation, but keep ceil logic --- firmware/layout2.c | 3 +-- firmware/layout2.h | 2 +- firmware/signing.c | 6 +++--- firmware/transaction.c | 5 ----- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/firmware/layout2.c b/firmware/layout2.c index 0a8e665231..94f0eb5268 100644 --- a/firmware/layout2.c +++ b/firmware/layout2.c @@ -153,9 +153,8 @@ void layoutConfirmTx(const CoinType *coin, uint64_t amount_out, uint64_t amount_ ); } -void layoutFeeOverThreshold(const CoinType *coin, uint64_t fee, uint32_t kb) +void layoutFeeOverThreshold(const CoinType *coin, uint64_t fee) { - (void)kb; const char *str_out = str_amount(fee, coin->has_coin_shortcut ? coin->coin_shortcut : NULL, buf_out, sizeof(buf_out)); layoutDialogSwipe(&bmp_icon_question, "Cancel", diff --git a/firmware/layout2.h b/firmware/layout2.h index 458fa55fda..2ed72614e7 100644 --- a/firmware/layout2.h +++ b/firmware/layout2.h @@ -33,7 +33,7 @@ void layoutScreensaver(void); void layoutHome(void); void layoutConfirmOutput(const CoinType *coin, const TxOutputType *out); void layoutConfirmTx(const CoinType *coin, uint64_t amount_out, uint64_t amount_fee); -void layoutFeeOverThreshold(const CoinType *coin, uint64_t fee, uint32_t kb); +void layoutFeeOverThreshold(const CoinType *coin, uint64_t fee); void layoutSignMessage(const uint8_t *msg, uint32_t len); void layoutVerifyAddress(const char *address); void layoutVerifyMessage(const uint8_t *msg, uint32_t len); diff --git a/firmware/signing.c b/firmware/signing.c index e6f29369c0..0d2b705251 100644 --- a/firmware/signing.c +++ b/firmware/signing.c @@ -566,9 +566,9 @@ static bool signing_check_fee(void) { return false; } uint64_t fee = to_spend - spending; - uint32_t tx_est_size = transactionEstimateSizeKb(inputs_count, outputs_count); - if (fee > (uint64_t)tx_est_size * coin->maxfee_kb) { - layoutFeeOverThreshold(coin, fee, tx_est_size); + uint64_t tx_est_size_kb = (transactionEstimateSize(inputs_count, outputs_count) + 999) / 1000; + if (fee > tx_est_size_kb * coin->maxfee_kb) { + layoutFeeOverThreshold(coin, fee); if (!protectButton(ButtonRequestType_ButtonRequest_FeeOverThreshold, false)) { fsm_sendFailure(FailureType_Failure_ActionCancelled, "Fee over threshold. Signing cancelled."); signing_abort(); diff --git a/firmware/transaction.c b/firmware/transaction.c index 27cfb72309..70954e0f3c 100644 --- a/firmware/transaction.c +++ b/firmware/transaction.c @@ -570,8 +570,3 @@ uint32_t transactionEstimateSize(uint32_t inputs, uint32_t outputs) { return 10 + inputs * 149 + outputs * 35; } - -uint32_t transactionEstimateSizeKb(uint32_t inputs, uint32_t outputs) -{ - return (transactionEstimateSize(inputs, outputs) + 999) / 1000; -}