diff --git a/dap_chain_global_db_remote.c b/dap_chain_global_db_remote.c
index 34e3de72f1ff8a854ec2ecdee689fb4b32cff50c..b350d3ae9b7783a9e8093c302fb7265b7342099b 100755
--- a/dap_chain_global_db_remote.c
+++ b/dap_chain_global_db_remote.c
@@ -4,30 +4,96 @@
 
 //#include <dap_common.h>
 #include <dap_strfuncs.h>
+#include <dap_string.h>
 //#include "dap_chain_node.h"
 #include "dap_chain_global_db.h"
 #include "dap_chain_global_db_remote.h"
 
 #define LOG_TAG "dap_chain_global_db_remote"
+
+// default time of node address expired in hours
+#define NODE_TIME_EXPIRED_DEFAULT 720
+
+static bool dap_db_set_cur_node_addr_common(uint64_t a_address, char *a_net_name, time_t a_expire_time)
+{
+    if(!a_net_name)
+        return false;
+    char *l_key = dap_strdup_printf("cur_node_addr_%s", a_net_name);
+    bool l_ret = dap_chain_global_db_gr_set(l_key, (uint8_t*) &a_address, sizeof(a_address), GROUP_LOCAL_GENERAL);
+    DAP_DELETE(l_key);
+    if(l_ret) {
+        time_t l_cur_time = a_expire_time;
+        char *l_key_time = dap_strdup_printf("cur_node_addr_%s_time", a_net_name);
+        l_ret = dap_chain_global_db_gr_set(l_key_time, (uint8_t*) &l_cur_time, sizeof(time_t), GROUP_LOCAL_GENERAL);
+        DAP_DELETE(l_key_time);
+    }
+    return l_ret;
+}
+
 /**
- * Set addr for current node
+ * Set addr for current node and no expire time
  */
-bool dap_db_set_cur_node_addr(uint64_t a_address)
+bool dap_db_set_cur_node_addr(uint64_t a_address, char *a_net_name )
 {
-    return dap_chain_global_db_gr_set("cur_node_addr",(uint8_t*) &a_address, sizeof (a_address),GROUP_LOCAL_GENERAL);
+    return dap_db_set_cur_node_addr_common(a_address,a_net_name,0);
 }
 
+/**
+ * Set addr for current node and expire time
+ */
+bool dap_db_set_cur_node_addr_exp(uint64_t a_address, char *a_net_name )
+{
+    time_t l_cur_time = time(NULL);
+    return dap_db_set_cur_node_addr_common(a_address,a_net_name,l_cur_time);
+}
+
+
+
 /**
  * Get addr for current node
  */
-uint64_t dap_db_get_cur_node_addr(void)
+uint64_t dap_db_get_cur_node_addr(char *a_net_name)
 {
-    size_t l_node_addr_len = 0;
-    uint8_t *l_node_addr = dap_chain_global_db_gr_get("cur_node_addr", &l_node_addr_len, GROUP_LOCAL_GENERAL);
+    size_t l_node_addr_len = 0, l_node_time_len = 0;
+    if(!a_net_name)
+        return 0;
+    char *l_key = dap_strdup_printf("cur_node_addr_%s", a_net_name);
+    char *l_key_time = dap_strdup_printf("cur_node_addr_%s_time", a_net_name);
+    uint8_t *l_node_addr_data = dap_chain_global_db_gr_get(l_key, &l_node_addr_len, GROUP_LOCAL_GENERAL);
+    uint8_t *l_node_time_data = dap_chain_global_db_gr_get(l_key_time, &l_node_time_len, GROUP_LOCAL_GENERAL);
     uint64_t l_node_addr_ret = 0;
-    if(l_node_addr && l_node_addr_len == sizeof(uint64_t))
-        memcpy(&l_node_addr_ret, l_node_addr, l_node_addr_len);
-    DAP_DELETE(l_node_addr);
+    time_t l_node_time = 0;
+    if(l_node_addr_data && l_node_addr_len == sizeof(uint64_t))
+        memcpy(&l_node_addr_ret, l_node_addr_data, l_node_addr_len);
+    if(l_node_time_data && l_node_time_len == sizeof(time_t))
+        memcpy(&l_node_time, l_node_time_data, l_node_time_len);
+    // time delta in seconds
+    static int64_t addr_time_expired = -1;
+    // read time-expired
+    if(addr_time_expired == -1) {
+        dap_string_t *l_cfg_path = dap_string_new("network/");
+        dap_string_append(l_cfg_path, a_net_name);
+        dap_config_t *l_cfg;
+        if((l_cfg = dap_config_open(l_cfg_path->str)) == NULL) {
+            log_it(L_ERROR, "Can't open default network config");
+            addr_time_expired = 0;
+        } else {
+            addr_time_expired = 3600 *
+                    dap_config_get_item_int64_default(l_cfg, "general", "node-addr-expired",
+                    NODE_TIME_EXPIRED_DEFAULT);
+        }
+        dap_string_free(l_cfg_path, true);
+    }
+    time_t l_dt = time(NULL) - l_node_time;
+    //NODE_TIME_EXPIRED
+    if(l_node_time && l_dt > addr_time_expired) {
+        //log_it(L_NOTICE, "Node 0x%016X set last synced timestamp %llu", a_id);
+        l_node_addr_ret = 0;
+    }
+    DAP_DELETE(l_key);
+    DAP_DELETE(l_key_time);
+    DAP_DELETE(l_node_addr_data);
+    DAP_DELETE(l_node_time_data);
     return l_node_addr_ret;
 }
 
diff --git a/dap_chain_global_db_remote.h b/dap_chain_global_db_remote.h
index e85bf5d889b7dace5a3258d297ef358f77d67382..e14480244632655888716d36a694c8f6f2995825 100755
--- a/dap_chain_global_db_remote.h
+++ b/dap_chain_global_db_remote.h
@@ -5,9 +5,9 @@
 
 #include "dap_chain_common.h"
 // Set addr for current node
-bool dap_db_set_cur_node_addr(uint64_t a_address);
-// Get addr for current node
-uint64_t dap_db_get_cur_node_addr(void);
+bool dap_db_set_cur_node_addr(uint64_t a_address, char *a_net_name);
+bool dap_db_set_cur_node_addr_exp(uint64_t a_address, char *a_net_name );
+uint64_t dap_db_get_cur_node_addr(char *a_net_name);
 
 // Set last id for remote node
 bool dap_db_log_set_last_id_remote(uint64_t a_node_addr, uint64_t a_id);