diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index cd8edd3ad001012d941598cfccfc3a22b9b8cb99..c3993601de00e817056771c2d64245acc110f486 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -87,6 +87,9 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
             "global_db write -group <group_name> -key <key_name> -value <value>"
             "global_db read -group <group_name> -key <key_name>"
             "global_db delete -group <group_name> -key <key_name>"
+            "global_db drop_table -group <group_name>\n"
+            "global_db get_keys -group <group name>"
+
 //                    "global_db wallet_info set -addr <wallet address> -cell <cell id> \n\n"
             );
     dap_cli_server_cmd_add("mempool", com_signer, "Sign operations",
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index a62447ea254df379062ec2efacf50079ea6c1df8..93cd92c2fc65bd5b9dfe2be9553d786b64c571cf 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -730,7 +730,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add
 int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
 {
     enum {
-        CMD_NONE, CMD_NAME_CELL, CMD_ADD, CMD_FLUSH, CMD_RECORD, CMD_WRITE, CMD_READ, CMD_DELETE
+        CMD_NONE, CMD_NAME_CELL, CMD_ADD, CMD_FLUSH, CMD_RECORD, CMD_WRITE, CMD_READ, CMD_DELETE, CMD_DROP, CMD_GET_KEYS
     };
     int arg_index = 1;
     int cmd_name = CMD_NONE;
@@ -747,6 +747,11 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
                 cmd_name = CMD_READ;
     else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, MIN(a_argc, arg_index + 1), "delete", NULL))
                 cmd_name = CMD_DELETE;
+    else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "drop_table", NULL))
+                cmd_name = CMD_DROP;
+    else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "get_keys", NULL))
+            cmd_name = CMD_GET_KEYS;
+
     switch (cmd_name) {
     case CMD_NAME_CELL:
     {
@@ -930,100 +935,164 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
         return l_ret;
     }
     case CMD_WRITE:
-        {
-            const char *l_group_str = NULL;
-            const char *l_key_str = NULL;
-            const char *l_value_str = NULL;
+    {
+        const char *l_group_str = NULL;
+        const char *l_key_str = NULL;
+        const char *l_value_str = NULL;
 
-            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
-            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
-            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-value", &l_value_str);
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-value", &l_value_str);
 
-            if(!l_group_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
-                return -120;
-            }
+        if(!l_group_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+            return -120;
+        }
 
-            if(!l_key_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
-                return -121;
-            }
+        if(!l_key_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
+            return -121;
+        }
 
-            if(!l_value_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'value' to be valid", a_argv[0]);
-                return -122;
-            }
+        if(!l_value_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'value' to be valid", a_argv[0]);
+            return -122;
+        }
 
-            if (dap_global_db_set(l_group_str, l_key_str, l_value_str, strlen(l_value_str), false, NULL, NULL)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Data has been successfully written to the database");
-                return 0;
-            } else {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Data writing is failed");
-                return -124;
-            }
+        if (!dap_global_db_set_sync(l_group_str, l_key_str, l_value_str, strlen(l_value_str) +1 , false)) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Data has been successfully written to the database");
+            return 0;
+        } else {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Data writing is failed");
+            return -124;
+        }
 
+    }
+    case CMD_READ:
+    {
+        const char *l_group_str = NULL;
+        const char *l_key_str = NULL;
+
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
+
+        if(!l_group_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+            return -120;
+        }
+
+        if(!l_key_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
+            return -122;
         }
-        case CMD_READ:
+
+        size_t l_out_len = 0;
+        uint8_t *l_value_out = dap_global_db_get_sync(l_group_str, l_key_str, &l_out_len, NULL, NULL);
+
+        if (!l_value_out || !l_out_len)
         {
-            const char *l_group_str = NULL;
-            const char *l_key_str = NULL;
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s not found", l_key_str, l_group_str);
+            return -121;
+        }
 
-            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
-            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Group %s, key %s, data:\n %s", l_group_str, l_key_str, (char*)l_value_out);
+        return 0;
+    }
+    case CMD_DELETE:
+    {
+        const char *l_group_str = NULL;
+        const char *l_key_str = NULL;
 
-            if(!l_group_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
-                return -120;
-            }
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
 
-            if(!l_key_str) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
-                return -122;
-            }
+        if(!l_group_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+            return -120;
+        }
 
-            size_t l_out_len = 0;
-            uint8_t *l_value_out = dap_global_db_get_sync(l_group_str, l_key_str, &l_out_len, NULL, NULL);
+        if(!l_key_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "No key provided, entire table %s will be altered", l_group_str);
+            size_t l_objs_count = 0;
+            dap_global_db_obj_t* l_obj = dap_global_db_get_all_sync(l_group_str, &l_objs_count);
 
-            if (!l_value_out || !l_out_len)
+            if (!l_obj || !l_objs_count)
             {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s not found", l_key_str, l_group_str);
-                return -121;
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "No data in group %s.", l_group_str);
+                return -124;
             }
