From 84aeb56d58489b06ab286bdb72c5366896fda7ff Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Mon, 9 Sep 2024 05:19:24 +0000
Subject: [PATCH] hotfix-13063

---
 dap-sdk                                       |  2 +-
 .../consensus/dag-poa/dap_chain_cs_dag_poa.c  |  2 +-
 .../consensus/esbocs/dap_chain_cs_esbocs.c    |  5 ++++-
 modules/net/dap_chain_net.c                   | 13 ++++++-------
 .../dap_chain_net_srv_stake_pos_delegate.c    | 19 ++++++++++++-------
 5 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/dap-sdk b/dap-sdk
index d47eb91e22..13684a1f79 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit d47eb91e22d192264c83e3071de865186d08c022
+Subproject commit 13684a1f796bc8ee2cc15f925782113a1040855c
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 0ac4c23414..b708d9d05d 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -751,7 +751,7 @@ static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_c
     assert(l_net);
     dap_global_db_cluster_t *l_dag_cluster = dap_global_db_cluster_add(dap_global_db_instance_get_default(), NULL,
                                                                        dap_guuid_compose(l_net->pub.id.uint64, DAP_CHAIN_CLUSTER_ID_DAG),
-                                                                       l_dag->gdb_group_events_round_new, 900, true,
+                                                                       l_dag->gdb_group_events_round_new, 1, true,
                                                                        DAP_GDB_MEMBER_ROLE_NOBODY, DAP_CLUSTER_TYPE_AUTONOMIC);
     dap_global_db_cluster_add_notify_callback(l_dag_cluster, s_round_changes_notify, l_dag);
     dap_chain_net_add_auth_nodes_to_cluster(l_net, l_dag_cluster);
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 9b1e629107..122ab07967 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -539,7 +539,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf
     char *l_sync_group = s_get_penalty_group(l_net->pub.id);
     l_session->db_cluster = dap_global_db_cluster_add(dap_global_db_instance_get_default(), NULL,
                                                       dap_guuid_compose(l_net->pub.id.uint64, DAP_CHAIN_CLUSTER_ID_ESBOCS),
-                                                      l_sync_group, 72 * 3600, true,
+                                                      l_sync_group, 72, true,
                                                       DAP_GDB_MEMBER_ROLE_NOBODY, DAP_CLUSTER_TYPE_AUTONOMIC);
     dap_link_manager_add_net_associate(l_net->pub.id.uint64, l_session->db_cluster->links_cluster);
     dap_global_db_erase_table_sync(l_sync_group);     // Drop table on stratup
@@ -950,6 +950,9 @@ static dap_list_t *s_validator_check_synced(dap_chain_addr_t *a_addr, dap_list_t
 
 static void s_db_calc_sync_hash(dap_chain_esbocs_session_t *a_session)
 {
+    dap_chain_addr_t l_addr_blank = c_dap_chain_addr_blank;
+    l_addr_blank.net_id = a_session->chain->net_id;
+    dap_chain_net_srv_stake_mark_validator_active(&l_addr_blank, true);  // Mark all validators active for now
     char *l_penalty_group = s_get_penalty_group(a_session->chain->net_id);
     size_t l_penalties_count = 0;
     dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_penalty_group, &l_penalties_count);
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index ebcbcc348a..2044750dc7 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2326,7 +2326,7 @@ bool s_net_load(void *a_arg)
     l_gdb_groups_mask = dap_strdup_printf("%s.orders", l_net->pub.gdb_groups_prefix);
     l_net_pvt->common_orders = dap_global_db_cluster_add(dap_global_db_instance_get_default(),
                                                           l_net->pub.name, dap_guuid_compose(l_net->pub.id.uint64, 0),
-                                                          l_gdb_groups_mask, 72, true,
+                                                          l_gdb_groups_mask, 336, true,
                                                           DAP_GDB_MEMBER_ROLE_USER,
                                                           DAP_CLUSTER_TYPE_EMBEDDED);
     if (!l_net_pvt->common_orders) {
@@ -2337,12 +2337,11 @@ bool s_net_load(void *a_arg)
     DAP_DELETE(l_gdb_groups_mask);
     // Node states cluster
     l_gdb_groups_mask = dap_strdup_printf("%s.nodes.states", l_net->pub.gdb_groups_prefix);
-    l_net_pvt->nodes_states = dap_global_db_cluster_add(
-        dap_global_db_instance_get_default(),
-        l_net->pub.name, dap_guuid_compose(l_net->pub.id.uint64, 0),
-        l_gdb_groups_mask, 0, true,
-        DAP_GDB_MEMBER_ROLE_USER,
-        DAP_CLUSTER_TYPE_EMBEDDED);
+    l_net_pvt->nodes_states = dap_global_db_cluster_add(dap_global_db_instance_get_default(),
+                                                        l_net->pub.name, dap_guuid_compose(l_net->pub.id.uint64, 0),
+                                                        l_gdb_groups_mask, 6, true,
+                                                        DAP_GDB_MEMBER_ROLE_USER,
+                                                        DAP_CLUSTER_TYPE_EMBEDDED);
     DAP_DELETE(l_gdb_groups_mask);
     // Nodes and its aliases cluster
     l_net->pub.gdb_nodes = dap_strdup_printf("%s.nodes.list",l_net->pub.gdb_groups_prefix);
diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
index 494ae6cd9e..a5207ed8b2 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
@@ -505,13 +505,17 @@ int dap_chain_net_srv_stake_mark_validator_active(dap_chain_addr_t *a_signing_ad
     dap_return_val_if_fail(a_signing_addr, -1);
     dap_chain_net_srv_stake_t *l_srv_stake = s_srv_stake_by_net_id(a_signing_addr->net_id);
     dap_return_val_if_fail(l_srv_stake, -3);
-    dap_chain_net_srv_stake_item_t *l_stake = NULL;
-    HASH_FIND(hh, l_srv_stake->itemlist, &a_signing_addr->data.hash_fast, sizeof(dap_hash_fast_t), l_stake);
-    if (l_stake) { // public key delegated for this network
+    dap_chain_net_srv_stake_item_t *l_stake = NULL, *l_tmp;
+    if (!dap_hash_fast_is_blank(&a_signing_addr->data.hash_fast)) {
+        // Mark a single validator
+        HASH_FIND(hh, l_srv_stake->itemlist, &a_signing_addr->data.hash_fast, sizeof(dap_hash_fast_t), l_stake);
+        if (!l_stake) // public key isn't delegated for this network
+            return -2;
         l_stake->is_active = a_on_off;
-        return 0;
-    }
-    return -2;
+    } else // Mark all validators
+        HASH_ITER(hh, l_srv_stake->itemlist, l_stake, l_tmp)
+            l_stake->is_active = a_on_off;
+    return 0;
 }
 
 int dap_chain_net_srv_stake_verify_key_and_node(dap_chain_addr_t *a_signing_addr, dap_chain_node_addr_t *a_node_addr)
@@ -2944,7 +2948,8 @@ dap_chain_net_srv_stake_item_t *dap_chain_net_srv_stake_check_pkey_hash(dap_chai
     return NULL;
 }
 
-size_t dap_chain_net_srv_stake_get_total_keys(dap_chain_net_id_t a_net_id, size_t *a_in_active_count){
+size_t dap_chain_net_srv_stake_get_total_keys(dap_chain_net_id_t a_net_id, size_t *a_in_active_count)
+{
     dap_chain_net_srv_stake_t *l_stake_rec = s_srv_stake_by_net_id(a_net_id);
     if (!l_stake_rec)
         return 0;
-- 
GitLab