diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index b44bad7c8d3b749ee33e74a6f76bb4f382171a3b..4dc559894592499095395a00abec215e4734c9a6 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -2860,7 +2860,7 @@ static bool s_ledger_tx_hash_is_used_out_item(dap_chain_ledger_tx_item_t *a_item
 {
     if (!a_item || !a_item->cache_data.n_outs) {
         //log_it(L_DEBUG, "list_cached_item is NULL");
-        return false;
+        return true;
     }
     if(a_idx_out >= MAX_OUT_ITEMS) {
         if(s_debug_more)
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index e94453c57f6f4998ac942e2ef726fc1a16392ecf..b4808129cc9cff13fb0014cb87e4f8df9dfdad59 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -16,6 +16,7 @@
 #include "dap_chain_node_cli_cmd.h"
 
 #define LOG_TAG "dap_chain_cs_esbocs"
+const char* block_fee_group = "local.fee-collect-block-hashes";
 
 enum s_esbocs_session_state {
     DAP_CHAIN_ESBOCS_SESSION_STATE_WAIT_START,
@@ -95,6 +96,7 @@ typedef struct dap_chain_esbocs_pvt {
     // PoA section
     dap_list_t *poa_validators;  
     uint256_t minimum_fee;
+    uint256_t fee_coll_set;
 } dap_chain_esbocs_pvt_t;
 
 #define PVT(a) ((dap_chain_esbocs_pvt_t *)a->_pvt)
@@ -231,6 +233,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf
 
     l_esbocs_pvt->minimum_fee = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "minimum_fee", "0.05"));
     l_esbocs_pvt->fee_addr = dap_chain_addr_from_str(dap_config_get_item_str(a_chain_net_cfg, "esbocs", "fee_addr"));
+    l_esbocs_pvt->fee_coll_set = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "set_collect_fee", "10.05"));
 
     const char *l_sign_cert_str = NULL;
     if ((l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "esbocs", "blocks-sign-cert")) != NULL) {
@@ -1018,6 +1021,95 @@ static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session,
     return res;
 }
 
