diff --git a/dist/share/configs/network/kelvin-testnet.cfg.tpl b/dist/share/configs/network/kelvin-testnet.cfg.tpl
index e8b24b01e87d4864bfa06f199e607e7ae0cb03ef..eec07ab4b8da05980819d1d101ebf9069d14c9e2 100755
--- a/dist/share/configs/network/kelvin-testnet.cfg.tpl
+++ b/dist/share/configs/network/kelvin-testnet.cfg.tpl
@@ -10,7 +10,7 @@ node-alias=addr-%node_addr%
 gdb_groups_prefix=kelvin.testnet
 seed_nodes_ipv4=[159.89.228.115,165.227.17.239,104.248.89.205,157.230.240.104,167.99.87.197,46.101.149.240,159.89.122.48]
 seed_nodes_aliases=[kelvin.testnet.root.0,kelvin.testnet.root.1,kelvin.testnet.root.2,kelvin.testnet.root.3,kelvin.testnet.root.4,kelvin.testnet.root.5,kelvin.testnet.root.6]
-seed_nodes_addr=[ffff::0000::0000::0001,ffff::0000::0000::0002,ffff::0000::0000::0003,ffff::0000::0000::0004,ffff::0000::0000::0005,ffff::0000::0000::0006,ffff::0000::0000::0007]
+seed_nodes_addrs=[ffff::0000::0000::0001,ffff::0000::0000::0002,ffff::0000::0000::0003,ffff::0000::0000::0004,ffff::0000::0000::0005,ffff::0000::0000::0006,ffff::0000::0000::0007]
 
 #[dag-poa]
 #events-sign-cert=mycert
diff --git a/libdap b/libdap
index d40599923167e43addcc61696b8ea75b2e2abcd7..5b72cc303107680535c4591313033611b01c4a0b 160000
--- a/libdap
+++ b/libdap
@@ -1 +1 @@
-Subproject commit d40599923167e43addcc61696b8ea75b2e2abcd7
+Subproject commit 5b72cc303107680535c4591313033611b01c4a0b
diff --git a/libdap-chain-gdb b/libdap-chain-gdb
index 28b6050053ea76b24a5dbb5b41fdaac60610dd28..d5d15ff217801c17bbdb57aca9f6614a8b868113 160000
--- a/libdap-chain-gdb
+++ b/libdap-chain-gdb
@@ -1 +1 @@
-Subproject commit 28b6050053ea76b24a5dbb5b41fdaac60610dd28
+Subproject commit d5d15ff217801c17bbdb57aca9f6614a8b868113
diff --git a/libdap-chain-global-db b/libdap-chain-global-db
index a3eff15ef836881074bc4b5122d4d46b14f44678..739a61ab34c856df96b58f1917f9bd93e0a33b95 160000
--- a/libdap-chain-global-db
+++ b/libdap-chain-global-db
@@ -1 +1 @@
-Subproject commit a3eff15ef836881074bc4b5122d4d46b14f44678
+Subproject commit 739a61ab34c856df96b58f1917f9bd93e0a33b95
diff --git a/libdap-crypto b/libdap-crypto
index 15c4ba05ada6cc0b8d4a56c58978ae1e2b095702..ff63d762657f9687173db825705b8bf4b958abee 160000
--- a/libdap-crypto
+++ b/libdap-crypto
@@ -1 +1 @@
-Subproject commit 15c4ba05ada6cc0b8d4a56c58978ae1e2b095702
+Subproject commit ff63d762657f9687173db825705b8bf4b958abee
diff --git a/libdap-stream-ch-chain b/libdap-stream-ch-chain
index d07e3f3df873e93d64d9bb90737c059eea6c31ad..688472966c733da5b555e28f2b23311b3cf60cf2 160000
--- a/libdap-stream-ch-chain
+++ b/libdap-stream-ch-chain
@@ -1 +1 @@
-Subproject commit d07e3f3df873e93d64d9bb90737c059eea6c31ad
+Subproject commit 688472966c733da5b555e28f2b23311b3cf60cf2
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 945ebdb98ac298dc7dbde427b4357ef069c4cae2..5c72658ff53b5f031a70630689da7c064b15c16e 100755
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -10,7 +10,7 @@ file(GLOB HEADERS *.h)
 
 add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core)
