From 63a1aec17bbf6bee9b55b683765fd063bf6bfe77 Mon Sep 17 00:00:00 2001
From: "alexey.stratulat" <alexey.stratulat@demlabs.net>
Date: Mon, 1 Jul 2024 08:57:55 +0000
Subject: [PATCH] Bugfix 11771 (3)

---
 modules/chain/dap_chain.c                     |  3 +-
 .../consensus/dag-poa/dap_chain_cs_dag_poa.c  |  4 +-
 .../consensus/esbocs/dap_chain_cs_esbocs.c    | 12 +--
 modules/net/dap_chain_node_cli.c              |  6 +-
 modules/net/dap_chain_node_cli_cmd.c          | 92 +++++++++++--------
 modules/type/blocks/dap_chain_cs_blocks.c     | 28 +++---
 modules/type/dag/dap_chain_cs_dag.c           | 76 +++++++--------
 7 files changed, 117 insertions(+), 104 deletions(-)

diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index 08bf39a789..b1afa3c44a 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -179,6 +179,7 @@ void dap_chain_delete(dap_chain_t * a_chain)
     if (a_chain->callback_delete)
         a_chain->callback_delete(a_chain);
     DAP_DEL_Z(a_chain->_inheritor);
+    dap_config_close(a_chain->config);
     pthread_rwlock_destroy(&a_chain->rwlock);
     pthread_rwlock_destroy(&a_chain->cell_rwlock);
 }
@@ -525,7 +526,7 @@ dap_chain_t *dap_chain_load_from_cfg(const char *a_chain_net_name, dap_chain_net
 				} else
 					l_chain->autoproc_datum_types_count = 0;
 			}
-            if (l_chain && l_chain->config)
+            if (l_chain)
                 l_chain->config = l_cfg;
             return l_chain;
         } else
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 616a792af3..305173a049 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -113,7 +113,7 @@ int dap_chain_cs_dag_poa_init()
     dap_chain_cs_add("dag_poa", s_callback_new);
     s_seed_mode = dap_config_get_item_bool_default(g_config,"general","seed_mode",false);
     dap_cli_server_cmd_add ("dag_poa", s_cli_dag_poa, "DAG PoA commands",
-        "dag_poa event sign -net <net_name> -chain <chain_name> -event <event_hash> [-H {hex | base58(default)}]\n"
+        "dag_poa event sign -net <net_name> [-chain <chain_name>] -event <event_hash> [-H {hex | base58(default)}]\n"
             "\tSign event <event hash> in the new round pool with its authorize certificate\n\n");
 
     return 0;
@@ -191,7 +191,7 @@ static int s_cli_dag_poa(int argc, char ** argv, void **a_str_reply)
     }
 
     if (dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index,argc,argv,a_str_reply,&l_chain,&l_chain_net,
-                                                      CHAIN_TYPE_INVALID)) {
+                                                      CHAIN_TYPE_TOKEN)) {
         return -3;
     }
 
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 7cf43b8c92..d61688c07f 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -184,17 +184,17 @@ int dap_chain_cs_esbocs_init()
                            s_stream_ch_packet_in,
                            NULL);
     dap_cli_server_cmd_add ("esbocs", s_cli_esbocs, "ESBOCS commands",
-        "esbocs min_validators_count set -net <net_name> -chain <chain_name> -cert <poa_cert_name> -val_count <value>\n"
+        "esbocs min_validators_count set -net <net_name> [-chain <chain_name>] -cert <poa_cert_name> -val_count <value>\n"
             "\tSets minimum validators count for ESBOCS consensus\n"
-        "esbocs min_validators_count show -net <net_name> -chain <chain_name>\n"
+        "esbocs min_validators_count show -net <net_name> [-chain <chain_name>]\n"
             "\tShow minimum validators count for ESBOCS consensus\n"
-        "esbocs check_signs_structure {enable|disable} -net <net_name> -chain <chain_name> -cert <poa_cert_name>\n"
+        "esbocs check_signs_structure {enable|disable} -net <net_name> [-chain <chain_name>] -cert <poa_cert_name>\n"
             "\tEnables or disables checks for blocks signs structure validity\n"
-        "esbocs check_signs_structure show -net <net_name> -chain <chain_name>\n"
+        "esbocs check_signs_structure show -net <net_name> [-chain <chain_name>]\n"
             "\tShow status of checks for blocks signs structure validity\n"
-        "esbocs emergency_validators {add|remove} -net <net_name> -chain <chain_name> -cert <poa_cert_name> -pkey_hash <validator_pkey_hash>\n"
+        "esbocs emergency_validators {add|remove} -net <net_name> [-chain <chain_name>] -cert <poa_cert_name> -pkey_hash <validator_pkey_hash>\n"
             "\tAdd or remove validator by its signature public key hash to list of validators allowed to work in emergency mode\n"
-        "esbocs emergency_validators show -net <net_name> -chain <chain_name>\n"
+        "esbocs emergency_validators show -net <net_name> [-chain <chain_name>]\n"
             "\tShow list of validators public key hashes allowed to work in emergency mode\n");
     return 0;
 }
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index 90258d3794..a0a93f2416 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -257,14 +257,14 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
                            "\tList mempool (entries or transaction) for (selected chain network or wallet)\n"
                            "mempool check -net <net_name> [-chain <chain_name>] -datum <datum_hash>\n"
                            "\tCheck mempool entrie for presence in selected chain network\n"
