diff --git a/dap-sdk b/dap-sdk
index 19c0dd72cb192c0baabc45fc2ae57df0e15aedb8..0d874199566279240c67dfccaf29cc1640a82c92 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 19c0dd72cb192c0baabc45fc2ae57df0e15aedb8
+Subproject commit 0d874199566279240c67dfccaf29cc1640a82c92
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 1aa3e20bb54dceb162c9417e96553195945ea925..9e84e2ca26f4cf5531ea4964965d0e30c68c3f6b 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -269,9 +269,11 @@ struct json_object *s_net_states_json_collect(dap_chain_net_t * l_net);
 static void s_net_states_notify(dap_chain_net_t * l_net);
 
 //static void s_net_proc_kill( dap_chain_net_t * a_net );
-int s_net_init(const char * a_net_name, uint16_t a_acl_idx);
+static int s_net_init(const char * a_net_name, uint16_t a_acl_idx);
 
-int s_net_load(dap_chain_net_t *a_net);
+static int s_net_load(dap_chain_net_t *a_net);
+
+static int s_net_init_node_addr_cert();
 
 // Notify callback for GlobalDB changes
 static void s_gbd_history_callback_notify(dap_global_db_context_t *a_context, dap_store_obj_t *a_obj, void *a_arg);
@@ -342,6 +344,10 @@ int dap_chain_net_init()
             "\tPrint list of PoA cerificates for this network\n");
 
     s_debug_more = dap_config_get_item_bool_default(g_config,"chain_net","debug_more",false);
+    if(s_net_init_node_addr_cert()) {
+        log_it(L_ERROR,"Error init node-addr cert");
+        return -1;
+    }
 
     char * l_net_dir_str = dap_strdup_printf("%s/network", dap_config_path());
     DIR * l_net_dir = opendir( l_net_dir_str);
@@ -2551,34 +2557,13 @@ int s_net_init(const char * a_net_name, uint16_t a_acl_idx)
         uint8_t *l_pub_key_data = NULL;
 
         // read pub key
-        char *l_addr_key = dap_strdup_printf("node-addr-%s", l_net->pub.name);
+        char *l_addr_key = dap_strdup_printf("node-addr");
         l_pub_key_data = dap_global_db_get_sync(GROUP_LOCAL_NODE_ADDR, l_addr_key, &l_pub_key_data_size, NULL, NULL);
         // generate a new pub key if it doesn't exist
         if(!l_pub_key_data || !l_pub_key_data_size){
-
-            const char * l_certs_name_str = l_addr_key;
-            dap_cert_t ** l_certs = NULL;
-            size_t l_certs_size = 0;
-            dap_cert_t * l_cert = NULL;
-            // Load certs or create if not found
-            if(!dap_cert_parse_str_list(l_certs_name_str, &l_certs, &l_certs_size)) { // Load certs
-                const char *l_cert_folder = dap_cert_get_folder(0);
-                // create new cert
-                if(l_cert_folder) {
-                    char *l_cert_path = dap_strdup_printf("%s/%s.dcert", l_cert_folder, l_certs_name_str);
-                    l_cert = dap_cert_generate(l_certs_name_str, l_cert_path, DAP_ENC_KEY_TYPE_SIG_DILITHIUM);
-                    DAP_DELETE(l_cert_path);
-                }
-            }
-            if(l_certs_size > 0)
-                l_cert = l_certs[0];
-            if(l_cert) {
-                l_pub_key_data = dap_enc_key_serialize_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_global_db_set(GROUP_LOCAL_NODE_ADDR, l_addr_key, l_pub_key_data, l_pub_key_data_size, false,
-                                        NULL, NULL);
-            }
+            log_it(L_CRITICAL, "Memory allocation error");
+            dap_config_close(l_cfg);
+            return -1;
         }
         // generate addr from pub_key
         dap_chain_hash_fast_t l_hash;
@@ -3786,3 +3771,57 @@ char *dap_chain_net_links_dump(dap_chain_net_t *a_net) {
     dap_string_free(l_str_downlinks, true);
     return l_res_str;
 }
+
+/**
+ * @brief init node addr and set in gdb
+ * @param -
+ * @return 0 if no errors
+ */
+int s_net_init_node_addr_cert() 
+{
+    dap_config_t *l_cfg = NULL;
+    dap_string_t *l_cfg_path = dap_string_new("cellframe-node");
+
+    if( !(l_cfg = dap_config_open(l_cfg_path->str)) ) {
+        log_it(L_ERROR,"Can't open default node config");
+        dap_string_free(l_cfg_path,true);
+        return -1;
+    }
+    dap_string_free(l_cfg_path,true);
+
+    const char * l_node_addr_type = dap_config_get_item_str_default(l_cfg , "general" ,"node_addr_type","auto");
+    // use unique addr from pub key
+    size_t l_pub_key_data_size = 0;
+    uint8_t *l_pub_key_data = NULL;
+
+    // read pub key
+    char *l_addr_key = dap_strdup_printf("node-addr");
+    l_pub_key_data = dap_global_db_get_sync(GROUP_LOCAL_NODE_ADDR, l_addr_key, &l_pub_key_data_size, NULL, NULL);
+    // generate a new pub key if it doesn't exist
+    if(!l_pub_key_data || !l_pub_key_data_size) {
+        const char *l_certs_name_str = l_addr_key;
+        dap_cert_t **l_certs = NULL;
+        size_t l_certs_size = 0;
+        dap_cert_t *l_cert = NULL;
+        // Load certs or create if not found
+        if(!dap_cert_parse_str_list(l_certs_name_str, &l_certs, &l_certs_size)) { // Load certs
+            const char *l_cert_folder = dap_cert_get_folder(0);
+            // create new cert
+            if(l_cert_folder) {
+                char *l_cert_path = dap_strdup_printf("%s/%s.dcert", l_cert_folder, l_certs_name_str);
+                l_cert = dap_cert_generate(l_certs_name_str, l_cert_path, DAP_ENC_KEY_TYPE_SIG_DILITHIUM);
+                DAP_DELETE(l_cert_path);
+            }
+        }
+        if(l_certs_size > 0)
+            l_cert = l_certs[0];
+        if(l_cert) {
+            l_pub_key_data = dap_enc_key_serialize_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_global_db_set(GROUP_LOCAL_NODE_ADDR, l_addr_key, l_pub_key_data, l_pub_key_data_size, false,
+                                    NULL, NULL);
+        }
+    }
+    return 0;
+}
\ No newline at end of file