diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h
index 493546b4b827bde9e25aaf46b75b91f205db08e6..aec24b4a3e1f1fd4e911ee93ef055461ae0af2c0 100644
--- a/modules/chain/include/dap_chain.h
+++ b/modules/chain/include/dap_chain.h
@@ -166,7 +166,7 @@ typedef struct dap_chain {
     dap_chain_callback_atom_iter_find_by_hash_t callback_atom_find_by_hash;
     dap_chain_callback_tx_find_by_hash_t callback_tx_find_by_hash;
 
-    dap_chain_callback_block_find_by_hash_t callback_block_find_by_hash;
+    dap_chain_callback_block_find_by_hash_t callback_block_find_by_tx_hash;
 
     dap_chain_callback_atom_iter_get_next_t callback_atom_iter_get_next;
     dap_chain_callback_atom_iter_get_atoms_t callback_atom_iter_get_links;
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 1621200a9cfcc8ecea6d0f02a586065a3f4d3f86..b5f18c03407927822a5aa372e09e2ae32d5d9c07 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -31,7 +31,7 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
                                 dap_chain_hash_fast_t *a_data_hash, uint8_t *a_data, size_t a_data_size);
 static void s_session_round_clear(dap_chain_esbocs_session_t *a_session);
 static void s_session_round_new(dap_chain_esbocs_session_t *a_session);
-static void s_session_candidate_to_chain(
+static bool s_session_candidate_to_chain(
             dap_chain_esbocs_session_t *a_session, dap_chain_hash_fast_t *a_candidate_hash,
                             dap_chain_block_t *a_candidate, size_t a_candidate_size);
 static void s_session_candidate_submit(dap_chain_esbocs_session_t *a_session);
@@ -77,6 +77,8 @@ static dap_timerfd_t *s_session_cs_timer = NULL;
 typedef struct dap_chain_esbocs_pvt {
     // Base params
     dap_enc_key_t *blocks_sign_key;
+    dap_hash_fast_t candidate_hash;
+    dap_chain_addr_t *fee_addr;
     // Validators section
     bool poa_mode;
     uint16_t min_validators_count;
@@ -88,7 +90,7 @@ typedef struct dap_chain_esbocs_pvt {
     uint16_t round_attempts_max;
     uint16_t round_attempt_timeout;
     // PoA section
-    dap_list_t *poa_validators;
+    dap_list_t *poa_validators;  
     uint256_t minimum_fee;
 } dap_chain_esbocs_pvt_t;
 
@@ -223,6 +225,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf
     dap_chain_esbocs_pvt_t *l_esbocs_pvt = PVT(l_esbocs);
 
     l_esbocs_pvt->minimum_fee = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "minimum_fee", "1.0"));
+    l_esbocs_pvt->fee_addr = dap_chain_addr_from_str(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "fee_addr", NULL));
 
     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) {
@@ -832,6 +835,8 @@ static void s_session_candidate_submit(dap_chain_esbocs_session_t *a_session)
     }
     s_message_send(a_session, DAP_STREAM_CH_VOTING_MSG_TYPE_SUBMIT, &l_candidate_hash,
                     l_candidate, l_candidate_size, a_session->cur_round.validators_list);
+    //Save candidate_hash
+    memcpy(&(PVT(a_session->esbocs)->candidate_hash), &l_candidate_hash, sizeof(dap_hash_fast_t));
 }
 
 static void s_session_candidate_verify(dap_chain_esbocs_session_t *a_session, dap_chain_block_t *a_candidate,
@@ -865,9 +870,10 @@ static void s_session_candidate_verify(dap_chain_esbocs_session_t *a_session, da
     a_session->processing_candidate = NULL;
 }
 
-static void s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, dap_chain_hash_fast_t *a_candidate_hash,
+static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, dap_chain_hash_fast_t *a_candidate_hash,
                                          dap_chain_block_t *a_candidate, size_t a_candidate_size)
 {
+    bool res = false;
     dap_chain_block_t *l_candidate = DAP_DUP_SIZE(a_candidate, a_candidate_size);
     dap_chain_atom_verify_res_t l_res = a_session->chain->callback_atom_add(a_session->chain, l_candidate, a_candidate_size);
     char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(a_candidate_hash);
@@ -877,7 +883,10 @@ static void s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session,
         if (dap_chain_atom_save(a_session->chain, (uint8_t *)l_candidate, a_candidate_size, a_session->chain->cells->id) < 0)
             log_it(L_ERROR, "ESBOCS: Can't save atom %s to the file", l_candidate_hash_str);
         else
+        {
             log_it(L_INFO, "ESBOCS: block %s added in chain successfully", l_candidate_hash_str);
+            res = true;
+        }
         break;
     case ATOM_MOVE_TO_THRESHOLD:
         log_it(L_INFO, "ESBOCS: Thresholded atom with hash %s", l_candidate_hash_str);
@@ -895,11 +904,17 @@ static void s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session,
          DAP_DELETE(l_candidate);
     }
     DAP_DELETE(l_candidate_hash_str);