+            size_t i, j = 0;
+            for (i = 0; i < l_objs_count; ++i) {
+                if (!l_obj[i].key)
+                    continue;
+                if (!dap_global_db_del_sync(l_group_str, l_obj[i].key)) {
+                    ++j;
+                }
+            }
+            dap_global_db_objs_delete(l_obj, l_objs_count);
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Removed %lu of %lu records in table %s", j, i, l_group_str);
+            return 0;
+        }
 
-            dap_cli_server_cmd_set_reply_text(a_str_reply, "Group %s, key %s, data:\n %s", l_group_str, l_key_str, (char*)l_value_out);
+        if (dap_global_db_del(l_group_str, l_key_str, NULL, NULL)) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s was deleted successfuly", l_key_str, l_group_str);
             return 0;
+        } else {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s deleting failed", l_group_str, l_key_str);
+            return -122;
         }
-        case CMD_DELETE:
-            {
-                const char *l_group_str = NULL;
-                const char *l_key_str = NULL;
+    }
+    case CMD_DROP:
+    {
+        const char *l_group_str = NULL;
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
 
-                dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
-                dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
+        if(!l_group_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+            return -120;
+        }
 
-                if(!l_group_str) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
-                    return -120;
-                }
+        if (!dap_global_db_del_sync(l_group_str, NULL))
+        {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Dropped table %s", l_group_str);
+            return 0;
+        } else {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Failed to drop table %s", l_group_str);
+            return -122;
+        }
+    }
+    case CMD_GET_KEYS:
+    {
+        const char *l_group_str = NULL;
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
 
-                if(!l_key_str) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
-                    return -121;
-                }
+        if(!l_group_str) {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+            return -120;
+        }
 
-                if (dap_global_db_del(l_group_str, l_key_str, NULL, NULL)) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s was deleted successfuly", l_key_str, l_group_str);
-                    return 0;
-                } else {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s deleting failed", l_group_str, l_key_str);
-                    return -122;
-                }
-            }
+        size_t l_objs_count = 0;
+        dap_global_db_obj_t* l_obj = dap_global_db_get_all_sync(l_group_str, &l_objs_count);
+
+        if (!l_obj || !l_objs_count)
+        {
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "No data in group %s.", l_group_str);
+            return -124;
+        }
+
+        dap_string_t *l_ret_str = dap_string_new(NULL);
+        for(size_t i = 0; i < l_objs_count; i++){
+            dap_string_append_printf(l_ret_str, "%s\n", l_obj[i].key);
+        }
+
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Keys list for group %s:\n%s\n", l_group_str, l_ret_str->str);
+        dap_string_free(l_ret_str, true);
+        return 0;
+    }
     default:
         dap_cli_server_cmd_set_reply_text(a_str_reply, "parameters are not valid");
         return -1;
     }
-    return  -555;
 }
 
 /**