+target_link_libraries(${PROJECT_NAME} dap_core dap_test dap_chain_global_db)
 
 add_test(
     NAME kelvin_node_test
diff --git a/test/dap_global_db_test.c b/test/dap_global_db_test.c
new file mode 100644
index 0000000000000000000000000000000000000000..c3da75b9ccc461d57d533c7da3a1310fa94199a5
--- /dev/null
+++ b/test/dap_global_db_test.c
@@ -0,0 +1,135 @@
+#include <time.h>
+#include <unistd.h>
+
+#include "dap_common.h"
+#include "dap_strfuncs.h"
+//#include "dap_list.h"
+#include "dap_chain_global_db.h"
+#include "dap_chain_global_db_driver.h"
+#include "dap_global_db_test.h"
+
+#define DB_FILE "./base.sqlite"
+
+static void test_create_db(void)
+{
+    unlink(DB_FILE);
+    int res = dap_db_driver_init("sqlite", DB_FILE);
+    dap_assert(!res, "Test init global_db");
+}
+static void test_write_read_one(void)
+{
+    dap_store_obj_t *l_store_obj = DAP_NEW_Z(dap_store_obj_t);
+    size_t l_store_count = 1;
+    l_store_obj->type = 'a';
+    l_store_obj->key = dap_strdup("key");
+    l_store_obj->group = dap_strdup("section.1");
+    l_store_obj->timestamp = time(NULL);
+    l_store_obj->value_len = rand() % 100;
+    l_store_obj->value = DAP_NEW_SIZE(uint8_t, l_store_obj->value_len);
+    for(size_t i = 0; i < l_store_obj->value_len; i++) {
+        l_store_obj->value[i] = rand();
+    }
+    int ret = dap_chain_global_db_driver_add(l_store_obj, l_store_count);
+
+    dap_store_obj_t *l_store_obj2 = dap_chain_global_db_driver_read(l_store_obj->group, l_store_obj->key, NULL);
+
+    dap_assert_PIF(l_store_obj2, "Read global_db entry");
+
+    // compare l_store_obj and l_store_obj
+    if(l_store_obj->timestamp == l_store_obj2->timestamp &&
+            l_store_obj->value_len == l_store_obj2->value_len &&
+            l_store_obj->value && l_store_obj2->value &&
+            !memcmp(l_store_obj->value, l_store_obj2->value, l_store_obj->value_len)) {
+        dap_assert_PIF(1, "Check read entry");
+    }
+    else {
+        dap_assert_PIF(0, "Check read entry");
+    }
+
+    dap_store_obj_free(l_store_obj, 1);
+    dap_store_obj_free(l_store_obj2, 1);
+
+
+    dap_assert(1, "Test dap_global_db one record");
+
+}
+
+static void test_close_db(void)
+{
+    dap_db_driver_deinit();//dap_chain_global_db_deinit();
+    dap_assert(1, "Test close global_db");
+}
+
+static void test_write_db_count(void)
+{
+    int a_count = 20000;
+    dap_store_obj_t *l_store_obj = DAP_NEW_Z_SIZE(dap_store_obj_t, sizeof(dap_store_obj_t) * a_count);
+    size_t l_store_count = 1;
+    for(size_t n = 0; n < a_count; n++) {
+        dap_store_obj_t *l_store_obj_cur = l_store_obj + n;
+        l_store_obj_cur->type = 'a';
+        l_store_obj_cur->key = dap_strdup_printf("key_%d", rand());
+        l_store_obj_cur->group = dap_strdup("section.1");
+        l_store_obj_cur->timestamp = time(NULL);
+        l_store_obj_cur->value_len = 10 + rand() % 100;
+        l_store_obj_cur->value = DAP_NEW_SIZE(uint8_t, l_store_obj_cur->value_len);
+        for(size_t i = 0; i < l_store_obj_cur->value_len; i++) {
+            l_store_obj_cur->value[i] = rand();
+        }
+    }
+    //dap_test_msg("Start test write dap_global_db %d record", a_count);
+    int ret = dap_chain_global_db_driver_add(l_store_obj, a_count);
+
+    //dap_test_msg("Read first record");
+    dap_store_obj_t *l_store_obj2 = dap_chain_global_db_driver_read(l_store_obj->group, l_store_obj->key, NULL);
+    dap_store_obj_free(l_store_obj2, 1);
+    //dap_test_msg("Start test read dap_global_db %d record", a_count);
+    for(size_t n = 1; n < a_count; n++) {
+        dap_store_obj_t *l_store_obj2 = dap_chain_global_db_driver_read(l_store_obj->group, l_store_obj->key, NULL);
+        dap_assert_PIF(l_store_obj2, "Read data");
+        // compare l_store_obj and l_store_obj
+        if(l_store_obj->timestamp == l_store_obj2->timestamp &&
+                l_store_obj->value_len == l_store_obj2->value_len &&
+                l_store_obj->value && l_store_obj2->value &&
+                !memcmp(l_store_obj->value, l_store_obj2->value, l_store_obj->value_len)) {
+            ;
+        }
+        else {
+            dap_assert_PIF(0, "Check read entry");
+        }
+        dap_store_obj_free(l_store_obj2, 1);
+    }
+    //dap_assert_PIF(1, "Read global_db entry");
+
+    dap_store_obj_free(l_store_obj, a_count);
+
+    //dap_usleep(5 * DAP_USEC_PER_SEC);
+    //dap_assert(1, "Test dap_global_db");
+
+}
+
+void dap_global_db_tests_run(void)
+{
+    dap_print_module_name("dap_global_db");
+
+    unlink(DB_FILE);
+    test_create_db();
+    test_write_read_one();
+//    test_write_db_count(1000000);
+
+    benchmark_mgs_time("Read and Write in global_db 20000 records",
+                benchmark_test_time(test_write_db_count, 1));
+    //dap_assert(1, "Test dap_global_db: write and read 20000 records");
+
+/*
+    benchmark_mgs_time("Read and Write in global_db 100 times",
+            benchmark_test_time(test_write_db_count, 1));
+    dap_assert(1, "Test dap_global_db 100 records");
+*/
+
+//        benchmark_mgs_rate("Read and Write in global_db",
+//                benchmark_test_rate(test_write_db_count, 2000));
+
+    //dap_usleep(2 * DAP_USEC_PER_SEC);
+    test_close_db();
+}
diff --git a/test/dap_global_db_test.h b/test/dap_global_db_test.h
new file mode 100644
index 0000000000000000000000000000000000000000..00bae493c7fcdb9e0c3102f624674a3ec4422bb5
--- /dev/null
+++ b/test/dap_global_db_test.h
@@ -0,0 +1,4 @@
+#pragma once
+#include "libdap-test/dap_test.h"
+
+extern void dap_global_db_tests_run(void);
diff --git a/test/main.c b/test/main.c
index d015aec2588f35b803c5923f045beeb994a85583..65d0a5bac53333edfb0da55adc1aad3828e0329d 100755
--- a/test/main.c
+++ b/test/main.c
@@ -1,7 +1,10 @@
+#include "dap_global_db_test.h"
 #include "dap_common.h"
 
+
 int main(void) {
     // switch off debug info from library
-    set_log_level(L_CRITICAL);
+    dap_log_level_set(L_CRITICAL);
+    dap_global_db_tests_run();
     return 0;
 }