From e3a158c9b1bedccb5b3abc6d394b1a2227f50b45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Al=D0=B5x=D0=B0nder=20Lysik=D0=BEv?=
 <alexander.lysikov@demlabs.net>
Date: Wed, 19 Feb 2020 19:36:45 +0500
Subject: [PATCH] added node_addr_type parametr to .cfg file

---
 dap_chain_net.c | 41 ++++++++++++++++++++++++++++++++++++++---
 1 file changed, 38 insertions(+), 3 deletions(-)

diff --git a/dap_chain_net.c b/dap_chain_net.c
index 15685e50d3..55b52a50e7 100755
--- a/dap_chain_net.c
+++ b/dap_chain_net.c
@@ -56,6 +56,7 @@
 #include "dap_file_utils.h"
 #include "dap_config.h"
 #include "dap_hash.h"
+#include "dap_cert.h"
 #include "dap_chain_net.h"
 #include "dap_chain_node_client.h"
 #include "dap_chain_node_cli.h"
@@ -1300,9 +1301,43 @@ int s_net_load(const char * a_net_name)
         char ** l_seed_nodes_port = dap_config_get_array_str( l_cfg , "general" ,"seed_nodes_port"
                                                                      ,&l_seed_nodes_port_len);
 
-        //const char * l_node_ipv4_str = dap_config_get_item_str(l_cfg , "general" ,"node-ipv4");
-        const char * l_node_addr_str = dap_config_get_item_str(l_cfg , "general" ,"node-addr");
-        const char * l_node_alias_str = dap_config_get_item_str(l_cfg , "general" , "node-alias");
+        const char * l_node_addr_type = dap_config_get_item_str_default(l_cfg , "general" ,"node_addr_type","auto");
+
+        const char * l_node_addr_str = NULL;
+        const char * l_node_alias_str = NULL;
+
+        // use unique addr from pub key
+        if(!dap_strcmp(l_node_addr_type, "auto")) {
+            const char * l_certs_name_str = "node-addr";
+            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);
+                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);
+                }
+            }
+            // generate addr
+            if(l_cert){
+                dap_chain_hash_fast_t *l_hash;
+                if(dap_hash_fast(l_cert->enc_key->pub_key_data,l_cert->enc_key->pub_key_data_size, l_hash)){
+                    l_hash->raw
+                    !!!! uint64
+                }
+            }
+
+        }
+        // use static addr from setting
+        else if(!dap_strcmp(l_node_addr_type, "static")) {
+            //const char * l_node_ipv4_str = dap_config_get_item_str(l_cfg , "general" ,"node-ipv4");
+            const char * l_node_addr_str = dap_config_get_item_str(l_cfg, "general", "node-addr");
+            const char * l_node_alias_str = dap_config_get_item_str(l_cfg, "general", "node-alias");
+        }
+
         log_it (L_DEBUG, "Read %u aliases, %u address and %u ipv4 addresses, check them",
                 PVT(l_net)->seed_aliases_count,l_seed_nodes_addrs_len, l_seed_nodes_ipv4_len );
         // save new nodes from cfg file to db
-- 
GitLab