From 2746fc99013e45d7a8090e7030bf4bf6016bcd14 Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Thu, 27 Jun 2024 16:36:21 +0300
Subject: [PATCH] [*] Timestamps printing unification

---
 dap-sdk                                       |   2 +-
 .../chain-net/dap_stream_ch_chain_net.c       | 140 +++++++++---------
 .../include/dap_stream_ch_chain_net_pkt.h     |   2 +
 modules/net/dap_chain_node_cli_cmd_tx.c       |  14 +-
 .../dap_chain_net_srv_stake_pos_delegate.c    |   3 +-
 .../dap_chain_net_srv_stake_pos_delegate.h    |   1 -
 .../xchange/dap_chain_net_srv_xchange.c       |  29 ++--
 7 files changed, 89 insertions(+), 102 deletions(-)

diff --git a/dap-sdk b/dap-sdk
index d7b44bbf0a..6433d931b9 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit d7b44bbf0a05f38687dba28821502b71e5e7ba80
+Subproject commit 6433d931b917ceb7b71967817acc03c454dabb30
diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c
index 661b934c1d..8707e576fc 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -188,13 +188,19 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg)
                                               l_ch_chain_net_pkt->hdr.net_id,NULL, 0);
             dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
             break;
-            // receive pong request -> send nothing
+
+        // received pong request -> send nothing
         case DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_PONG:
             //log_it(L_INFO, "Get CHAIN_CH_NET_PKT_TYPE_PONG");
             dap_stream_ch_set_ready_to_write_unsafe(a_ch, false);
             break;
 
         case DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY_REQUEST:{
+            if (l_ch_chain_net_pkt->hdr.data_size != DAP_CHAIN_NET_CH_VALIDATOR_READY_REQUEST_SIZE) {
+                log_it(L_WARNING, "Invalid VALIDATOR_READY_REQUEST size %hu, expected %zu", l_ch_chain_net_pkt->hdr.data_size,
+                                                                            DAP_CHAIN_NET_CH_VALIDATOR_READY_REQUEST_SIZE);
+                return false;
+            }
             log_it(L_INFO, "Get CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY_REQUEST");
             dap_chain_net_t * l_net = dap_chain_net_by_id( l_ch_chain_net_pkt->hdr.net_id );
             if ( l_net == NULL){
@@ -203,83 +209,77 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg)
                                                   l_ch_chain_net_pkt->hdr.net_id, l_err_str,sizeof (l_err_str));
                 dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
                 log_it(L_ERROR, "Invalid net id in packet");
