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 7a30adef2bf9692375ea0e4f302f4e5b34bba9e8..2f0a0f63b66aa441daa04f133bc978623f6557ec 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -387,7 +387,11 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num); flags = l_orders_num ? flags | F_ORDR : flags & ~F_ORDR; bool auto_online = dap_config_get_item_bool_default( g_config, "general", "auto_online", false ); - bool auto_update = dap_config_get_item_bool_default( g_config, "general", "auto_update", false ); + bool auto_update = false; + if(system("systemctl status cellframe-updater.service") == 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; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 58edbb0a13c30a4b1c0820e51d15fa0bca76754a..82162dda646c8104782731e6c7a1d4fc410ca579 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1197,6 +1197,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) dap_chain_node_addr_t l_link = { 0 }; dap_chain_node_info_t *l_node_info = NULL; size_t l_node_info_size = sizeof(l_node_info->hdr) + sizeof(l_link); + if(cmd_num >= CMD_ADD && cmd_num <= CMD_LINK) l_node_info = DAP_NEW_Z_SIZE(dap_chain_node_info_t, l_node_info_size); @@ -1223,7 +1224,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) } switch (cmd_num) - { + { case CMD_ADD: if(!arg_index || a_argc < 8) { dap_cli_server_cmd_set_reply_text(a_str_reply, "invalid parameters"); 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 a94095c752c6b754049709eda69ae95834e26b83..8c883b33a5cd230e8f5b329ce9c321c7f9f48412 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 @@ -1323,7 +1323,7 @@ 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_validator_test_t * out_data, +int 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; @@ -1334,31 +1334,27 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name(a_net->pub.name); dap_chain_datum_tx_t *l_tx = dap_chain_ledger_tx_find_by_hash(l_ledger, a_tx_hash); dap_chain_node_addr_t *l_signer_node_addr = NULL; - bool l_overall_correct = false; + int l_overall_correct = false; int l_prev_cond_idx = 0; 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) { - log_it(L_WARNING, "Requested conditional transaction has no requires conditional output"); - return false; + return -4; } l_signer_node_addr = &l_tx_out_cond->subtype.srv_stake_pos_delegate.signer_node_addr; l_key = dap_chain_node_addr_to_hash_str(l_signer_node_addr); if(!l_key) { - log_it(L_WARNING, "can't calculate hash of addr"); - return false; + return -5; } - // read node 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) { - log_it(L_WARNING, "node not found in base"); DAP_DELETE(l_key); - return false; + return -6; } size_t node_info_size_must_be = dap_chain_node_info_get_size(l_remote_node_info); @@ -1366,24 +1362,22 @@ bool dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_f 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); - return false; + return -7; } DAP_DELETE(l_key); // start connect l_node_client = dap_chain_node_client_connect_channels(a_net,l_remote_node_info,"N"); if(!l_node_client) { - log_it(L_WARNING, "can't connect"); DAP_DELETE(l_remote_node_info); - return false; + return -8; } // wait connected size_t rc = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_ESTABLISHED, a_time_connect); if (rc) { - 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); - return false; + return -9; } log_it(L_NOTICE, "Stream connection established"); @@ -1396,10 +1390,9 @@ 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) { - 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); - return false; + return -10; } rc = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_VALID_READY, a_time_respone); @@ -1505,7 +1498,39 @@ 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, check that the hash is correct", str_tx_hash); return -3; } - dap_chain_net_srv_stake_check_validator(l_net, &l_tx, &l_out, 10000, 15000); + int res = dap_chain_net_srv_stake_check_validator(l_net, &l_tx, &l_out, 10000, 15000); + switch (res) { + case -4: + dap_cli_server_cmd_set_reply_text(a_str_reply,"Requested conditional transaction has no requires conditional output"); + return -30; + break; + case -5: + dap_cli_server_cmd_set_reply_text(a_str_reply,"Can't calculate hash of addr"); + return -31; + break; + case -6: + dap_cli_server_cmd_set_reply_text(a_str_reply,"Node not found in base"); + return -32; + break; + case -7: + dap_cli_server_cmd_set_reply_text(a_str_reply,"Node has bad size in base, see log file"); + return -33; + break; + case -8: + dap_cli_server_cmd_set_reply_text(a_str_reply,"Can't connect to remote node"); + return -34; + break; + case -9: + dap_cli_server_cmd_set_reply_text(a_str_reply,"No response from node"); + return -35; + break; + case -10: + 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"); + return -36; + break; + default: + break; + } dap_cli_server_cmd_set_reply_text(a_str_reply, "-------------------------------------------------\n" "VERSION \t | %s \n" @@ -1517,15 +1542,15 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) "FOUND CERT \t | %s\n" "SIGN CORRECT \t | %s\n" "SUMMARY \t | %s\n", - l_out.header.version, + l_out.header.version, (l_out.header.flags & A_PROC)?"true":"false", (l_out.header.flags & F_ORDR)?"true":"false", (l_out.header.flags & A_ONLN)?"true":"false", (l_out.header.flags & A_UPDT)?"true":"false", (l_out.header.flags & D_SIGN)?"true":"false", (l_out.header.flags & F_CERT)?"true":"false", - l_out.header.sign_correct ? "true":"false", - l_out.header.overall_correct ? "Validator ready" : "There are unresolved issues"); + l_out.header.sign_correct ? "true":"false", + l_out.header.overall_correct ? "Validator ready" : "There are unresolved issues"); } break; 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 a720bdf5848b7bd07890d1890bcaca96f216d522..ca59e92cd6aec3ffd631d86a4c39e13a06a28e71 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 @@ -83,7 +83,7 @@ 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_validator_test_t * out_data, +int 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, diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 91cf58856548a4eea47f44898a73db8e92e0d55f..e5227ffdbc8c80b71974660a03fdca5b5a8a09cd 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -963,12 +963,12 @@ static int s_add_atom_datums(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_ca static int s_add_atom_to_blocks(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_cache_t *a_block_cache ) { int l_res = 0; + pthread_rwlock_wrlock( &PVT(a_blocks)->rwlock ); l_res = s_add_atom_datums(a_blocks, a_block_cache); debug_if(s_debug_more, L_DEBUG, "Block %s checked, %s", a_block_cache->block_hash_str, l_res == (int)a_block_cache->datum_count ? "all correct" : "but ledger declined"); - //All correct, no matter for result - pthread_rwlock_wrlock( &PVT(a_blocks)->rwlock ); + //All correct, no matter for result HASH_ADD(hh, PVT(a_blocks)->blocks,block_hash,sizeof (a_block_cache->block_hash), a_block_cache); PVT(a_blocks)->blocks_count++; if (! (PVT(a_blocks)->block_cache_first ) )