diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index bc34daaae30397b78a843ee489214194bf374ae9..5f6c1041c0b63c7730c215de7bda073504af0221 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -428,7 +428,7 @@ void s_update_token_cache(dap_ledger_t *a_ledger, dap_chain_ledger_token_item_t
     uint8_t *l_cache = DAP_NEW_STACK_SIZE(uint8_t, l_cache_size);
     memcpy(l_cache, &l_token_item->current_supply, sizeof(uint256_t));
     memcpy(l_cache + sizeof(uint256_t), l_token_item->datum_token, l_token_item->datum_token_size);
-    if (!dap_chain_global_db_gr_set(l_token_item->ticker, l_cache, l_cache_size, l_gdb_group))
+    if ( dap_global_db_set(l_gdb_group, l_token_item->ticker, l_cache, l_cache_size, false, NULL, NULL ) )
         debug_if(s_debug_more, L_WARNING, "Ledger cache mismatch");
     DAP_DELETE(l_gdb_group);
 }
@@ -1743,7 +1743,7 @@ int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_
             size_t l_cache_size = a_token_emission_size + sizeof(dap_hash_fast_t);
             uint8_t *l_cache = DAP_NEW_Z_SIZE(uint8_t, l_cache_size);
             memcpy(l_cache + sizeof(dap_hash_fast_t), a_token_emission, a_token_emission_size);
-            if (!dap_chain_global_db_gr_set(l_hash_str, l_cache, l_cache_size, l_gdb_group)) {
+            if ( dap_global_db_set(l_gdb_group, l_hash_str, l_cache, l_cache_size, false, NULL, NULL ) ) {
                 log_it(L_WARNING, "Ledger cache mismatch");
             }
             DAP_DELETE(l_cache);
@@ -2705,11 +2705,17 @@ int dap_chain_ledger_tx_add_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *
     return 0;
 }
 
+/**
+ * @brief s_balance_cache_update
+ * @param a_ledger
+ * @param a_balance
+ * @return
+ */
 static int s_balance_cache_update(dap_ledger_t *a_ledger, dap_ledger_wallet_balance_t *a_balance)
 {
     char *l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_BALANCES_STR);
 