-            } else {
-                dap_list_t * l_orders = NULL;
-                dap_enc_key_t *l_enc_key_pvt = NULL;
-                dap_chain_t *l_chain = NULL;
-                DL_FOREACH(l_net->pub.chains, l_chain)
-                    if (!dap_strcmp(dap_chain_get_cs_type(l_chain), "esbocs")) {
-                        l_enc_key_pvt = dap_chain_esbocs_get_sign_key(l_chain);
-                        if (l_enc_key_pvt)
-                            break;
-                    }
-                dap_sign_t *l_sign = NULL;
-                size_t sign_s = 0;
-                size_t l_orders_num = 0;
-                dap_chain_ch_validator_test_t *send = NULL;
-                dap_chain_net_srv_price_unit_uid_t l_price_unit = { { 0 } };
-                dap_chain_net_srv_uid_t l_uid = { .uint64 = DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID };
-                uint256_t l_price_min = {};
-                uint256_t l_price_max = {};
-                uint8_t flags = 0;
-                dap_chain_node_addr_t l_cur_node_addr = {
-                    .uint64 = dap_chain_net_get_cur_addr_int(l_net)
-                };
-
-                if (l_enc_key_pvt) {
-                    flags = flags | F_CERT;//faund sert
-                    l_sign = dap_sign_create(l_enc_key_pvt, (uint8_t*)l_ch_chain_net_pkt->data,
-                                           l_ch_chain_net_pkt->hdr.data_size, 0);
-                    if(l_sign)
-                    {
-                        sign_s = dap_sign_get_size(l_sign);
-                        flags = flags | D_SIGN;//data signed
-                    }
-                    else
-                        flags = flags & ~D_SIGN;//data doesn't sign
+                break;
+            }
+            dap_list_t * l_orders = NULL;
+            dap_enc_key_t *l_enc_key_pvt = NULL;
+            dap_chain_t *l_chain = NULL;
+            DL_FOREACH(l_net->pub.chains, l_chain)
+                if (!dap_strcmp(dap_chain_get_cs_type(l_chain), "esbocs")) {
+                    l_enc_key_pvt = dap_chain_esbocs_get_sign_key(l_chain);
+                    if (l_enc_key_pvt)
+                        break;
                 }
-                else
-                    flags = flags & ~F_CERT;//Specified certificate not found
+            dap_sign_t *l_sign = NULL;
+            size_t sign_s = 0;
+            size_t l_orders_num = 0;
+            dap_chain_ch_validator_test_t *send = NULL;
+            dap_chain_net_srv_price_unit_uid_t l_price_unit = { { 0 } };
+            dap_chain_net_srv_uid_t l_uid = { .uint64 = DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID };
+            uint256_t l_price_min = {};
+            uint256_t l_price_max = {};
+            uint8_t flags = 0;
+
+            if (l_enc_key_pvt) {
+                flags = flags | F_CERT;//faund sert
+                l_sign = dap_sign_create(l_enc_key_pvt, (uint8_t*)l_ch_chain_net_pkt->data, l_ch_chain_net_pkt->hdr.data_size, 0);
+                if (l_sign) {
+                    sign_s = dap_sign_get_size(l_sign);
+                    flags = flags | D_SIGN;//data signed
+                } else
+                    flags = flags & ~D_SIGN;//data doesn't sign
+            }
+            else
+                flags = flags & ~F_CERT;//Specified certificate not found
 
-                send = DAP_NEW_Z_SIZE(dap_chain_ch_validator_test_t, sizeof(dap_chain_ch_validator_test_t) + sign_s);
+            send = DAP_NEW_Z_SIZE(dap_chain_ch_validator_test_t, sizeof(dap_chain_ch_validator_test_t) + sign_s);
 #ifdef DAP_VERSION
-                strncpy((char *)send->header.version, (char *)DAP_VERSION, sizeof(send->header.version));
+            strncpy((char *)send->header.version, (char *)DAP_VERSION, sizeof(send->header.version));
 #endif
-                send->header.sign_size = sign_s;
-                //strncpy(send->header.data,(uint8_t*)l_ch_chain_net_pkt->data,10);
-                flags = (l_net->pub.mempool_autoproc) ? flags | A_PROC : flags & ~A_PROC;
+            send->header.sign_size = sign_s;
+            //strncpy(send->header.data,(uint8_t*)l_ch_chain_net_pkt->data,10);
+            flags = (l_net->pub.mempool_autoproc) ? flags | A_PROC : flags & ~A_PROC;
 
-                if (dap_chain_net_srv_order_find_all_by(l_net,SERV_DIR_UNDEFINED,l_uid,
-                                                    l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num)==0){
-                    for (dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next){
-                        dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data;
-                        if(l_order->node_addr.uint64 == l_cur_node_addr.uint64)
-                        {
-                            flags = flags | F_ORDR;
-                            break;
-                        }
+            if (dap_chain_net_srv_order_find_all_by(l_net,SERV_DIR_UNDEFINED,l_uid,
+                                                l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num)==0){
+                for (dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next){
+                    dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data;
+                    if(l_order->node_addr.uint64 == g_node_addr.uint64)
+                    {
+                        flags = flags | F_ORDR;
+                        break;
                     }
-                    dap_list_free_full(l_orders, NULL);
                 }
-                bool auto_online = dap_config_get_item_bool_default( g_config, "general", "auto_online", false );
-                bool auto_update = false;
-                if((system("systemctl status cellframe-updater.service") == 768) && (system("systemctl status cellframe-updater.timer") == 0))
-                    auto_update = true;
-                else
-                    auto_update = false;
-                flags = auto_online ? flags | A_ONLN : flags & ~A_ONLN;
-                flags = auto_update ? flags | A_UPDT : flags & ~A_UPDT;
-                send->header.flags = flags;
-                //add sign
-                if(sign_s)
-                    memcpy(send->sign,l_sign,sign_s);
-                dap_stream_ch_chain_net_pkt_write(a_ch, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY ,
-                                                 l_ch_chain_net_pkt->hdr.net_id, send, sizeof(dap_chain_ch_validator_test_t) + sign_s);
-                dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
-                if(l_sign)
-                    DAP_DELETE(l_sign);
-                DAP_DELETE(send);
+                dap_list_free_full(l_orders, NULL);
             }
+            bool auto_online = dap_config_get_item_bool_default( g_config, "general", "auto_online", false );
+            bool auto_update = false;
+            if((system("systemctl status cellframe-updater.service") == 768) && (system("systemctl status cellframe-updater.timer") == 0))
+                auto_update = true;
+            else
+                auto_update = false;
+            flags = auto_online ? flags | A_ONLN : flags & ~A_ONLN;
+            flags = auto_update ? flags | A_UPDT : flags & ~A_UPDT;
+            send->header.flags = flags;
+            //add sign
+            if(sign_s)
+                memcpy(send->sign,l_sign,sign_s);
+            dap_stream_ch_chain_net_pkt_write(a_ch, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY ,
+                                             l_ch_chain_net_pkt->hdr.net_id, send, sizeof(dap_chain_ch_validator_test_t) + sign_s);
+            dap_stream_ch_set_ready_to_write_unsafe(a_ch, true);
+            if(l_sign)
+                DAP_DELETE(l_sign);
+            DAP_DELETE(send);
         } break;
 
         case DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY:{
diff --git a/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h b/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h
index d6a9573c7d..983a290cdc 100644
--- a/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h
+++ b/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h
@@ -45,6 +45,8 @@
 
 #define DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ERROR                          0xff
 
+#define DAP_CHAIN_NET_CH_VALIDATOR_READY_REQUEST_SIZE                   1024
+
 typedef struct stream_ch_chain_net_pkt_hdr {
     uint8_t version;
     byte_t padding;
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 709cfb6dc1..18174820bb 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -98,7 +98,6 @@ bool s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                           const char *a_hash_out_type,
                                           dap_chain_hash_fast_t *a_tx_hash)
 {
-    dap_time_t l_ts_create = (dap_time_t)a_datum->header.ts_created;
     char l_tx_hash_str[70]={0};
     char l_tmp_buf[DAP_TIME_STR_SIZE];
     const char *l_ticker = a_ledger
@@ -107,7 +106,7 @@ bool s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
     if (!l_ticker)
         return false;
     const char *l_description = dap_ledger_get_description_by_ticker(a_ledger, l_ticker);
-    dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_ts_create);
+    dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, a_datum->header.ts_created);
     dap_chain_hash_fast_to_str(a_tx_hash,l_tx_hash_str,sizeof(l_tx_hash_str));
     json_object_object_add(json_obj_out, "Datum_tx_hash", json_object_new_string(l_tx_hash_str));
     json_object_object_add(json_obj_out, "TS_Created", json_object_new_string(l_tmp_buf));
@@ -212,10 +211,7 @@ json_object * dap_db_tx_history_to_json(dap_chain_hash_fast_t* a_tx_hash,
     }
 
     char l_time_str[DAP_TIME_STR_SIZE];
-    if (l_tx->header.ts_created) {
-        dap_time_to_str_rfc822(l_time_str, DAP_TIME_STR_SIZE, l_tx->header.ts_created);/* Convert ts to  "Sat May 17 01:17:08 2014\n" */
-        l_time_str[strlen(l_time_str)-1] = '\0';                    /* Remove "\n"*/
-    }
+    dap_time_to_str_rfc822(l_time_str, DAP_TIME_STR_SIZE, l_tx->header.ts_created); /* Convert ts to  "Sat May 17 01:17:08 2014" */
     json_object *l_obj_ts_created = json_object_new_string(l_time_str);
     json_object_object_add(json_obj_datum, "tx_created", l_obj_ts_created);
     
@@ -265,10 +261,8 @@ static void s_tx_header_print(json_object* json_obj_datum, dap_chain_tx_hash_pro
     bool l_declined = false;
     // transaction time
     char l_time_str[DAP_TIME_STR_SIZE] = "unknown";                                /* Prefill string */
-    if (a_tx->header.ts_created) {
-        dap_time_to_str_rfc822(l_time_str, DAP_TIME_STR_SIZE, a_tx->header.ts_created); /* Convert ts to  "Sat May 17 01:17:08 2014\n" */
-        l_time_str[strlen(l_time_str)-1] = '\0';                    /* Remove "\n"*/
-    }
+    if (a_tx->header.ts_created)
+        dap_time_to_str_rfc822(l_time_str, DAP_TIME_STR_SIZE, a_tx->header.ts_created); /* Convert ts to  "Sat May 17 01:17:08 2014" */
     dap_chain_tx_hash_processed_ht_t *l_tx_data = NULL;
     HASH_FIND(hh, *a_tx_data_ht, a_tx_hash, sizeof(*a_tx_hash), l_tx_data);
     if (l_tx_data)  // this tx already present in ledger (double)
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 e7c6ef1816..da0faa4edc 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
@@ -2216,9 +2216,8 @@ static int s_callback_compare_tx_list(dap_list_t *a_datum1, dap_list_t *a_datum2
 int dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_chain_ch_validator_test_t * out_data,
                                              int a_time_connect, int a_time_respone)
 {
-    char *l_key = NULL;
     size_t l_node_info_size = 0;
-    uint8_t l_test_data[1024] = {0};
+    uint8_t l_test_data[DAP_CHAIN_NET_CH_VALIDATOR_READY_REQUEST_SIZE] = {0};
     dap_chain_node_client_t *l_node_client = NULL;
     dap_chain_node_info_t *l_remote_node_info = NULL;
     dap_ledger_t *l_ledger = dap_ledger_by_net_name(a_net->pub.name);
diff --git a/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h b/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h
index 0469a280fc..19ca297c30 100644
--- a/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h
+++ b/modules/service/stake/include/dap_chain_net_srv_stake_pos_delegate.h
@@ -45,7 +45,6 @@ typedef struct dap_chain_net_srv_stake_item {
     UT_hash_handle hh, ht;
 } dap_chain_net_srv_stake_item_t;
 
-
 typedef struct dap_chain_net_srv_stake_cache_data {
     dap_chain_hash_fast_t tx_hash;
     dap_chain_addr_t signing_addr;
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index e0cd881759..0040e2d36f 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -1568,17 +1568,14 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
 
             l_cp_rate = dap_chain_balance_to_coins(l_price->rate); // must be free'd
 
-            char l_tmp_buf[DAP_TIME_STR_SIZE] = {};
-            dap_time_t l_ts_create = (dap_time_t)l_tx->header.ts_created;
-            dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_ts_create);
-            l_tmp_buf[strlen(l_tmp_buf) - 1] = '\0';
-
+            char l_tmp_buf[DAP_TIME_STR_SIZE];
+            dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_tx->header.ts_created);
             if (l_out_cond_last_tx)
                 l_amount_datoshi_str = dap_uint256_to_char(l_out_cond_last_tx->header.value, &l_amount_coins_str);
 
-            dap_cli_server_cmd_set_reply_text(a_str_reply, "orderHash: %s\n ts_created: %s (%"DAP_UINT64_FORMAT_U")\n Status: %s, amount: %s (%s) %s, filled: %lu%%, rate (%s/%s): %s, net: %s\n\n",
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "orderHash: %s\n ts_created: %s\n Status: %s, amount: %s (%s) %s, filled: %lu%%, rate (%s/%s): %s, net: %s\n\n",
                                      dap_chain_hash_fast_to_str_static(&l_tx_hash),
-                                     l_tmp_buf, l_ts_create, l_status_order,
+                                     l_tmp_buf, l_status_order,
                                      l_amount_coins_str ? l_amount_coins_str : "0.0",
                                      l_amount_datoshi_str ? l_amount_datoshi_str : "0",
                                      l_price->token_sell, l_percent_completed,
@@ -2118,16 +2115,13 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
                 uint64_t l_percent_completed = dap_chain_net_srv_xchange_get_order_completion_rate(l_net, l_tx_hash);
 
                 char l_tmp_buf[DAP_TIME_STR_SIZE];
-                dap_time_t l_ts_create = l_tx->header.ts_created;
-                dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_ts_create);
-                l_tmp_buf[strlen(l_tmp_buf) - 1] = '\0';
-
+                dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_tx->header.ts_created);
                 l_cp_rate = dap_chain_balance_to_coins(l_price->rate);
 
                 const char *l_amount_coins_str = NULL,
                      *l_amount_datoshi_str = l_out_cond_last_tx ? dap_uint256_to_char(l_out_cond_last_tx->header.value, &l_amount_coins_str) : NULL;
-                dap_string_append_printf(l_reply_str, "orderHash: %s\n ts_created: %s (%"DAP_UINT64_FORMAT_U")\n Status: %s, amount: %s (%s) %s, filled: %lu%%, rate (%s/%s): %s, net: %s\n\n", l_tx_hash_str,
-                                         l_tmp_buf, l_ts_create, l_status_order,
+                dap_string_append_printf(l_reply_str, "orderHash: %s\n ts_created: %s\n Status: %s, amount: %s (%s) %s, filled: %lu%%, rate (%s/%s): %s, net: %s\n\n", l_tx_hash_str,
+                                         l_tmp_buf, l_status_order,
                                          l_amount_coins_str ? l_amount_coins_str : "0.0",
                                          l_amount_datoshi_str ? l_amount_datoshi_str : "0",
                                          l_price->token_sell, l_percent_completed,
@@ -2428,12 +2422,11 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
 
                     char l_tmp_buf[DAP_TIME_STR_SIZE];
                     dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_last_rate_time);
-                    l_tmp_buf[strlen(l_tmp_buf) - 1] = '\0';
                     const char *l_rate_average_str; dap_uint256_to_char(l_rate_average, &l_rate_average_str);
-                    dap_string_append_printf(l_reply_str,"Average rate: %s   \r\n", l_rate_average_str);
+                    dap_string_append_printf(l_reply_str,"Average rate: %s\n", l_rate_average_str);
                     const char *l_last_rate_str; dap_uint256_to_char(l_rate, &l_last_rate_str);
-                    dap_string_append_printf(l_reply_str, "Last rate: %s Last rate time: %s (%"DAP_UINT64_FORMAT_U")",
-                                             l_last_rate_str, l_tmp_buf, l_last_rate_time);
+                    dap_string_append_printf(l_reply_str, "Last rate: %s Last rate time: %s",
+                                             l_last_rate_str, l_tmp_buf);
                     *a_str_reply = dap_string_free(l_reply_str, false);
                     break;
                 }else if (strcmp(l_price_subcommand,"history") == 0){
@@ -2453,7 +2446,7 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
                     size_t l_datum_num = dap_list_length(l_datum_list0);
 
                     if (l_datum_num == 0){
-                        dap_cli_server_cmd_set_reply_text(a_str_reply,"Can't find transactions");
+                        dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find transactions");
                         return -6;
                     }
                     size_t l_arr_start = 0;
-- 
GitLab