+typedef struct fee_serv_param
+{
+    dap_hash_fast_t block_hash;
+    dap_enc_key_t * key_from;
+    dap_chain_addr_t * a_addr_to;
+    uint256_t fee_need_cfg;
+    uint256_t value_fee;
+    dap_chain_t * chain;
+}fee_serv_param_t;
+
+static void s_check_db_callback_fee_collect (dap_global_db_context_t *a_global_db_context,
+                                             int a_rc, const char *a_group,
+                                             const size_t a_values_total, const size_t a_values_count,
+                                             dap_global_db_obj_t *a_values, void *a_arg)
+{
+    int res = 0;
+    uint256_t l_value_out_block = {};
+    uint256_t l_value_total = {};
+    uint256_t l_value_gdb = {};
+    fee_serv_param_t *l_arg = (fee_serv_param_t*)a_arg;
+
+    dap_chain_t *l_chain = l_arg->chain;
+    dap_chain_block_cache_t *l_block_cache = NULL;
+    dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(l_chain);
+    dap_list_t *l_block_list = NULL;
+    l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_arg->block_hash);
+    dap_list_t *l_list_used_out = dap_chain_block_get_list_tx_cond_outs_with_val(l_chain->ledger,l_block_cache,&l_value_out_block);
+    if(!l_list_used_out)
+    {
+        log_it(L_WARNING, "There aren't any fee in this block");
+        return;
+    }
+    dap_list_free_full(l_list_used_out, NULL);
+    l_block_list = dap_list_append(l_block_list, l_block_cache);
+    if(!a_values_count)
+    {
+        if(compare256(l_value_out_block,l_arg->fee_need_cfg) == 1)
+        {
+            dap_chain_mempool_tx_coll_fee_create(l_arg->key_from, l_arg->a_addr_to,
+                                                 l_block_list, l_arg->value_fee, "hex");
+            log_it(L_NOTICE, "Fee collect transaction successfully created");
+            dap_global_db_del(block_fee_group, NULL, NULL, NULL);
+        }
+        else
+        {
+            res = dap_global_db_set(block_fee_group,l_block_cache->block_hash_str,&l_value_out_block,sizeof(uint256_t),false,NULL,NULL);
+            if(res)
+                log_it(L_WARNING, "Unable to write data to database");
+            else
+                log_it(L_NOTICE, "The block was successfully added to the database");
+        }
+        dap_list_free_full(l_block_list, NULL);
+        DAP_DELETE(l_arg->a_addr_to);
+        DAP_DELETE(l_arg);
+        return;
+    }
+    else
+    {
+        for(size_t i=0;i<a_values_count;i++)
+        {
+            dap_hash_fast_t block_hash;
+            dap_chain_hash_fast_from_hex_str(a_values[i].key,&block_hash);
+            dap_chain_block_cache_t *block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &block_hash);
+            l_block_list = dap_list_append(l_block_list, block_cache);
+            SUM_256_256(*(uint256_t*)a_values[i].value,l_value_gdb,&l_value_gdb);
+        }
+        SUM_256_256(l_value_out_block,l_value_gdb,&l_value_total);
+        if(compare256(l_value_total,l_arg->fee_need_cfg) == 1)
+        {
+            dap_chain_mempool_tx_coll_fee_create(l_arg->key_from, l_arg->a_addr_to,
+                                                 l_block_list, l_arg->value_fee, "hex");
+            dap_global_db_del(block_fee_group, NULL, NULL, NULL);
+            log_it(L_NOTICE, "Fee collect transaction successfully created");
+        }
+        else
+        {
+            res = dap_global_db_set(block_fee_group,l_block_cache->block_hash_str,&l_value_out_block,sizeof(uint256_t),false,NULL,NULL);
+            if(res)
+                log_it(L_WARNING, "Unable to write data to database");
+            else
+                log_it(L_NOTICE, "The block was successfully added to the database");
+        }
+        dap_list_free_full(l_block_list, NULL);
+        DAP_DELETE(l_arg->a_addr_to);
+        DAP_DELETE(l_arg);
+        return;
+    }
+}
+
 static void s_session_round_finish(dap_chain_esbocs_session_t *a_session, dap_chain_esbocs_store_t *l_store)
 {
     bool l_cs_debug = PVT(a_session->esbocs)->debug;
@@ -1074,18 +1166,23 @@ static void s_session_round_finish(dap_chain_esbocs_session_t *a_session, dap_ch
                             a_session->cur_round.attempt_num, l_finish_candidate_hash_str, l_finish_block_hash_str);
         DAP_DELETE(l_finish_candidate_hash_str);
         DAP_DELETE(l_finish_block_hash_str);
-    }
-
+    }    
     memcpy(&l_precommit_candidate_hash, &l_store->precommit_candidate_hash, sizeof(dap_hash_fast_t));
     bool l_compare = dap_hash_fast_compare(&l_store->candidate_hash,&(PVT(a_session->esbocs)->candidate_hash));
     if(s_session_candidate_to_chain(a_session, &l_store->precommit_candidate_hash, l_store->candidate, l_store->candidate_size) &&
             l_compare && PVT(a_session->esbocs)->fee_addr) {
-        dap_list_t *l_block_list = NULL;
-        l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_precommit_candidate_hash);
-        l_block_list = dap_list_append(l_block_list, l_block_cache);
-        dap_chain_mempool_tx_coll_fee_create(a_session->blocks_sign_key, (PVT(a_session->esbocs)->fee_addr),
-                                             l_block_list, PVT(a_session->esbocs)->minimum_fee, "hex");
-        dap_list_free(l_block_list);
+
+        fee_serv_param_t *tmp = DAP_NEW(fee_serv_param_t);
+        dap_chain_addr_t * addr = DAP_NEW_Z(dap_chain_addr_t);
+        *addr = *PVT(a_session->esbocs)->fee_addr;
+        tmp->a_addr_to = addr;
+        tmp->block_hash = l_precommit_candidate_hash;
+        tmp->chain = l_chain;
+        tmp->value_fee = PVT(a_session->esbocs)->minimum_fee;
+        tmp->fee_need_cfg = PVT(a_session->esbocs)->fee_coll_set;
+        tmp->key_from = a_session->blocks_sign_key;
+
+        dap_global_db_get_all(block_fee_group,0,s_check_db_callback_fee_collect,tmp);
     }
 }
 
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index 90ad7a05a418c839de12a0b91cc6cd76a6d8da3a..55425201f6be8e8308368d232b9c13a095de5420 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -296,7 +296,7 @@ char *dap_chain_mempool_tx_coll_fee_create(dap_enc_key_t *a_key_from,const dap_c
     bool l_net_fee_used = dap_chain_net_tx_get_fee(l_chain->net_id, &l_net_fee, &l_addr_fee);
     //add tx
     if (NULL == (l_tx = dap_chain_datum_tx_create())) {
-
+        log_it(L_WARNING, "Can't create datum tx");
         return NULL;
     }
 
@@ -323,6 +323,7 @@ char *dap_chain_mempool_tx_coll_fee_create(dap_enc_key_t *a_key_from,const dap_c
             if (dap_chain_datum_tx_add_out_item(&l_tx, &l_addr_fee, l_net_fee) == 1)
                 SUM_256_256(l_value_pack, l_net_fee, &l_value_pack);
             else {
+                log_it(L_WARNING, "Can't create net_fee out item in transaction fee");
                 dap_chain_datum_tx_delete(l_tx);
                 return NULL;
             }
@@ -332,6 +333,7 @@ char *dap_chain_mempool_tx_coll_fee_create(dap_enc_key_t *a_key_from,const dap_c
             if (dap_chain_datum_tx_add_fee_item(&l_tx, a_value_fee) == 1)
                 SUM_256_256(l_value_pack, a_value_fee, &l_value_pack);
             else {
+                log_it(L_WARNING, "Can't create valid_fee item in transaction fee");
                 dap_chain_datum_tx_delete(l_tx);
                 return NULL;
             }
@@ -349,12 +351,14 @@ char *dap_chain_mempool_tx_coll_fee_create(dap_enc_key_t *a_key_from,const dap_c
     //add 'out' items
     if (dap_chain_datum_tx_add_out_item(&l_tx, a_addr_to, l_value_out) != 1) {
         dap_chain_datum_tx_delete(l_tx);
+        log_it(L_WARNING, "Can't create out item in transaction fee");
         return NULL;
     }
 
     // add 'sign' items
     if(dap_chain_datum_tx_add_sign_item(&l_tx, a_key_from) != 1) {
         dap_chain_datum_tx_delete(l_tx);
+        log_it(L_WARNING, "Can't sign item in transaction fee");
         return NULL;
     }
 
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 3e257fa427150b5c30e5e2cf6b96ff56698c540d..c4d64d435478b6f332ecedb575b75a4bf788901d 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -64,6 +64,7 @@ typedef struct dap_chain_tx_hash_processed_ht{
     UT_hash_handle hh;
 }dap_chain_tx_hash_processed_ht_t;
 
+
 /**
  * @brief s_chain_tx_hash_processed_ht_free
  * free l_current_hash->hash, l_current_hash, l_hash_processed
@@ -587,7 +588,6 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger
     return l_ret_str;
 }
 
-
 /**
  * @brief com_ledger
  * ledger command
@@ -605,7 +605,7 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply)
     const char *l_wallet_name = NULL;
     const char *l_net_str = NULL;
     const char *l_chain_str = NULL;
-    const char *l_tx_hash_str = NULL;
+    const char *l_tx_hash_str = NULL;    
 
     dap_chain_t * l_chain = NULL;
     dap_chain_net_t * l_net = NULL;
diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
index a83b0b5c9e2cdf34419d2e838573a0a63ebc5d58..cbadc37d6399235933a9ea50dff6ebe713290c5a 100644
--- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
@@ -1147,7 +1147,7 @@ static int callback_compare_tx_list(const void * a_datum1, const void * a_datum2
 static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
 {
     enum {
-        CMD_NONE, CMD_ORDER, CMD_DELEGATE, CMD_APPROVE, CMD_LIST, CMD_INVALIDATE, CMD_MIN_VALUE
+        CMD_NONE, CMD_ORDER, CMD_DELEGATE, CMD_APPROVE, CMD_LIST, CMD_INVALIDATE, CMD_MIN_VALUE,CMD_test
     };
     int l_arg_index = 1;
 
@@ -1184,10 +1184,15 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
         l_cmd_num = CMD_MIN_VALUE;
     }
     else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "test_com", NULL)) {
-        //l_cmd_num = CMD_test;
+        l_cmd_num = CMD_test;
     }
 
     switch (l_cmd_num) {
+        case CMD_test:
+        {           
+
+        }
+        break;
         case CMD_ORDER:
             return s_cli_srv_stake_order(a_argc, a_argv, l_arg_index + 1, a_str_reply, l_hash_out_type);
         case CMD_DELEGATE: {
diff --git a/modules/type/blocks/dap_chain_block_cache.c b/modules/type/blocks/dap_chain_block_cache.c
index 05fac01756cbbfcd384095bc066372cfa234af4c..943863111de6a8f5742d030a7e06b6f620ae17fb 100644
--- a/modules/type/blocks/dap_chain_block_cache.c
+++ b/modules/type/blocks/dap_chain_block_cache.c
@@ -196,9 +196,8 @@ dap_list_t * dap_chain_block_get_list_tx_cond_outs_with_val(dap_ledger_t *a_ledg
             dap_list_free_full(l_list_used_out, NULL);
             return NULL;
         }
-
-        // Check whether used 'out' items
-        if (!dap_chain_ledger_tx_hash_is_used_out_item (a_ledger, &(l_tx_cur->tx_hash), l_out_idx_tmp)) {
+        //Check whether used 'out' items
+        if (!dap_chain_ledger_tx_hash_is_used_out_item (a_ledger, &l_tx_cur->tx_hash, l_out_idx_tmp)) {
             list_used_item_t *l_item = DAP_NEW_Z(list_used_item_t);
             l_item->tx_hash_fast = l_tx_cur->tx_hash;
             l_item->num_idx_out = l_out_idx_tmp;