From f803bb3e30c0866b654f3d57d9cb174e2c72c735 Mon Sep 17 00:00:00 2001 From: "cellframe.docs" <artur.khudiaev@demlabs.net> Date: Fri, 15 Apr 2022 10:36:45 +0000 Subject: [PATCH] hotfix-5161 --- .../dap_chain_global_db_driver_sqlite.c | 8 ++-- modules/net/dap_chain_net.c | 15 +++++++ modules/net/dap_chain_node_cli_cmd.c | 31 +++++++------- modules/net/include/dap_chain_net.h | 1 + modules/type/blocks/dap_chain_cs_blocks.c | 9 +++++ modules/type/dag/dap_chain_cs_dag.c | 40 ++++++++++++++----- 6 files changed, 77 insertions(+), 27 deletions(-) diff --git a/modules/global-db/dap_chain_global_db_driver_sqlite.c b/modules/global-db/dap_chain_global_db_driver_sqlite.c index 33a025d245..551e70421f 100644 --- a/modules/global-db/dap_chain_global_db_driver_sqlite.c +++ b/modules/global-db/dap_chain_global_db_driver_sqlite.c @@ -56,7 +56,7 @@ static struct conn_pool_item *s_trans = NULL; /* S static pthread_mutex_t s_trans_mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t s_trans_cnd = PTHREAD_COND_INITIALIZER; - +bool s_debug_db_more = false; static char s_filename_db [MAX_PATH]; static pthread_mutex_t s_conn_free_mtx = PTHREAD_MUTEX_INITIALIZER; /* Lock to coordinate access to the free connections pool */ @@ -146,7 +146,8 @@ struct timespec tmo = {0}; /* l_rc == 0 - so connection was free, */ /* we got free connection, so, release mutex and get out */ atomic_fetch_add(&l_conn->usage, 1); - log_it(L_DEBUG, "Get l_conn: @%p", l_conn); + if (s_debug_db_more) + log_it(L_DEBUG, "Get l_conn: @%p", l_conn); return l_conn; } } @@ -175,7 +176,8 @@ static inline int s_sqlite_free_connection(struct conn_pool_item *a_conn) { int l_rc; - log_it(L_DEBUG, "Free l_conn: @%p", a_conn); + if (s_debug_db_more) + log_it(L_DEBUG, "Free l_conn: @%p", a_conn); atomic_flag_clear(&a_conn->busy); /* Clear busy flag */ diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 6aedddafbd..0a3a4d5529 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -1482,6 +1482,21 @@ void s_set_reply_text_node_status(char **a_str_reply, dap_chain_net_t * a_net){ DAP_DELETE(l_node_address_text_block); } +/** + * @brief get type of chain + * + * @param l_chain + * @return char* + */ +const char* dap_chain_net_get_type(dap_chain_t *l_chain) +{ + if (!l_chain){ + log_it(L_DEBUG, "dap_get_chain_type. Chain object is 0"); + return NULL; + } + return (const char*)DAP_CHAIN_PVT(l_chain)->cs_name; +} + /** * @brief reload ledger * command cellframe-node-cli net -net <network_name> ledger reload diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 2958787059..e7342201a6 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -2864,7 +2864,12 @@ int s_parse_common_token_decl_arg(int a_argc, char ** a_argv, char ** a_str_repl l_params->l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL; // 256 }else{ dap_chain_node_cli_set_reply_text(a_str_reply, - "uknown token type was specified. Simple token will be used by default"); + "Unknown token type %s was specified. Supported types:\n" + " private_simple\n" + " private\n" + " CF20\n" + "Default token type is private_simple.\n", l_params->l_type_str); + return -1; } } @@ -3032,12 +3037,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) const char * l_ticker = NULL; uint256_t l_total_supply = {}; // 256 uint16_t l_signs_emission = 0; - - const char * l_signs_total_str = NULL; uint16_t l_signs_total = 0; - - const char * l_certs_str = NULL; - dap_cert_t ** l_certs = NULL; size_t l_certs_count = 0; @@ -3117,18 +3117,18 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) l_tsd_list = dap_list_append(l_tsd_list, l_tsd); l_tsd_total_size+= dap_tsd_size(l_tsd); } - if (l_params->ext.tx_receiver_allowed){ + if (l_params->ext.tx_receiver_allowed) l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_receiver_allowed, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD); - } - if (l_params->ext.tx_receiver_blocked){ + + if (l_params->ext.tx_receiver_blocked) l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_receiver_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD); - } - if (l_params->ext.tx_sender_allowed){ + + if (l_params->ext.tx_sender_allowed) l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_sender_allowed, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD); - } - if (l_params->ext.tx_sender_blocked){ - l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_sender_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD); - } + + if (l_params->ext.tx_sender_blocked) + l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_sender_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD); + // Create new datum token l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(dap_chain_datum_token_t) + l_tsd_total_size) ; @@ -3247,6 +3247,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) else DAP_DELETE(l_key_str); DAP_DELETE(l_datum); + DAP_DELETE(l_params); if (!l_placed) { l_ret = -2; } diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 908cc70e15..4e8d1438de 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -130,6 +130,7 @@ dap_chain_t * dap_chain_net_get_chain_by_name( dap_chain_net_t * l_net, const ch dap_chain_node_addr_t * dap_chain_net_get_cur_addr( dap_chain_net_t * l_net); uint64_t dap_chain_net_get_cur_addr_int(dap_chain_net_t * l_net); dap_chain_cell_id_t * dap_chain_net_get_cur_cell( dap_chain_net_t * l_net); +const char* dap_chain_net_get_type(dap_chain_t *l_chain); dap_list_t* dap_chain_net_get_link_node_list(dap_chain_net_t * l_net, bool a_is_only_cur_cell); dap_list_t* dap_chain_net_get_node_list(dap_chain_net_t * l_net); diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 4f04edae2d..881842f060 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -368,6 +368,15 @@ static int s_cli_blocks(int a_argc, char ** a_argv, char **a_str_reply) if(dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net) < 0) return -11; + const char *l_chain_type = dap_chain_net_get_type(l_chain); + + if (!strstr(l_chain_type, "block_")){ + dap_chain_node_cli_set_reply_text(a_str_reply, + "Type of chain %s is not block. This chain with type %s is not supported by this command", + l_chain->name, l_chain_type); + return -42; + } + l_blocks = DAP_CHAIN_CS_BLOCKS(l_chain); // Parse commands diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index f9f095ebe7..6cf24bebf1 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -142,19 +142,19 @@ int dap_chain_cs_dag_init(void) s_debug_more = dap_config_get_item_bool_default(g_config,"dag","debug_more",false); dap_chain_node_cli_cmd_item_create ("dag", s_cli_dag, "DAG commands", - "dag -net event create <chain net name> -chain <chain name> -datum <datum hash> [-H hex|base58(default)]\n" + "dag event create -net <chain net name> -chain <chain name> -datum <datum hash> [-H hex|base58(default)]\n" "\tCreate event from datum mempool element\n\n" "dag event cancel -net <chain net name> -chain <chain name> -event <event hash>\n" "\tRemove event from forming new round and put back its datum to mempool\n\n" "dag event sign -net <chain 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 <chain net name> -chain <chain name> -event <event hash> -from < events | events_lasts | round.new | round.<Round id in hex> > [-H hex|base58(default)]\n" + "dag event dump -net <chain 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 <chain net name> -chain <chain name> -from < events | events_lasts | threshold | round.new | round.<Round id in hex> \n\n" + "dag event list -net <chain net name> -chain <chain name> -from <events | events_lasts | threshold | round.new | round.<Round id in hex>> \n" "\tShow event list \n\n" - "dag round complete -net <chain net name> -chain <chain name> \n\n" - "\tComplete the current new round, verify it and if everything is ok - publish new events in chain\n\n" + "dag round complete -net <chain net name> -chain <chain name> \n" + "\tComplete the current new round, verify it and if everything is ok - publish new events in chain\n" ); log_it(L_NOTICE,"Initialized DAG chain items organization class"); return 0; @@ -1358,7 +1358,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) arg_index++; const char * l_hash_out_type = NULL; - dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type); + dap_chain_node_cli_find_option_val(argv, 0, argc, "-H", &l_hash_out_type); if(!l_hash_out_type) l_hash_out_type = "hex"; if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) { @@ -1367,7 +1367,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) } dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net); - if ( l_net == NULL ){ + if ((l_net == NULL) || (l_chain == NULL)){ return -1; } else if (a_str_reply && *a_str_reply) { DAP_DELETE(*a_str_reply); @@ -1375,6 +1375,15 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) } l_dag = DAP_CHAIN_CS_DAG(l_chain); + const char *l_chain_type = dap_chain_net_get_type(l_chain); + + if (!strstr(l_chain_type, "dag_")){ + dap_chain_node_cli_set_reply_text(a_str_reply, + "Type of chain %s is not dag. This chain with type %s is not supported by this command", + l_chain->name, l_chain_type); + return -42; + } + int ret = 0; if ( l_round_cmd_str ) { if ( strcmp(l_round_cmd_str,"complete") == 0 ){ @@ -1656,11 +1665,23 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) "Can't find event %s in events table\n", l_event_hash_str); break; } - + }else if ( strcmp(l_from_events_str,"threshold") == 0){ + dap_chain_cs_dag_event_item_t * l_event_item = NULL; + pthread_rwlock_rdlock(&PVT(l_dag)->events_rwlock); + HASH_FIND(hh,PVT(l_dag)->events_treshold,&l_event_hash,sizeof(l_event_hash),l_event_item); + pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock); + if (l_event_item) + l_event = l_event_item->event; + else { + ret = -23; + dap_chain_node_cli_set_reply_text(a_str_reply, + "Can't find event %s in threshold table\n", l_event_hash_str); + break; + } }else { ret = -22; dap_chain_node_cli_set_reply_text(a_str_reply, - "Wrong events_from option \"%s\", need one of variant: events, round.new, events_lasts, round.0x0123456789ABCDEF", l_from_events_str); + "Wrong events_from option \"%s\", need one of variant: events, round.new, events_lasts, round.0x0123456789ABCDEF, threshold", l_from_events_str); break; } @@ -1765,6 +1786,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) case SUBCMD_EVENT_LIST:{ if( (l_from_events_str == NULL) || (strcmp(l_from_events_str,"round.new") == 0) ){ + char * l_gdb_group_events = DAP_CHAIN_CS_DAG(l_chain)->gdb_group_events_round_new; dap_string_t * l_str_tmp = dap_string_new(""); if ( l_gdb_group_events ){ -- GitLab