-                           "mempool proc -net <net_name> -chain <chain_name> -datum <datum_hash>\n"
+                           "mempool proc -net <net_name> [-chain <chain_name>] -datum <datum_hash>\n"
                            "\tProc mempool entrie with specified hash for selected chain network\n"
                            "\tCAUTION!!! This command will process transaction with any comission! Parameter minimum_comission will not be taken into account!\n"
                            "mempool proc_all -net <net_name> -chain <chain_name>\n"
                            "\tProc mempool all entries for selected chain network\n"
-                           "mempool delete -net <net_name> -chain <chain_name> -datum <datum_hash>\n"
+                           "mempool delete -net <net_name> [-chain <chain_name>] -datum <datum_hash>\n"
                            "\tDelete datum with hash <datum hash> for selected chain network\n"
-                           "mempool dump -net <net_name> -chain <chain_name> -datum <datum_hash>\n"
+                           "mempool dump -net <net_name> [-chain <chain_name>] -datum <datum_hash>\n"
                            "\tOutput information about datum in mempool\n"
                            "mempool add_ca -net <net_name> [-chain <chain_name>] -ca_name <pub_cert_name>\n"
                            "\tAdd pubic certificate into the mempool to prepare its way to chains\n"
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 6d3267ed48..12f99b9e75 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -109,6 +109,18 @@
 
 int _cmd_mempool_add_ca(dap_chain_net_t *a_net, dap_chain_t *a_chain, dap_cert_t *a_cert, void **a_str_reply);
 