+    return res;
 }
 
 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;
+    bool f_compare = false;
+    dap_chain_t *l_chain = a_session->chain;
+    dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(l_chain);
+    dap_chain_block_cache_t *l_block_cache = NULL;
+    dap_hash_fast_t l_precommit_candidate_hash = {0};
     uint16_t l_cs_level = PVT(a_session->esbocs)->min_validators_count;
 
     if (!dap_hash_fast_compare(&a_session->cur_round.attempt_candidate_hash, &l_store->candidate_hash)) {
@@ -950,7 +965,14 @@ static void s_session_round_finish(dap_chain_esbocs_session_t *a_session, dap_ch
         DAP_DELETE(l_finish_candidate_hash_str);
         DAP_DELETE(l_finish_block_hash_str);
     }
-    s_session_candidate_to_chain(a_session, &l_store->precommit_candidate_hash, l_store->candidate, l_store->candidate_size);
+
+    memcpy(&l_precommit_candidate_hash, &l_store->precommit_candidate_hash, sizeof(dap_hash_fast_t));
+    f_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)&&f_compare)
+   {
+        l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_precommit_candidate_hash);
+        dap_chain_mempool_tx_coll_fee_create(a_session->blocks_sign_key,(PVT(a_session->esbocs)->fee_addr),l_block_cache,PVT(a_session->esbocs)->minimum_fee,"hex");
+   }
 }
 
 void s_session_sync_queue_add(dap_chain_esbocs_session_t *a_session, dap_chain_esbocs_message_t *a_message, size_t a_message_size)
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index b1fe9b256f47663b6e264204b71a73846048e553..9b919d140689609d4b858fae59eaa42d36eaa093 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -625,8 +625,8 @@ static bool s_fee_verificator_callback(dap_ledger_t * a_ledger, dap_hash_fast_t
 
     l_chain = dap_chain_net_get_chain_by_chain_type(l_net, CHAIN_TYPE_CA );
 
-    //l_tx = l_chain->callback_tx_find_by_hash(l_chain, a_tx_out_hash);
-    l_block_cache = l_chain->callback_block_find_by_hash(l_chain,a_tx_out_hash);
+    //l_tx = l_chain->callback_tx_find_by_hash(l_chain, a_tx_out_hash);    
+    l_block_cache = l_chain->callback_block_find_by_tx_hash(l_chain,a_tx_out_hash);
     l_sign_block = dap_chain_block_sign_get(l_block_cache->block, l_block_cache->block_size, 0);
     //dap_chain_hash_fast_t l_pkey_hash;
     //dap_sign_get_pkey_hash(l_sign_block, &l_pkey_hash);
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 54c3b56ee43afe6b510a2c0f94d918a179647e3c..bc1684db1c372890dfbeaa15dced1c6db7d86994 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -221,7 +221,7 @@ int dap_chain_cs_blocks_new(dap_chain_t * a_chain, dap_config_t * a_chain_config
     a_chain->callback_atom_find_by_hash = s_callback_atom_iter_find_by_hash;
     a_chain->callback_tx_find_by_hash = s_callback_atom_iter_find_by_tx_hash;
 
-    a_chain->callback_block_find_by_hash = s_callback_block_find_by_tx_hash;
+    a_chain->callback_block_find_by_tx_hash = s_callback_block_find_by_tx_hash;
 
     a_chain->callback_add_datums = s_callback_add_datums;
     a_chain->callback_purge = s_callback_cs_blocks_purge;