-    if (!dap_chain_global_db_gr_set(a_balance->key, &a_balance->balance, sizeof(uint256_t), l_gdb_group)) {
+    if ( dap_global_db_set(l_gdb_group, a_balance->key, &a_balance->balance, sizeof(uint256_t), false, NULL, NULL) ) {
         if(s_debug_more)
             log_it(L_WARNING, "Ledger cache mismatch");
         return -1;
@@ -2840,7 +2846,7 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx,
                 uint8_t *l_cache = DAP_NEW_Z_SIZE(uint8_t, l_cache_size);
                 memcpy(l_cache, a_tx_hash, sizeof(dap_hash_fast_t));
                 memcpy(l_cache + sizeof(dap_hash_fast_t), bound_item->item_emission->datum_token_emission, l_emission_size);
-                if (!dap_chain_global_db_gr_set(l_hash_str, l_cache, l_cache_size, l_ems_group)) {
+                if ( dap_global_db_set(l_ems_group, l_hash_str, l_cache, l_cache_size, false, NULL, NULL) ) {
                     log_it(L_WARNING, "Ledger cache mismatch");
                 }
                 DAP_DELETE(l_hash_str);
@@ -3229,7 +3235,7 @@ int dap_chain_ledger_tx_remove(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_
             // Add it to cache
             l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_SPENT_TXS_STR);
             char *l_tx_hash_str = dap_hash_fast_to_str_new(a_tx_hash);
-            if (!dap_chain_global_db_gr_set(l_tx_hash_str, l_item_used->token_ticker, -1, l_gdb_group)) {
+            if ( dap_global_db_set(l_gdb_group, l_tx_hash_str, l_item_used->token_ticker, -1, false, NULL, NULL)) {
                 if(s_debug_more)
                     log_it(L_WARNING, "Ledger cache mismatch");
             }
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index 5226cf24a22d244176cfca7fce97a817bd020059..7c2607119868795110d2999d8d7bac1ce6e99b50 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -543,7 +543,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch , void* a_arg)
                 dap_hash_fast(l_receipt,l_receipt_size,&l_receipt_hash);
 
                 char *l_receipt_hash_str = dap_chain_hash_fast_to_str_new(&l_receipt_hash);
-                dap_chain_global_db_gr_set(l_receipt_hash_str, l_receipt, l_receipt_size, "local.receipts");
+                dap_global_db_set("local.receipts", l_receipt_hash_str, l_receipt, l_receipt_size, false, NULL, NULL);
                 DAP_DELETE(l_receipt_hash_str);
 
                 size_t l_success_size;
diff --git a/modules/consensus/block-ton/dap_chain_cs_block_ton.c b/modules/consensus/block-ton/dap_chain_cs_block_ton.c
index b49ac4abb0952e8c7acc926889f885fc40c5e2dc..663a81cd29da539ff880a8cc0385b9dc309de052 100644
--- a/modules/consensus/block-ton/dap_chain_cs_block_ton.c
+++ b/modules/consensus/block-ton/dap_chain_cs_block_ton.c
@@ -1700,8 +1700,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
 			memcpy( &l_store->candidate_n_signs, l_candidate, l_candidate_size);
 
 			// save new block candidate
-			if (dap_chain_global_db_gr_set(dap_strdup(l_candidate_hash_str), l_store,
-													l_store_size, l_session->gdb_group_store) ) {
+            if (dap_global_db_set(l_session->gdb_group_store, l_candidate_hash_str, l_store,
+                                                    l_store_size, true, NULL, NULL) == 0) {
 				l_session->cur_round.candidates_count++;
 				dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(l_session->chain);
 				if ( !s_session_atom_validation(l_blocks, l_candidate, l_candidate_size) ) {
@@ -1842,8 +1842,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
 							if (PVT(l_session->ton)->debug)
 								log_it(L_MSG, "TON: APPROVE: candidate found in store:%s & !approve_collected", l_candidate_hash_str);
 							l_store->hdr.approve_collected = true;
-							if (dap_chain_global_db_gr_set(dap_strdup(l_candidate_hash_str), l_store,
-                                                                l_store_size, l_session->gdb_group_store) ) {
+                            if (dap_global_db_set(l_session->gdb_group_store,l_candidate_hash_str,
+                                                           l_store,l_store_size, true, NULL, NULL) == 0 ) {
 								if (PVT(l_session->ton)->debug)
 									log_it(L_MSG, "TON: APPROVE: candidate update:%s approve_collected=true", l_candidate_hash_str);
                             } else
@@ -1962,8 +1962,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
 												l_candidate_hash_str, &l_store_size, l_session->gdb_group_store);
 				if (l_store) {
 					l_store->hdr.vote_collected = true;
-					if (dap_chain_global_db_gr_set(dap_strdup(l_candidate_hash_str), l_store,
-														l_store_size, l_session->gdb_group_store) ) {
+                    if (dap_global_db_set(l_session->gdb_group_store, l_candidate_hash_str,
+                                          l_store,	l_store_size, true, NULL,NULL ) == 0 ) {
 		                // Send PreCommit
 						dap_chain_cs_block_ton_message_precommit_t *l_precommit =
 													DAP_NEW_Z(dap_chain_cs_block_ton_message_precommit_t);
@@ -2027,8 +2027,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
 					if (PVT(l_session->ton)->blocks_sign_key) {
 						l_store->hdr.precommit_collected = true;
 
-						if (dap_chain_global_db_gr_set(dap_strdup(l_candidate_hash_str), l_store,
-															l_store_size, l_session->gdb_group_store) ) {
+                        if (dap_global_db_set(l_session->gdb_group_store,l_candidate_hash_str, l_store,
+                                              l_store_size, true, NULL, NULL) == 0 ) {
 							size_t l_candidate_size = l_store->hdr.candidate_size;
 							dap_chain_block_t *l_candidate = 
 									(dap_chain_block_t *)DAP_DUP_SIZE(&l_store->candidate_n_signs, l_candidate_size);
@@ -2111,8 +2111,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
 												l_candidate, l_offset+sizeof(l_candidate->hdr))) == 1 ) {
 					l_message->hdr.is_verified = true;
 					l_store->hdr.sign_collected = true;
-					if (dap_chain_global_db_gr_set(dap_strdup(l_candidate_hash_str), l_store,
-									l_store_size, l_session->gdb_group_store) ) {
+                    if (dap_global_db_set(l_session->gdb_group_store, l_candidate_hash_str, l_store,
+                                    l_store_size, true, NULL, NULL) == 0 ) {
 						uint16_t l_commitsign_count = s_session_message_count(
 							l_session, DAP_TON$ROUND_CUR, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_COMMIT_SIGN,
 										l_candidate_hash, NULL);
diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c
index d7bb7334f2185ce749154f44a6f26740f14a9b05..2576aba9bae2027c97f00cedda8df2b6747fb01d 100644
--- a/modules/consensus/none/dap_chain_cs_none.c
+++ b/modules/consensus/none/dap_chain_cs_none.c
@@ -413,7 +413,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha
     dap_hash_fast(l_datum->data,l_datum->header.data_size,&l_hash_item->datum_data_hash );
     dap_chain_hash_fast_to_str(&l_hash_item->datum_data_hash,l_hash_item->key,sizeof(l_hash_item->key)-1);
     if (!l_gdb_priv->is_load_mode) {
-	dap_chain_global_db_gr_set(l_hash_item->key, l_datum, l_datum_size, l_gdb_priv->group_datums);
+        dap_global_db_set(l_gdb_priv->group_datums, l_hash_item->key, l_datum, l_datum_size, false, NULL, NULL);
     } else
         log_it(L_DEBUG,"Load mode, doesn't save item %s:%s", l_hash_item->key, l_gdb_priv->group_datums);
 
diff --git a/modules/global-db/dap_chain_global_db_remote.c b/modules/global-db/dap_chain_global_db_remote.c
index 731de0fb7c6384e07fc17c6320e7f081849eafe7..bb343b433719bce5681ac2451917e4d8b4f6c693 100644
--- a/modules/global-db/dap_chain_global_db_remote.c
+++ b/modules/global-db/dap_chain_global_db_remote.c
@@ -329,9 +329,11 @@ bool	l_ret;
 
     dap_snprintf(l_key, sizeof(l_key) - 1, "cur_node_addr_%s", a_net_name);
 
-    if ( !(l_ret = dap_chain_global_db_gr_set(l_key, &a_address, sizeof(a_address), DAP_GLOBAL_DB_LOCAL_GENERAL)) ) {
+    if ( (l_ret = dap_global_db_set(DAP_GLOBAL_DB_LOCAL_GENERAL, l_key, &a_address, sizeof(a_address),
+                                    true, NULL, NULL)) == 0 ) {
         dap_snprintf(l_key, sizeof(l_key) - 1, "cur_node_addr_%s_time", a_net_name);
-        l_ret = dap_chain_global_db_gr_set(l_key, &a_expire_time, sizeof(time_t), DAP_GLOBAL_DB_LOCAL_GENERAL);
+        l_ret = dap_global_db_set(DAP_GLOBAL_DB_LOCAL_GENERAL, l_key, &a_expire_time, sizeof(time_t),
+                                   true, NULL, NULL);
     }
 
     return l_ret;
@@ -434,8 +436,8 @@ bool dap_db_set_last_id_remote(uint64_t a_node_addr, uint64_t a_id, char *a_grou
 {
 char	l_key[DAP_GLOBAL_DB_KEY_MAX];
 
-    dap_snprintf(l_key, sizeof(l_key) - 1, "%ju%s", a_node_addr, a_group);
-    return  dap_chain_global_db_gr_set(l_key, &a_id, sizeof(uint64_t), GROUP_LOCAL_NODE_LAST_ID);
+    dap_snprintf(l_key, sizeof(l_key) - 1, "%"DAP_UINT64_FORMAT_U"%s", a_node_addr, a_group);
+    return dap_global_db_set(GROUP_LOCAL_NODE_LAST_ID,l_key, &a_id, sizeof(uint64_t), true, NULL, NULL ) == 0;
 }
 
 /**
@@ -447,7 +449,7 @@ char	l_key[DAP_GLOBAL_DB_KEY_MAX];
  */
 uint64_t dap_db_get_last_id_remote(uint64_t a_node_addr, char *a_group)
 {
-    char *l_node_addr_str = dap_strdup_printf("%ju%s", a_node_addr, a_group);
+    char *l_node_addr_str = dap_strdup_printf("%"DAP_UINT64_FORMAT_U"%s", a_node_addr, a_group);
     size_t l_id_len = 0;
     uint8_t *l_id = dap_chain_global_db_gr_get((const char*) l_node_addr_str, &l_id_len,
                                                 GROUP_LOCAL_NODE_LAST_ID);
@@ -474,8 +476,8 @@ bool dap_db_set_last_hash_remote(uint64_t a_node_addr, dap_chain_t *a_chain, dap
 {
 char	l_key[DAP_GLOBAL_DB_KEY_MAX];
 
-    dap_snprintf(l_key, sizeof(l_key) - 1, "%ju%s%s", a_node_addr, a_chain->net_name, a_chain->name);
-    return dap_chain_global_db_gr_set(l_key, a_hash, sizeof(dap_chain_hash_fast_t), GROUP_LOCAL_NODE_LAST_ID);
+    dap_snprintf(l_key, sizeof(l_key) - 1, "%"DAP_UINT64_FORMAT_U"%s%s", a_node_addr, a_chain->net_name, a_chain->name);
+    return dap_global_db_set(GROUP_LOCAL_NODE_LAST_ID, l_key, a_hash, sizeof(dap_chain_hash_fast_t), true, NULL, NULL ) == 0;
 }
 
 /**
diff --git a/modules/global-db/include/dap_chain_global_db.h b/modules/global-db/include/dap_chain_global_db.h
index d2cbf613df559e362e3a6eda2e5b2c7cdd1c5e4c..436e968fe8ddf769249d5b4547012cdbc5ef2c0a 100644
--- a/modules/global-db/include/dap_chain_global_db.h
+++ b/modules/global-db/include/dap_chain_global_db.h
@@ -24,10 +24,3 @@ enum    {
  * Get entry from base
  */
 uint8_t * dap_chain_global_db_gr_get(const char *a_key, size_t *a_data_len_out, const char *a_group);
-
-/**
- * Set one entry to base
- */
-bool dap_chain_global_db_gr_set(const char *a_key,  const void *a_value, size_t a_value_len, const char *a_group);
-
-
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index b3c2fd9e2a23ef219d9b003b981c8b50bf69ca0f..ee7730997247460320af629976f4047a26824c2c 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -92,7 +92,7 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t
     char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
     char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(a_chain);
 
-    if (dap_chain_global_db_gr_set(l_key_str, a_datum, dap_chain_datum_size(a_datum), l_gdb_group)) {
+    if (dap_global_db_set(l_gdb_group, l_key_str, a_datum, dap_chain_datum_size(a_datum),true, NULL, NULL )==0) {
         log_it(L_NOTICE, "Datum with hash %s was placed in mempool", l_key_str);
     } else {
         log_it(L_WARNING, "Can't place datum with hash %s in mempool", l_key_str);
@@ -501,10 +501,9 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *
     else
         l_gdb_group = dap_chain_net_get_gdb_group_mempool_by_chain_type( a_net ,CHAIN_TYPE_TX);
 
-    if( dap_chain_global_db_gr_set( l_key_str, l_datum, dap_chain_datum_size(l_datum), l_gdb_group ) ) {
+    if( dap_global_db_set(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), true, NULL, NULL )  == 0 ) {
         log_it(L_NOTICE, "Transaction %s placed in mempool", l_key_str);
-
-    DAP_DELETE(l_datum);
+        DAP_DELETE(l_datum);
     }
 
     DAP_DELETE(l_gdb_group);
@@ -619,7 +618,7 @@ dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
     char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash );
     char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_by_chain_type( a_net ,CHAIN_TYPE_TX);
 
-    if( dap_chain_global_db_gr_set( l_key_str, l_datum, dap_chain_datum_size(l_datum), l_gdb_group ) ) {
+    if( dap_global_db_set(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), true, NULL, NULL ) == 0 ) {
                 log_it(L_NOTICE, "Transaction %s placed in mempool group %s", l_key_str, l_gdb_group);
     }
 
@@ -674,8 +673,8 @@ dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, da
     dap_hash_fast(l_datum_tx, l_datum_tx_size, l_datum_tx_hash);
     char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(l_datum_tx_hash);
     // Add to mempool tx token
-    bool l_placed = dap_chain_global_db_gr_set(l_tx_hash_str, l_datum_tx,
-                                               l_datum_tx_size, l_gdb_group_mempool_base_tx);
+    bool l_placed = dap_global_db_set(l_gdb_group_mempool_base_tx, l_tx_hash_str, l_datum_tx,
+                                               l_datum_tx_size, true, NULL, NULL) == 0;
     DAP_DEL_Z(l_tx_hash_str);
     DAP_DELETE(l_datum_tx);
     if (!l_placed) {
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 53704c4fbe10a50c264e5e7efa3ea10c11421def..55f0c87a595f265f0007def48a6ac15054a97eaf 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2496,8 +2496,8 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
                     l_pub_key_data = dap_enc_key_serealize_pub_key(l_cert->enc_key, &l_pub_key_data_size);
                     // save pub key
                     if(l_pub_key_data && l_pub_key_data_size > 0)
-                        dap_chain_global_db_gr_set(l_addr_key, l_pub_key_data, l_pub_key_data_size,
-                        GROUP_LOCAL_NODE_ADDR);
+                        dap_global_db_set(GROUP_LOCAL_NODE_ADDR, l_addr_key, l_pub_key_data, l_pub_key_data_size, false,
+                                            NULL, NULL);
                 }
             }
             // generate addr from pub_key
diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index 744c68add6824b510298943047d611312c2872fd..266bbf3b34b73158e2f6f9c7326879d28cbc43a1 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -83,7 +83,8 @@ bool dap_chain_node_check_addr(dap_chain_net_t *a_net, dap_chain_node_addr_t *a_
  */
 bool dap_chain_node_alias_register(dap_chain_net_t *a_net, const char *a_alias, dap_chain_node_addr_t *a_addr)
 {
-    return dap_chain_global_db_gr_set( a_alias, a_addr, sizeof(dap_chain_node_addr_t), a_net->pub.gdb_nodes_aliases);
+    return dap_global_db_set(a_net->pub.gdb_nodes_aliases, a_alias, a_addr, sizeof(dap_chain_node_addr_t),true,
+                             NULL, NULL)==0;
 }
 
 /**
@@ -158,11 +159,11 @@ int dap_chain_node_info_save(dap_chain_net_t * a_net, dap_chain_node_info_t *a_n
     }
     //char *a_value = dap_chain_node_info_serialize(node_info, NULL);
     size_t l_node_info_size = dap_chain_node_info_get_size(a_node_info);
-    bool res = dap_chain_global_db_gr_set(l_key, a_node_info, l_node_info_size, a_net->pub.gdb_nodes);
+    int l_res = dap_global_db_set( a_net->pub.gdb_nodes, l_key, a_node_info, l_node_info_size, true, NULL, NULL);
 
     DAP_DELETE(l_key);
 
-    return res ? 0 : -3;
+    return l_res;
 }
 
 /**
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 20c3a57a1ad53c0abeddb9a83a7715c87596976b..3d934474194bd347b168e988f705c8442bce65f1 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -262,7 +262,8 @@ static bool node_info_save_and_reply(dap_chain_net_t * a_net, dap_chain_node_inf
     //size_t data_len_out = 0;
     //dap_chain_node_info_t *a_node_info1 = dap_chain_global_db_gr_get(a_key, &data_len_out, a_net->pub.gdb_nodes);
 
-    bool res = dap_chain_global_db_gr_set(a_key, (uint8_t *) a_node_info, l_node_info_size, a_net->pub.gdb_nodes);
+    bool res = dap_global_db_set_sync(a_net->pub.gdb_nodes, a_key, (uint8_t *) a_node_info, l_node_info_size,
+                                 true) == 0;
 
     //data_len_out = 0;
     //dap_chain_node_info_t *a_node_info2 = dap_chain_global_db_gr_get(a_key, &data_len_out, a_net->pub.gdb_nodes);
@@ -2208,7 +2209,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
                     l_key_out_str = l_key_str_base58;
 
                 // Add datum to mempool with datum_token hash as a key
-                if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum, l_datum_size, l_gdb_group_mempool)) {
+                if( dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, l_datum, l_datum_size, true) == 0) {
 
                     char* l_hash_str = l_datum_hash_hex_str;
                     // Remove old datum from pool
@@ -2849,7 +2850,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
         l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_by_chain_type(l_net, CHAIN_TYPE_TOKEN);
 
     }
-    if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum, l_datum_size, l_gdb_group_mempool)) {
+    if(dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, l_datum, l_datum_size, true) == 0) {
         if(!dap_strcmp(l_hash_out_type,"hex"))
             dap_chain_node_cli_set_reply_text(a_str_reply, "datum %s with token update %s is placed in datum pool ", l_key_str, l_ticker);
         else
@@ -3359,8 +3360,8 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
         return -10;
     }
     int l_ret = 0;
-    bool l_placed = dap_chain_global_db_gr_set(l_key_str, (uint8_t *)l_datum, l_datum_size, l_gdb_group_mempool);
-    dap_chain_node_cli_set_reply_text(a_str_reply, "Datum %s with 256bit token %s is%s placed in datum pool",
+    bool l_placed = dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, l_datum, l_datum_size, true) == 0;
+    dap_chain_node_cli_set_reply_text(a_str_reply, "Datum %s with token %s is%s placed in datum pool",
                                       l_key_str_out, l_ticker, l_placed ? "" : " not");
     //additional checking for incorrect key format
     if (l_key_str_out != l_key_str)
@@ -3562,12 +3563,10 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
                                        : dap_enc_base58_encode_hash_to_str(&l_datum_emission_hash);
     // Add token emission datum to mempool
 
-    bool l_placed = dap_chain_global_db_gr_set(l_emission_hash_str,
-                                               (uint8_t *)l_datum_emission,
-                                               l_datum_emission_size,
-                                               l_gdb_group_mempool_emission);
+    bool l_placed = dap_global_db_set_sync( l_gdb_group_mempool_emission, l_emission_hash_str,
+                                       l_datum_emission, l_datum_emission_size, true) == 0;
 
-    str_reply_tmp = dap_strdup_printf("Datum %s with 256bit emission is%s placed in datum pool",
+    str_reply_tmp = dap_strdup_printf("Datum %s with emission is%s placed in datum pool",
                                       l_emission_hash_str, l_placed ? "" : " not");
     DAP_DEL_Z(l_emission_hash_str);
     if (!l_placed) {
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index 5adc3515ac41225b5085bd6464e92291cf2f2e07..99738417646b341dc2ee8b448c82bd1a3c7aca30 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -345,7 +345,7 @@ char *dap_chain_net_srv_order_save(dap_chain_net_t *a_net, dap_chain_net_srv_ord
     dap_hash_fast(a_order, l_order_size, &l_order_hash);
     char *l_order_hash_str = dap_chain_hash_fast_to_str_new(&l_order_hash);
     char *l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(a_net);
-    if (!dap_chain_global_db_gr_set( l_order_hash_str, a_order,  l_order_size, l_gdb_group_str)) {
+    if ( dap_global_db_set_sync( l_gdb_group_str,l_order_hash_str, a_order,  l_order_size, true ) != 0) {
         DAP_DELETE(l_gdb_group_str);
         return NULL;
     }
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 585eee6b0badc497ee769eec9726575cf5a82e9b..b0261072dc5336703b5f956f048fe458670bac29 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -466,7 +466,7 @@ static bool s_xchange_db_add(dap_chain_net_srv_xchange_price_t *a_price)
     memcpy(&l_item->order_hash, &a_price->order_hash, sizeof(dap_chain_hash_fast_t));
     strcpy(l_item->wallet_str, a_price->wallet_str);
 
-    rc = dap_chain_global_db_gr_set(a_price->key_ptr, l_item, l_size, GROUP_LOCAL_XCHANGE);
+    rc = dap_global_db_set_sync(GROUP_LOCAL_XCHANGE,a_price->key_ptr, l_item, l_size, false);
     DAP_DELETE(l_item);
 
     return  rc;
diff --git a/modules/type/blocks/dap_chain_block_chunk.c b/modules/type/blocks/dap_chain_block_chunk.c
index 3dc049cdcd3f8ee26e267785d9e8c4b8db9f1b5d..cfaf71449e33d21fcf84c0e6dfad50c5be7d4747 100644
--- a/modules/type/blocks/dap_chain_block_chunk.c
+++ b/modules/type/blocks/dap_chain_block_chunk.c
@@ -99,8 +99,8 @@ void dap_chain_block_chunks_add(dap_chain_block_chunks_t * a_chunks,dap_chain_bl
         return;
     }
     // Save to GDB
-    dap_chain_global_db_gr_set(a_block_cache->block_hash_str, a_block_cache->block, a_block_cache->block_size, a_chunks->gdb_group);
-
+    dap_global_db_set(a_chunks->gdb_group, a_block_cache->block_hash_str, a_block_cache->block, a_block_cache->block_size,
+                               true, NULL, NULL );
 
     // And here we select chunk for the new block cache
     bool l_is_chunk_found = false;
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 32639e67324a18a3c16ec0921dc2d3a6a50413bd..eee74705bba24bada294f0fd21f07e811951eacd 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -1298,7 +1298,7 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_
         dap_hash_fast(l_datum, l_datum_size, &l_key_hash);
         char *l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
 
-        if (dap_chain_global_db_gr_set(l_key_str, l_datum, l_datum_size, l_gdb_group) ) {
+        if (dap_global_db_set(l_gdb_group, l_key_str, l_datum, l_datum_size,true, NULL, NULL ) ==0 ) {
             l_datum_processed++;
         }
     }
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 9a82e5ae5b178acd4d0b2a800df40f2724e42688..dc504d2b2adf14c2bd6c6006d41e5bfdd63eedb7 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -608,7 +608,7 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_
             dap_hash_fast(l_datum, l_datum_size, &l_key_hash);
             char *l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
 
-            if (dap_chain_global_db_gr_set(l_key_str, l_datum, l_datum_size, l_gdb_group) ) {
+            if (dap_global_db_set(l_gdb_group,l_key_str, l_datum, l_datum_size, true, NULL, NULL ) == 0 ) {
                 l_datum_processed++;
             }
         }