+dap_chain_t *s_get_chain_with_datum(dap_chain_net_t *a_net, const char *a_datum_hash) {
+    dap_chain_t *l_chain = NULL;
+    DL_FOREACH(a_net->pub.chains, l_chain) {
+        char *l_gdb_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain);
+        bool is_hash = dap_global_db_driver_is(l_gdb_mempool, a_datum_hash);
+        DAP_DELETE(l_gdb_mempool);
+        if (is_hash)
+            return l_chain;
+    }
+    return NULL;
+}
+
 /**
  * @brief node_info_read_and_reply
  * Read node from base
@@ -3140,16 +3152,6 @@ static int mempool_delete_for_chain(dap_chain_t *a_chain, const char * a_datum_h
             return 1;
         }
         if (dap_global_db_del_sync(l_gdb_group_mempool, a_datum_hash_str) == 0) {
-            char *l_msg_str = dap_strdup_printf("Datum %s deleted", a_datum_hash_str);
-            json_object *l_msg = json_object_new_string(l_msg_str);
-            DAP_DELETE(l_msg_str);
-            if (!l_msg) {
-                dap_json_rpc_allocation_error;
-                DAP_DELETE(l_gdb_group_mempool);
-                DAP_DELETE(l_data_tmp);
-                return DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
-            }
-            json_object_array_add(*a_json_reply, l_msg);
             DAP_DELETE(l_gdb_group_mempool);
             DAP_DELETE(l_data_tmp);
             return 0;
@@ -3180,30 +3182,40 @@ int _cmd_mempool_delete(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char
         return COM_MEMPOOL_DELETE_ERR_DATUM_NOT_FOUND_IN_ARGUMENT;
     }
     int res = 0;
+    json_object *l_jobj_ret = json_object_new_object();
+    json_object *l_jobj_net = json_object_new_string(a_net->pub.name);
+    json_object *l_jobj_chain = NULL;
+    json_object *l_jobj_datum_hash = json_object_new_string(a_datum_hash);
     if (!a_chain) {
-        dap_chain_t * l_chain;
-        DL_FOREACH(a_net->pub.chains, l_chain){
+        dap_chain_t * l_chain = s_get_chain_with_datum(a_net, a_datum_hash);
+        if (l_chain) {
             res = mempool_delete_for_chain(l_chain, a_datum_hash, a_json_reply);
-            if (res == 0) {
-                break;
-            }
+            l_jobj_chain = json_object_new_string(l_chain->name);
+        } else {
+            res = 1;
+            l_jobj_chain = json_object_new_string("empty chain parameter");
         }
     } else {
         res = mempool_delete_for_chain(a_chain, a_datum_hash, a_json_reply);
+        l_jobj_chain = json_object_new_string(a_chain->name);
+    }
+    json_object_object_add(l_jobj_ret, "net", l_jobj_net);
+    json_object_object_add(l_jobj_ret, "chain", l_jobj_chain);
+    json_object_object_add(l_jobj_ret, "hash", l_jobj_datum_hash);
+    json_object_object_add(l_jobj_ret, "action", json_object_new_string("delete"));
+    json_object *l_jobj_ret_code = json_object_new_int(res);
+    json_object_object_add(l_jobj_ret, "retCode", l_jobj_ret_code);
+    json_object *l_jobj_status = NULL;
+    if (!res) {
+        l_jobj_status = json_object_new_string("deleted");
+    } else if (res == 1) {
+        l_jobj_status = json_object_new_string("datum not found");
+    } else {
+        l_jobj_status = json_object_new_string("datum was found but could not be deleted");
     }
+    json_object_object_add(l_jobj_ret, "status", l_jobj_status);
+    json_object_array_add(*a_json_reply, l_jobj_ret);
     if (res) {
-        char *l_msg_str = dap_strdup_printf("Error! Can't %s datum %s", res == 1 ? "find" : "delete", a_datum_hash);
-        if (!l_msg_str) {
-            dap_json_rpc_allocation_error;
-            return DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
-        }
-        json_object *l_msg = json_object_new_string(l_msg_str);
-        DAP_DELETE(l_msg_str);
-        if (!l_msg) {
-            dap_json_rpc_allocation_error;
-            return DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
-        }
-        json_object_array_add(*a_json_reply, l_msg);
         return COM_MEMPOOL_DELETE_ERR_DATUM_NOT_FOUND;
     }
     return 0;
@@ -3406,9 +3418,10 @@ int _cmd_mempool_proc(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *
                                "Need master node role or higher for network %s to process this command", a_net->pub.name);
         return DAP_COM_MEMPOOL_PROC_LIST_ERROR_NODE_ROLE_NOT_FULL;
     }
+    dap_chain_t *l_chain = !a_chain ? s_get_chain_with_datum(a_net, a_datum_hash) : a_chain;
 
     int ret = 0;
-    char *l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(a_chain);
+    char *l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain);
     if (!l_gdb_group_mempool){
         dap_json_rpc_error_add(DAP_COM_MEMPOOL_PROC_LIST_ERROR_CAN_NOT_GROUP_NAME,
                                "Failed to get mempool group name on network %s", a_net->pub.name);
@@ -3668,7 +3681,7 @@ int _cmd_mempool_dump(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *
     } else {
         dap_chain_t *l_chain = NULL;
         DL_FOREACH(a_net->pub.chains, l_chain){
-            char *l_group_mempool = dap_chain_net_get_gdb_group_mempool_new(a_chain);
+            char *l_group_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain);
             if (!_cmd_mempool_dump_from_group(a_net->pub.id, l_group_mempool, a_datum_hash, a_hash_out_type, a_json_reply)){
                 DAP_DELETE(l_group_mempool);
                 break;
@@ -3800,10 +3813,6 @@ int com_mempool(int a_argc, char **a_argv, void **a_str_reply)
             ret = _cmd_mempool_proc_all(l_net, l_chain, a_str_reply);
         } break;
         case SUBCMD_DELETE: {
-            if (!l_chain) {
-                dap_json_rpc_error_add(-2, "The chain parameter was not specified or was specified incorrectly.");
-                ret = -2;
-            }
             if (l_datum_hash) {
                 ret = _cmd_mempool_delete(l_net, l_chain, l_datum_hash, a_str_reply);
             } else {
@@ -4898,13 +4907,16 @@ int com_token_emit(int a_argc, char **a_argv, void **a_str_reply)
         }
 
         dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-chain_emission", &l_chain_emission_str);
-        if(l_chain_emission_str) {
-            if((l_chain_emission = dap_chain_net_get_chain_by_name(l_net, l_chain_emission_str)) == NULL) { // Can't find such chain
-                dap_cli_server_cmd_set_reply_text(a_str_reply,
-                                      "token_emit requires parameter '-chain_emission' to be valid chain name in chain net %s"
-                                      " or set default datum type in chain configuration file", l_net->pub.name);
-                return -45;
-            }
+        if(l_chain_emission_str)
+            l_chain_emission = dap_chain_net_get_chain_by_name(l_net, l_chain_emission_str);
+        else
+            l_chain_emission = dap_chain_net_get_default_chain_by_chain_type(l_net, CHAIN_TYPE_EMISSION);
+
+        if (l_chain_emission == NULL) { // Can't find such chain
+            dap_cli_server_cmd_set_reply_text(a_str_reply,
+                                              "token_emit requires parameter '-chain_emission' to be valid chain name in chain net %s"
+                                              " or set default datum type in chain configuration file", l_net->pub.name);
+            return -45;
         }
     } else {
         if (l_emission_hash_str) {
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 99ea171cf9..a8b7ece6ff 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -172,58 +172,58 @@ int dap_chain_cs_blocks_init()
     s_debug_more = dap_config_get_item_bool_default(g_config, "blocks", "debug_more", false);
     dap_cli_server_cmd_add ("block", s_cli_blocks, "Create and explore blockchains",
         "New block create, fill and complete commands:\n"
-            "block -net <net_name> -chain <chain_name> new\n"
+            "block -net <net_name> [-chain <chain_name>] new\n"
                 "\t\tCreate new block and flush memory if was smth formed before\n\n"
 
-            "block -net <net_name> -chain <chain_name> new_datum_add <datum_hash>\n"
+            "block -net <net_name> [-chain <chain_name>] new_datum_add <datum_hash>\n"
                 "\t\tAdd block section from datum <datum hash> taken from the mempool\n\n"
 
-            "block -net <net_name> -chain <chain_name> new_datum_del <datum_hash>\n"
+            "block -net <net_name> [-chain <chain_name>] new_datum_del <datum_hash>\n"
                 "\t\tDel block section with datum <datum hash>\n\n"
 
-            "block -net <net_name> -chain <chain_name> new_datum_list\n"
+            "block -net <net_name> [-chain <chain_name>] new_datum_list\n"
                 "\t\tList block sections and show their datums hashes\n\n"
 
-            "block -net <net_name> -chain <chain_name> new_datum\n\n"
+            "block -net <net_name> [-chain <chain_name>] new_datum\n\n"
                 "\t\tComplete the current new round, verify it and if everything is ok - publish new blocks in chain\n\n"
 
         "Blockchain explorer:\n"
-            "block -net <net_name> -chain <chain_name> dump <block_hash>\n"
+            "block -net <net_name> [-chain <chain_name>] dump <block_hash>\n"
                 "\t\tDump block info\n\n"
 
-            "block -net <net_name> -chain <chain_name> list [{signed | first_signed}] [-limit] [-offset]"
+            "block -net <net_name> [-chain <chain_name>] list [{signed | first_signed}] [-limit] [-offset]"
             " [-from_hash <block_hash>] [-to_hash <block_hash>] [-from_date <YYMMDD>] [-to_date <YYMMDD>]"
             " [{-cert <signing_cert_name> | -pkey_hash <signing_cert_pkey_hash>} [-unspent]]\n"
                 "\t\t List blocks\n\n"
 
-            "block -net <net_name> -chain <chain_name> count\n"
+            "block -net <net_name> [-chain <chain_name>] count\n"
                 "\t\t Show count block\n\n"
 
         "Commission collect:\n"
-            "block -net <net_name> -chain <chain_name> fee collect"
+            "block -net <net_name> [-chain <chain_name>] fee collect"
             " -cert <priv_cert_name> -addr <addr> -hashes <hashes_list> -fee <value>\n"
                 "\t\t Take delegated part of commission\n\n"
 
         "Reward for block signs:\n"
-            "block -net <net_name> -chain <chain_name> reward set"
+            "block -net <net_name> [-chain <chain_name>] reward set"
             " -cert <poa_cert_name> -value <value>\n"
                 "\t\t Set base reward for sign for one block at one minute\n\n"
 
-            "block -net <net_name> -chain <chain_name> reward show"
+            "block -net <net_name> [-chain <chain_name>] reward show"
             " -cert <poa_cert_name> -value <value>\n"
                 "\t\t Show base reward for sign for one block at one minute\n\n"
 
-            "block -net <net_name> -chain <chain_name> reward collect"
+            "block -net <net_name> [-chain <chain_name>] reward collect"
             " -cert <priv_cert_name> -addr <addr> -hashes <hashes_list> -fee <value>\n"
                 "\t\t Take delegated part of reward\n\n"
 
         "Rewards and fees autocollect status:\n"
-            "block -net <net_name> -chain <chain_name> autocollect status\n"
+            "block -net <net_name> [-chain <chain_name>] autocollect status\n"
                 "\t\t Show rewards and fees automatic collecting status (enabled or not)."
                     " Show prepared blocks for collecting rewards and fees if status is enabled\n\n"
 
         "Rewards and fees autocollect renew:\n"
-            "block -net <net_name> -chain <chain_name> autocollect renew\n"
+            "block -net <net_name> [-chain <chain_name>] autocollect renew\n"
             " -cert <priv_cert_name> -addr <addr>\n"
                 "\t\t Update reward and fees block table."
                     " Automatic collection of commission in case of triggering of the setting\n\n"
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 5a3555f1dd..9e574fff9a 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -150,19 +150,19 @@ int dap_chain_cs_dag_init()
     s_debug_more        = dap_config_get_item_bool_default(g_config, "dag",     "debug_more",       false);
     s_threshold_enabled = dap_config_get_item_bool_default(g_config, "dag",     "threshold_enabled",false);
     debug_if(s_debug_more, L_DEBUG, "Thresholding %s", s_threshold_enabled ? "enabled" : "disabled");
-    dap_cli_server_cmd_add ("dag", s_cli_dag, "DAG commands",        
-        "dag event sign -net <net_name> -chain <chain_name> -event <event_hash>\n"
+    dap_cli_server_cmd_add ("dag", s_cli_dag, "DAG commands",
+        "dag event sign -net <net_name> [-chain <chain_name>] -event <event_hash>\n"
             "\tAdd sign to event <event hash> in round.new. Hash doesn't include other signs so event hash\n"
             "\tdoesn't changes after sign add to event. \n\n"
-        "dag event dump -net <net_name> -chain <chain_name> -event <event_hash> -from {events | events_lasts | threshold | round.new  | round.<Round id in hex>} [-H {hex | base58(default)}]\n"
+        "dag event dump -net <net_name> [-chain <chain_name>] -event <event_hash> -from {events | events_lasts | threshold | round.new  | round.<Round id in hex>} [-H {hex | base58(default)}]\n"
             "\tDump event info\n\n"
-        "dag event list -net <net_name> -chain <chain_name> -from {events | events_lasts | threshold | round.new | round.<Round id in hex>} [-limit] [-offset]\n\n"
+        "dag event list -net <net_name> [-chain <chain_name>] -from {events | events_lasts | threshold | round.new | round.<Round id in hex>} [-limit] [-offset]\n\n"
             "\tShow event list \n\n"
-        "dag event count -net <net_name> -chain <chain_name>\n"
+        "dag event count -net <net_name> [-chain <chain_name>]\n"
             "\tShow count event \n\n"
-        "dag round complete -net <net_name> -chain <chain_name> \n"
+        "dag round complete -net <net_name> [-chain <chain_name>] \n"
                                         "\tComplete the current new round, verify it and if everything is ok - publish new events in chain\n"
-        "dag round find -net <net_name> -chain <chain_name> -datum <datum_hash> \n"
+        "dag round find -net <net_name> [-chain <chain_name>] -datum <datum_hash> \n"
             "\tSearches for rounds that have events that contain the specified datum.\n\n"
                                         );
     log_it(L_NOTICE,"Initialized DAG chain items organization class");
@@ -1368,14 +1368,14 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
 
     if ((l_net == NULL) || (l_chain == NULL)){
         return -1;
-    } 
+    }
     l_dag = DAP_CHAIN_CS_DAG(l_chain);
 
     const char *l_chain_type = dap_chain_get_cs_type(l_chain);
 
     if (!strstr(l_chain_type, "dag_")){
             dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_CHAIN_TYPE_ERR,"Type of chain %s is not dag. This chain with type %s is not supported by this command",
-                        l_chain->name, l_chain_type);            
+                        l_chain->name, l_chain_type);
             return -DAP_CHAIN_NODE_CLI_COM_DAG_CHAIN_TYPE_ERR;
     }
 
@@ -1411,7 +1411,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                 size_t l_event_size = l_round_item->event_size;
                 dap_hash_fast(l_event, l_event_size, &l_event_hash);
                 int l_ret_event_verify;
-                if ( ( l_ret_event_verify = l_dag->callback_cs_verify (l_dag,l_event,l_event_size) ) !=0 ){// if consensus accept the event                                        
+                if ( ( l_ret_event_verify = l_dag->callback_cs_verify (l_dag,l_event,l_event_size) ) !=0 ){// if consensus accept the event
                     dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_EVENT_ERR,"Error! Event %s is not passing consensus verification, ret code %d\n",
                                               l_objs[i].key, l_ret_event_verify );
                     ret = -DAP_CHAIN_NODE_CLI_COM_DAG_EVENT_ERR;
@@ -1423,7 +1423,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                     if ( ! l_verify_only ){
                         if (s_chain_callback_atom_add(l_chain, l_event, l_event_size, &l_event_hash)!= ATOM_ACCEPT) { // Add new atom in chain
                             snprintf(l_buf, 150, "Event %s not added in chain\n", l_objs[i].key);
-                            json_object_object_add(json_obj_round,"status add", json_object_new_string(l_buf));                            
+                            json_object_object_add(json_obj_round,"status add", json_object_new_string(l_buf));
                         } else {
                             // add event to delete
                             l_list_to_del = dap_list_prepend(l_list_to_del, (void *)l_objs[i].key);
@@ -1497,13 +1497,13 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
             }
             dap_global_db_objs_delete(l_objs, l_objs_size);
             DAP_DELETE(l_datum_in_hash);
-            if (!l_search_events) {                  
+            if (!l_search_events) {
                 snprintf(l_buf, 150, "Datum hash %s not found in round event.\n", l_datum_hash_str);
                 json_object_object_add(json_obj_round,"find result", json_object_new_string(l_buf));
-            }            
+            }
             return 0;
         }
-    }else if ( l_event_cmd_str  ) {        
+    }else if ( l_event_cmd_str  ) {
         char *l_datum_hash_hex_str = NULL;
         char *l_datum_hash_base58_str = NULL;
         if ( strcmp( l_event_cmd_str, "list" ) == 0 ) {
@@ -1539,7 +1539,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
         if (l_event_hash_hex_str)
             dap_chain_hash_fast_from_str(l_event_hash_hex_str, &l_event_hash);
 
-        switch (l_event_subcmd) {        
+        switch (l_event_subcmd) {
 
         case SUBCMD_EVENT_DUMP: {
             json_object * json_obj_event = json_object_new_object();
@@ -1565,7 +1565,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         l_event = l_event_item->event;
                     else {
                         ret = -DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR;
-                        dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR,"Can't find event %s in events_last table\n", l_event_hash_str);                        
+                        dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR,"Can't find event %s in events_last table\n", l_event_hash_str);
                         break;
                     }
                 } else if (!l_from_events_str || strcmp(l_from_events_str,"events") == 0) {
@@ -1578,7 +1578,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         l_event_size = l_event_item->event_size;
                     } else {
                         ret = -DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR;
-                        dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR,"Can't find event %s in events table\n", l_event_hash_str);                        
+                        dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR,"Can't find event %s in events table\n", l_event_hash_str);
                         break;
                     }
                 } else if (l_from_events_str && strcmp(l_from_events_str,"threshold") == 0) {
@@ -1590,13 +1590,13 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         l_event = l_event_item->event;
                     else {
                         ret = -DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR;
-                        dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR,"Can't find event %s in threshold table\n", l_event_hash_str);                        
+                        dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_FIND_ERR,"Can't find event %s in threshold table\n", l_event_hash_str);
                         break;
                     }
                 } else {
                     ret = -DAP_CHAIN_NODE_CLI_COM_DAG_PARAM_ERR;
                     dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_DAG_PARAM_ERR,
-                            "Wrong events_from option \"%s\", need one of variant: events, round.new, events_lasts, threshold", l_from_events_str);                    
+                            "Wrong events_from option \"%s\", need one of variant: events, round.new, events_lasts, threshold", l_from_events_str);
                     break;
 
                 }
@@ -1611,7 +1611,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         json_object_object_add(json_obj_event,"ts_update", json_object_new_string(buf));
                         dap_nanotime_to_str_rfc822(buf, DAP_TIME_STR_SIZE, l_round_item->round_info.ts_update);
                         json_object_object_add(json_obj_event,"datum_hash", json_object_new_string(dap_chain_hash_fast_to_str_static(&l_round_item->round_info.datum_hash)));
-                        json_object_object_add(json_obj_event,"ts_update", json_object_new_string(buf));                        
+                        json_object_object_add(json_obj_event,"ts_update", json_object_new_string(buf));
                     }
 
                     // Header
@@ -1648,7 +1648,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                     dap_time_to_str_rfc822(buf, DAP_TIME_STR_SIZE, l_datum->header.ts_create);
                     json_object_object_add(json_obj_event,"ts_create", json_object_new_string(buf));
                     json_object_object_add(json_obj_event,"data_size", json_object_new_uint64(l_datum->header.data_size));
-                    
+
                     // Signatures
                     json_object_object_add(json_obj_event,"signs count", json_object_new_uint64(l_event->header.signs_count));
                     l_offset += l_datum_size;
@@ -1667,7 +1667,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
 
                         json_object_object_add(json_obj_event,"type", json_object_new_string(dap_sign_type_to_str( l_sign->header.type )));
                         json_object_object_add(json_obj_event,"pkey_hash", json_object_new_string(l_hash_str));
-                        
+
                         l_offset += l_sign_size;
                     }
                     dap_chain_datum_dump_json(json_obj_event, l_datum, l_hash_out_type, l_net->pub.id);
@@ -1687,24 +1687,24 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                 json_object * json_arr_obj_event = json_object_new_array();
                 const char *l_limit_str = NULL, *l_offset_str = NULL;
                 dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-limit", &l_limit_str);
-                dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-offset", &l_offset_str);                
+                dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-offset", &l_offset_str);
                 char *ptr;
                 size_t l_limit = l_limit_str ? strtoull(l_limit_str, &ptr, 10) : 1000;
                 size_t l_offset = l_offset_str ? strtoull(l_offset_str, &ptr, 10) : 0;
                 if (l_offset)
-                    json_object_object_add(json_obj_event_list,"offset", json_object_new_uint64(l_offset));                
+                    json_object_object_add(json_obj_event_list,"offset", json_object_new_uint64(l_offset));
                 if (l_limit)
                     json_object_object_add(json_obj_event_list,"limit", json_object_new_uint64(l_limit));
-                    
+
                 if (l_from_events_str && strcmp(l_from_events_str,"round.new") == 0) {
                     char * l_gdb_group_events = DAP_CHAIN_CS_DAG(l_chain)->gdb_group_events_round_new;
                     if ( l_gdb_group_events ){
                         dap_global_db_obj_t * l_objs;
                         size_t l_objs_count = 0;
-                        l_objs = dap_global_db_get_all_sync(l_gdb_group_events,&l_objs_count);                        
+                        l_objs = dap_global_db_get_all_sync(l_gdb_group_events,&l_objs_count);
                         size_t l_arr_start = 0;
                         if (l_offset) {
-                            l_arr_start = l_offset;                           
+                            l_arr_start = l_offset;
                         }
                         size_t l_arr_end = l_objs_count;
                         if (l_limit) {
@@ -1714,13 +1714,13 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         }
                         json_object_object_add(json_obj_event_list,"net name", json_object_new_string(l_net->pub.name));
                         json_object_object_add(json_obj_event_list,"chain", json_object_new_string(l_chain->name));
-                        json_object_object_add(json_obj_event_list,"obj count", json_object_new_uint64(l_objs_count));                        
+                        json_object_object_add(json_obj_event_list,"obj count", json_object_new_uint64(l_objs_count));
 
                         for (size_t i = l_arr_start; i < l_arr_end; i++) {
                             json_object * json_obj_event_i = json_object_new_object();
                             if (!strcmp(DAG_ROUND_CURRENT_KEY, l_objs[i].key)) {
-                                json_object_object_add(json_obj_event_i, l_objs[i].key, json_object_new_uint64(*(uint64_t *)l_objs[i].value)); 
-                                json_object_array_add(json_arr_obj_event, json_obj_event_i);                               
+                                json_object_object_add(json_obj_event_i, l_objs[i].key, json_object_new_uint64(*(uint64_t *)l_objs[i].value));
+                                json_object_array_add(json_arr_obj_event, json_obj_event_i);
                                 continue;
                             }
                             dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)
@@ -1741,12 +1741,12 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         ret = -2;
 
                     }
-                    json_object_array_add(*json_arr_reply, json_obj_event_list);   
+                    json_object_array_add(*json_arr_reply, json_obj_event_list);
                 } else if (!l_from_events_str || (strcmp(l_from_events_str,"events") == 0)) {
-                    pthread_mutex_lock(&PVT(l_dag)->events_mutex);                    
+                    pthread_mutex_lock(&PVT(l_dag)->events_mutex);
                     size_t l_arr_start = 0;
                     if (l_offset > 0) {
-                        l_arr_start = l_offset;                        
+                        l_arr_start = l_offset;
                     }
                     size_t l_arr_end = HASH_COUNT(PVT(l_dag)->events);
                     if (l_limit) {
@@ -1766,8 +1766,8 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                             dap_time_to_str_rfc822(buf, DAP_TIME_STR_SIZE, l_event_item->event->header.ts_created);
                             json_object_object_add(json_obj_event_i, "#", json_object_new_string(dap_itoa(i_tmp)));
                             json_object_object_add(json_obj_event_i, "hash", json_object_new_string(dap_chain_hash_fast_to_str_static(&l_event_item->hash)));
-                            json_object_object_add(json_obj_event_i, "ts_create", json_object_new_string(buf)); 
-                            json_object_array_add(json_arr_obj_event, json_obj_event_i);                           
+                            json_object_object_add(json_obj_event_i, "ts_create", json_object_new_string(buf));
+                            json_object_array_add(json_arr_obj_event, json_obj_event_i);
                         }
                     }
                     json_object_object_add(json_obj_event_list, "EVENTS", json_arr_obj_event);
@@ -1778,7 +1778,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                     json_object_object_add(json_obj_event_list,"chain", json_object_new_string(l_chain->name));
                     json_object_object_add(json_obj_event_list,"total events", json_object_new_uint64(l_events_count));
 
-                    json_object_array_add(*json_arr_reply, json_obj_event_list);                                       
+                    json_object_array_add(*json_arr_reply, json_obj_event_list);
                 }else if (l_from_events_str && (strcmp(l_from_events_str,"threshold") == 0) ){
                     pthread_mutex_lock(&PVT(l_dag)->events_mutex);
                     dap_chain_cs_dag_event_item_t * l_event_item = NULL,*l_event_item_tmp = NULL;
@@ -1804,8 +1804,8 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         dap_time_to_str_rfc822(buf, DAP_TIME_STR_SIZE, l_event_item->event->header.ts_created);
                         json_object_object_add(json_obj_event_i, "#", json_object_new_string(dap_itoa(i_tmp)));
                         json_object_object_add(json_obj_event_i, "hash", json_object_new_string(dap_chain_hash_fast_to_str_static(&l_event_item->hash)));
-                        json_object_object_add(json_obj_event_i, "ts_create", json_object_new_string(buf)); 
-                        json_object_array_add(json_arr_obj_event, json_obj_event_i);                       
+                        json_object_object_add(json_obj_event_i, "ts_create", json_object_new_string(buf));
+                        json_object_array_add(json_arr_obj_event, json_obj_event_i);
                     }
                     json_object_object_add(json_obj_event_list, "TRESHOLD", json_arr_obj_event);
                     size_t l_events_count = HASH_COUNT(PVT(l_dag)->events_treshold);
-- 
GitLab