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 c66e3cbb689f0c63b6114fd3f32bd72398ee3e10..07fca63075fdd676903d77b236fd0fe7ee4c0724 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -338,7 +338,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) dap_sign_t *l_sign = NULL; size_t sign_s = 0; size_t l_orders_num = 0; - dap_stream_ch_chain_rnd_t *send = NULL; + dap_stream_ch_chain_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 = {}; @@ -361,7 +361,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) else flags = flags & ~F_CERT;//Specified certificate not found - send = DAP_NEW_Z_SIZE(dap_stream_ch_chain_rnd_t,sizeof(dap_stream_ch_chain_rnd_t)+sign_s); + send = DAP_NEW_Z_SIZE(dap_stream_ch_chain_validator_test_t, sizeof(dap_stream_ch_chain_validator_test_t) + sign_s); #ifdef DAP_VERSION strncpy((char *)send->header.version, (char *)DAP_VERSION, sizeof(send->header.version)); #endif @@ -381,7 +381,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) 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_stream_ch_chain_rnd_t)+sign_s); + l_ch_chain_net_pkt->hdr.net_id, send, sizeof(dap_stream_ch_chain_validator_test_t) + sign_s); dap_stream_ch_set_ready_to_write_unsafe(a_ch, true); if(l_sign) DAP_DELETE(l_sign); diff --git a/modules/channel/chain-net/include/dap_stream_ch_chain_net.h b/modules/channel/chain-net/include/dap_stream_ch_chain_net.h index cbe5538cd4c970657819a3968fec7a850e8f0172..e79bf2f993b95571c33222be34334b8e039f2a63 100644 --- a/modules/channel/chain-net/include/dap_stream_ch_chain_net.h +++ b/modules/channel/chain-net/include/dap_stream_ch_chain_net.h @@ -41,19 +41,19 @@ typedef struct dap_stream_ch_chain_net { void *notify_callback_arg; } dap_stream_ch_chain_net_t; -typedef struct dap_stream_ch_chain_rnd{ +typedef struct dap_stream_ch_chain_validator_test{ struct{ /// node Version uint8_t version[32]; /// autoproc status uint8_t flags;//0 bit -autoproc; 1 bit - find order; 2 bit - auto online; 3 bit - auto update; 6 bit - data sign; 7 bit - find cert; uint32_t sign_size; - //uint8_t data[10]; uint8_t sign_correct; uint8_t overall_correct; + //uint8_t data[10]; }DAP_ALIGN_PACKED header; byte_t sign[]; -} DAP_ALIGN_PACKED dap_stream_ch_chain_rnd_t; +} DAP_ALIGN_PACKED dap_stream_ch_chain_validator_test_t; #define A_PROC 0x01 #define F_ORDR 0x02 diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index e2dbf64a85887bc43a566b0884271063d0829de3..937f2372df4255ab789a481c1416770e5d4901f5 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -2558,6 +2558,7 @@ static bool dap_chain_mempool_find_addr_ledger(dap_ledger_t* a_ledger, dap_chain } if(l_dst_addr) { + log_it(L_ERROR, "Hash - %s",dap_chain_addr_to_str(l_dst_addr)); if(!memcmp(l_dst_addr, a_addr, sizeof(dap_chain_addr_t))) { dap_list_free(l_list_out_items); diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index b44d3e5d57e55f9edc262ba5ba4a2838752d6aee..2696f651610451f99bfd14391da6bfb46195cb87 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -647,7 +647,7 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply) dap_chain_tx_hash_processed_ht_t *l_list_tx_hash_processd = NULL; if(!l_is_all && !l_addr_base58 && !l_wallet_name && !l_tx_hash_str) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "command requires parameter '-all' or '-addr' or '-w'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "command 'tx' requires parameter '-all' or '-addr' or '-w' or '-tx'"); return -1; } // Select chain network @@ -716,21 +716,29 @@ int com_ledger(int a_argc, char ** a_argv, char **a_str_reply) dap_list_free1(l_txs_list); } } else { - l_str_out = dap_ledger_token_tx_item_list(l_ledger,l_addr,l_hash_out_type); - if(l_tx_hash_str) { - dap_string_append_printf(l_str_ret, "history for tx hash %s:\n%s\n", l_tx_hash_str, - l_str_out ? l_str_out : " empty"); - } - else if(l_addr) { + if(l_addr) + { + l_str_out = dap_ledger_token_tx_item_list(l_ledger,l_addr,l_hash_out_type); char *l_addr_str = dap_chain_addr_to_str(l_addr); dap_string_append_printf(l_str_ret, "history for addr %s:\n%s\n", l_addr_str, l_str_out ? l_str_out : " empty"); DAP_DELETE(l_addr_str); - } + }else if(l_tx_hash_str) { + dap_chain_datum_tx_t *l_tx = dap_chain_ledger_tx_find_by_hash(l_ledger,&l_tx_hash); + if(l_tx){ + size_t l_tx_size = dap_chain_datum_tx_get_size(l_tx); + dap_hash_fast_t l_tx_hash = {0}; + dap_hash_fast(l_tx, l_tx_size, &l_tx_hash); + const char *l_tx_ticker = dap_chain_ledger_tx_get_token_ticker_by_hash(l_ledger, &l_tx_hash); + dap_chain_datum_dump_tx(l_tx,l_tx_ticker,l_str_ret,l_hash_out_type,&l_tx_hash); + dap_string_append_printf(l_str_ret, "history for tx hash %s:\n%s\n", l_tx_hash_str, + l_str_out ? l_str_out : " empty"); + } + else + dap_string_append_printf(l_str_ret, "There is not transaction %s in the network ledger\n",l_tx_hash_str); + } } DAP_DELETE(l_str_out); - - DAP_DELETE(l_addr); s_dap_chain_tx_hash_processed_ht_free(l_list_tx_hash_processd); // all chain diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 2a24fc167989273398781cac30b94a59b9e34a79..58f6053e905db8dd6fdbad1fb3207e70f7e9101d 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -334,7 +334,7 @@ static void s_ch_chain_callback_notify_packet_in2(dap_stream_ch_chain_net_t* a_c l_node_client->remote_node_addr = *(dap_chain_node_addr_t*)a_pkt_net->data; } pthread_mutex_lock(&l_node_client->wait_mutex); - l_node_client->callbacks_arg = a_pkt_net->data; + l_node_client->callbacks_arg = DAP_DUP_SIZE(a_pkt_net->data, a_pkt_net_data_size); l_node_client->state = NODE_CLIENT_STATE_VALID_READY; dap_cond_signal(l_node_client->wait_cond); pthread_mutex_unlock(&l_node_client->wait_mutex); diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c index 99185b9c4cd11030178d7ef19effc6320c40fd99..4402d1ecb82a137d210de44869c8c946aaad15c7 100644 --- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c @@ -1155,8 +1155,8 @@ static int callback_compare_tx_list(const void * a_datum1, const void * a_datum2 return -1; } -bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_rnd_t * out_data, - int a_time_connect, int a_time_respone,char **a_str_reply) +bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_validator_test_t * out_data, + int a_time_connect, int a_time_respone) { char *l_key = NULL; size_t l_node_info_size = 0; @@ -1172,7 +1172,6 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f dap_chain_tx_out_cond_t *l_tx_out_cond = dap_chain_datum_tx_out_cond_get(l_tx, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE, &l_prev_cond_idx); if (!l_tx_out_cond) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Requested conditional transaction has no requires conditional output"); log_it(L_WARNING, "Requested conditional transaction has no requires conditional output"); return false; } @@ -1181,7 +1180,6 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f l_key = dap_chain_node_addr_to_hash_str(l_signer_node_addr); if(!l_key) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "can't calculate hash of addr"); log_it(L_WARNING, "can't calculate hash of addr"); return false; } @@ -1190,7 +1188,6 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f l_remote_node_info = (dap_chain_node_info_t *) dap_global_db_get_sync(a_net->pub.gdb_nodes, l_key, &l_node_info_size, NULL, NULL); if(!l_remote_node_info) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "node not found in base"); log_it(L_WARNING, "node not found in base"); DAP_DELETE(l_key); return false; @@ -1198,8 +1195,6 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f size_t node_info_size_must_be = dap_chain_node_info_get_size(l_remote_node_info); if(node_info_size_must_be != l_node_info_size) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "node has bad size in base=%zu (must be %zu)", l_node_info_size, - node_info_size_must_be); log_it(L_WARNING, "node has bad size in base=%zu (must be %zu)", l_node_info_size, node_info_size_must_be); DAP_DELETE(l_remote_node_info); DAP_DELETE(l_key); @@ -1209,14 +1204,14 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f // start connect l_node_client = dap_chain_node_client_connect_channels(a_net,l_remote_node_info,"N"); if(!l_node_client) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "can't connect"); + log_it(L_WARNING, "can't connect"); DAP_DELETE(l_remote_node_info); return false; } // wait connected size_t rc = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_ESTABLISHED, a_time_connect); if (rc) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "No response from node"); + log_it(L_WARNING, "No response from node"); // clean client struct dap_chain_node_client_close_mt(l_node_client); DAP_DELETE(l_remote_node_info); @@ -1233,7 +1228,6 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f a_net->pub.id, l_test_data, sizeof(l_test_data)); if (rc == 0) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't send DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY_REQUEST packet"); log_it(L_WARNING, "Can't send DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_VALIDATOR_READY_REQUEST packet"); dap_chain_node_client_close_mt(l_node_client); DAP_DELETE(l_remote_node_info); @@ -1242,11 +1236,12 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f rc = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_VALID_READY, a_time_respone); if (!rc) { - dap_stream_ch_chain_rnd_t *validators_data = (dap_stream_ch_chain_rnd_t*)l_node_client->callbacks_arg; + dap_stream_ch_chain_validator_test_t *validators_data = (dap_stream_ch_chain_validator_test_t*)l_node_client->callbacks_arg; + dap_sign_t *l_sign = NULL; bool l_sign_correct = false; if(validators_data->header.sign_size){ - l_sign = (dap_sign_t*)(l_node_client->callbacks_arg + sizeof(dap_stream_ch_chain_rnd_t)); + l_sign = (dap_sign_t*)(l_node_client->callbacks_arg + sizeof(dap_stream_ch_chain_validator_test_t)); dap_hash_fast_t l_sign_pkey_hash; dap_sign_get_pkey_hash(l_sign, &l_sign_pkey_hash); l_sign_correct = dap_hash_fast_compare(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr.data.hash_fast, &l_sign_pkey_hash); @@ -1254,11 +1249,11 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f l_sign_correct = dap_sign_verify_all(l_sign, validators_data->header.sign_size, l_test_data, sizeof(l_test_data)); } l_overall_correct = l_sign_correct && validators_data->header.flags == 0xCF; - - memcpy(out_data,validators_data,sizeof(dap_stream_ch_chain_rnd_t)); + *out_data = *validators_data; out_data->header.sign_correct = l_sign_correct ? 1 : 0; out_data->header.overall_correct = l_overall_correct ? 1 : 0; } + DAP_DELETE(l_node_client->callbacks_arg); dap_chain_node_client_close_mt(l_node_client); DAP_DELETE(l_remote_node_info); return l_overall_correct; @@ -1314,7 +1309,7 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) const char * str_tx_hash = NULL; dap_chain_net_t * l_net = NULL; dap_hash_fast_t l_tx = {}; - dap_stream_ch_chain_rnd_t l_out = {0}; + dap_stream_ch_chain_validator_test_t l_out = {0}; dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_netst); dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-tx", &str_tx_hash); @@ -1323,7 +1318,6 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "Network %s not found", l_netst); return -1; } - if (!str_tx_hash) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Command check requires parameter -tx"); return -2; @@ -1332,8 +1326,7 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't get hash_fast from %s", str_tx_hash); return -3; } - - dap_chain_net_srv_stake_check_validator(l_net, &l_tx, &l_out, 7000, 10000, a_str_reply); + dap_chain_net_srv_stake_check_validator(l_net, &l_tx, &l_out, 7000, 15000); dap_cli_server_cmd_set_reply_text(a_str_reply, "-------------------------------------------------\n" "VERSION \t | %s \n" diff --git a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h index 33759cc197465013037bfbc244d9bc09cf11d558..44000c08dd1a0b44326ddeac7f244f8e18266242 100644 --- a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h +++ b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h @@ -81,8 +81,8 @@ void dap_chain_net_srv_stake_get_fee_validators_str(dap_chain_net_t *a_net, dap_ int dap_chain_net_srv_stake_load_cache(dap_chain_net_t *a_net); void dap_chain_net_srv_stake_purge(dap_chain_net_t *a_net); -bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net,dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_rnd_t * out_data, - int a_time_connect, int a_time_respone, char **a_str_reply); +bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fast_t *a_tx_hash, dap_stream_ch_chain_validator_test_t * out_data, + int a_time_connect, int a_time_respone); dap_chain_datum_decree_t *dap_chain_net_srv_stake_decree_approve(dap_chain_net_t *a_net, dap_hash_fast_t *a_stake_tx_hash, dap_cert_t *a_cert);