From 0c68910229c7acc025d1c5fad8a8f7c7a0bd0bd0 Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Mon, 27 Mar 2023 12:51:44 +0300
Subject: [PATCH] [*] Extended debug output for tx fee filter

---
 modules/chain/include/dap_chain.h              |  4 ++--
 modules/consensus/esbocs/dap_chain_cs_esbocs.c |  6 +++---
 modules/net/dap_chain_node.c                   | 15 ++++++++-------
 3 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h
index 4f9e8c8a96..eb4085c824 100644
--- a/modules/chain/include/dap_chain.h
+++ b/modules/chain/include/dap_chain.h
@@ -100,7 +100,7 @@ typedef dap_list_t *(*dap_chain_callback_get_list)(dap_chain_t *a_chain, size_t
 typedef dap_list_t *(*dap_chain_callback_get_poa_certs)(dap_chain_t *a_chain, size_t *a_auth_certs_count, uint16_t *count_verify);
 typedef void (*dap_chain_callback_set_min_validators_count)(dap_chain_t *a_chain,  uint16_t a_new_value);
 
-typedef bool (*dap_chain_callback_check_tx_fee)(dap_chain_t *a_chain,  uint256_t fee_value);
+typedef uint256_t (*dap_chain_callback_get_minimum_fee)(dap_chain_t *a_chain);
 
 typedef void (*dap_chain_callback_load_from_gdb)(dap_chain_t *a_chain);
 
@@ -182,7 +182,7 @@ typedef struct dap_chain {
     dap_chain_callback_get_poa_certs callback_get_poa_certs;
     dap_chain_callback_set_min_validators_count callback_set_min_validators_count;
 
-    dap_chain_callback_check_tx_fee callback_check_tx_fee;
+    dap_chain_callback_get_minimum_fee callback_get_minimum_fee;
 
     dap_chain_callback_load_from_gdb callback_load_from_gdb;
 
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 8e7bc7eada..7569d575a7 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -51,7 +51,7 @@ static void s_callback_delete(dap_chain_cs_blocks_t *a_blocks);
 static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cfg);
 static size_t s_callback_block_sign(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_t **a_block_ptr, size_t a_block_size);
 static int s_callback_block_verify(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_t *a_block, size_t a_block_size);
-static bool s_callback_check_tx_fee(dap_chain_t *a_chain, uint256_t l_fee);
+static bool s_callback_get_minimum_fee(dap_chain_t *a_chain, uint256_t l_fee);
 static void s_callback_set_min_validators_count(dap_chain_t *a_chain, uint16_t a_new_value);
 
 static int s_cli_esbocs(int argc, char ** argv, char **str_reply);
@@ -132,7 +132,7 @@ static int s_callback_new(dap_chain_t *a_chain, dap_config_t *a_chain_cfg)
     l_esbocs->_pvt = DAP_NEW_Z(dap_chain_esbocs_pvt_t);
     dap_chain_esbocs_pvt_t *l_esbocs_pvt = PVT(l_esbocs);
 
-    a_chain->callback_check_tx_fee = s_callback_check_tx_fee;
+    a_chain->callback_get_minimum_fee = s_callback_get_minimum_fee;
 
     l_esbocs_pvt->debug = dap_config_get_item_bool_default(a_chain_cfg, "esbocs", "consensus_debug", false);
     l_esbocs_pvt->poa_mode = dap_config_get_item_bool_default(a_chain_cfg, "esbocs", "poa_mode", false);
@@ -287,7 +287,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf
     return 0;
 }
 
-static bool s_callback_check_tx_fee(dap_chain_t *a_chain, uint256_t l_fee)
+static bool s_callback_get_minimum_fee(dap_chain_t *a_chain, uint256_t l_fee)
 {
     dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
     dap_chain_esbocs_t *l_esbocs = DAP_CHAIN_ESBOCS(l_blocks);
diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index 1d14b36706..c87f581212 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -242,17 +242,18 @@ void dap_chain_node_mempool_process_all(dap_chain_t *a_chain, bool a_force)
             if (dap_chain_node_mempool_need_process(a_chain, l_datum)) {
 
                 if (l_datum->header.type_id == DAP_CHAIN_DATUM_TX &&
-                        a_chain->callback_check_tx_fee){
+                        a_chain->callback_get_minimum_fee){
                     uint256_t l_tx_fee = {};
-
-                    if (dap_chain_datum_tx_get_fee_value ((dap_chain_datum_tx_t*)l_datum->data, &l_tx_fee))
-                    {
+                    if (dap_chain_datum_tx_get_fee_value ((dap_chain_datum_tx_t*)l_datum->data, &l_tx_fee)) {
                         log_it(L_WARNING, "Can't get fee value from tx");
                         continue;
                     }
-
-                    if(!a_chain->callback_check_tx_fee(a_chain, l_tx_fee)){
-                        log_it(L_WARNING, "Fee is lower than minimum fee value");
+                    uint256_t l_min_fee = a_chain->callback_get_minimum_fee(a_chain);
+                    if (compare256(l_tx_fee, l_min_fee) < 0) {
+                        char *l_tx_fee_str = dap_chain_balance_to_coins(l_tx_fee);
+                        char *l_min_fee_str = dap_chain_balance_to_coins(l_min_fee);
+                        log_it(L_WARNING, "Fee %s is lower than minimum fee %s for tx %s",
+                               l_tx_fee_str, l_min_fee_str, l_objs[i].key);
                         continue;
                     }
                 }
-- 
GitLab