diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h
index 8fbfd403e882c9a78dd8cc58848d385ce1770f62..264b68bb25cf30ce73c6a39d2b5d93d2cf58344b 100644
--- a/modules/chain/include/dap_chain.h
+++ b/modules/chain/include/dap_chain.h
@@ -99,6 +99,8 @@ typedef dap_list_t *(*dap_chain_callback_get_poa_certs)(dap_chain_t *a_chain, si
 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 enum dap_chain_type
 {
     CHAIN_TYPE_FIRST,
@@ -133,8 +135,6 @@ typedef struct dap_chain {
     uint16_t autoproc_datum_types_count;
     uint16_t *autoproc_datum_types;
 
-    uint256_t minimum_commission;
-
     // To hold it in double-linked lists
     struct dap_chain * next;
     struct dap_chain * prev;
@@ -177,6 +177,8 @@ 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_list_t * atom_notifiers;
 //    dap_chain_callback_notify_t callback_notify;
 //    void *callback_notify_arg;
diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c
index dbf6de247a3dbd7cf70b399f7de01069b55272ab..7225f047fd46fa337df49c55c0a8187951f60292 100644
--- a/modules/common/dap_chain_datum_tx.c
+++ b/modules/common/dap_chain_datum_tx.c
@@ -158,6 +158,21 @@ int dap_chain_datum_tx_add_fee_item(dap_chain_datum_tx_t **a_tx, uint256_t a_val
     return -1;
 }
 
+int dap_chain_datum_tx_get_fee_value (dap_chain_datum_tx_t *a_tx, uint256_t *a_value)
+{
+    dap_list_t *l_items_list = dap_chain_datum_tx_items_get(a_tx, TX_ITEM_TYPE_OUT_COND, NULL);
+
+    for(dap_list_t *l_item=l_items_list; l_item; l_item=l_item->next){
+        dap_chain_tx_out_cond_t *l_out_item = (dap_chain_tx_out_cond_t*)l_item->data;
+        if (l_out_item->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE){
+            *a_value = l_out_item->header.value;
+            return 0;
+        }
+    }
+
+    return -1;
+}
+
 /**
  * Create 'out' item and insert to transaction
  *
diff --git a/modules/common/include/dap_chain_datum_tx.h b/modules/common/include/dap_chain_datum_tx.h
index 4bf630486508a9984afa6d9bc99e611edd97e4a0..96290f8d01bba0dfebf15800a5f4d4a6a79e724c 100644
--- a/modules/common/include/dap_chain_datum_tx.h
+++ b/modules/common/include/dap_chain_datum_tx.h
@@ -137,3 +137,5 @@ int dap_chain_datum_tx_add_sign_item(dap_chain_datum_tx_t **a_tx, dap_enc_key_t
 int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *a_tx);
 
 json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx);
+
+int dap_chain_datum_tx_get_fee_value (dap_chain_datum_tx_t *a_tx, uint256_t *a_value);
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index fd554d7a15e31e8d9baeaa5efb1b0647a137cc3b..715c4868a06c8853c50a2ed558e2b8c6472c3bc2 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -51,6 +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 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);
@@ -88,6 +89,7 @@ typedef struct dap_chain_esbocs_pvt {
     uint16_t round_attempt_timeout;
     // PoA section
     dap_list_t *poa_validators;
+    uint256_t minimum_commission;
 } dap_chain_esbocs_pvt_t;
 
 #define PVT(a) ((dap_chain_esbocs_pvt_t *)a->_pvt)
@@ -128,12 +130,15 @@ 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;
+
     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);
     l_esbocs_pvt->round_start_sync_timeout = dap_config_get_item_uint16_default(a_chain_cfg, "esbocs", "round_start_sync_timeout", 15);
     l_esbocs_pvt->new_round_delay = dap_config_get_item_uint16_default(a_chain_cfg, "esbocs", "new_round_delay", 10);
     l_esbocs_pvt->round_attempts_max = dap_config_get_item_uint16_default(a_chain_cfg, "esbocs", "round_attempts_max", 4);
     l_esbocs_pvt->round_attempt_timeout = dap_config_get_item_uint16_default(a_chain_cfg, "esbocs", "round_attempt_timeout", 10);
+    l_esbocs_pvt->minimum_commission = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_cfg, "esbocs", "minimum_commission", "1.0"));
 
     int l_ret = 0;
     l_esbocs_pvt->min_validators_count = dap_config_get_item_uint16(a_chain_cfg, "esbocs", "min_validators_count");
@@ -277,6 +282,18 @@ 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)
+{
+    dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain);
+    dap_chain_esbocs_t *l_esbocs = DAP_CHAIN_ESBOCS(l_blocks);
+    dap_chain_esbocs_pvt_t *l_esbocs_pvt = PVT(l_esbocs);
+
+    if (compare256(l_fee, l_esbocs_pvt->minimum_commission) < 0)
+        return false;
+
+    return true;
+}
+
 static void s_callback_delete(dap_chain_cs_blocks_t *a_blocks)
 {
     dap_chain_esbocs_t *l_esbocs = DAP_CHAIN_ESBOCS(a_blocks);
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 024ef53ba54004773e4ab791b622fc6e80ddca39..9ee41eed88fb9f663ec5cb7f117eaa2fa6a1bd89 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2532,8 +2532,7 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
                 l_chain = dap_chain_load_from_cfg(l_net->pub.ledger, l_net->pub.name,
                                                   l_net->pub.id, l_chain_prior->chains_path);
 
-                if(l_chain) {//add minimum commission from to which the master node agrees. if present (default = 1.0)
-                    l_chain->minimum_commission = dap_chain_coins_to_balance(dap_config_get_item_str_default(l_cfg , "general" ,"minimum_commission","1.0"));
+                if(l_chain) {
                     DL_APPEND(l_net->pub.chains, l_chain);
 
                     // add a callback to monitor changes in the chain
diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index d7cd6b9be46face7dd15e6cef9b3643e673c2bae..48f9ae685afd1e06c949a69d61d943713ab7a560 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -240,6 +240,23 @@ void dap_chain_node_mempool_process_all(dap_chain_t *a_chain, bool a_force)
                 continue;
             dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value;
             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){
+                    uint256_t 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");
+                        continue;
+                    }
+                }
+
                 if (dap_chain_node_mempool_process(a_chain, l_datum)) {
                     // Delete processed objects
                     dap_global_db_del(l_gdb_group_mempool, l_objs[i].key, NULL, NULL);
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index 000cfb73c1ab10ac299de607368e026a4a3718f5..2b455b996337a5d2afae0b48a122a354a913348c 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -242,7 +242,8 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
             "mempool_check -net <net_name> -datum <datum hash>\n");
 
     dap_cli_server_cmd_add ("mempool_proc", com_mempool_proc, "Proc mempool entrie with specified hash for selected chain network",
-            "mempool_proc -net <net_name> -datum <datum hash>\n");
+            "mempool_proc -net <net_name> -datum <datum hash>\n"
+            "CAUTION!!! This command will process transaction with any comission! Parameter minimum_comission will not be taken into account!");
 
     dap_cli_server_cmd_add ("mempool_proc_all", com_mempool_proc_all, "Proc mempool all entries for selected chain network",
                             "mempool_proc_all -net <net_name> -chain <chain_name>\n");