diff --git a/dap-sdk b/dap-sdk index c9259b9949a44daee571d2fff3bdc329758ba68a..1587a436ec9231ac3bb485e74cc5ec2a7534efd5 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit c9259b9949a44daee571d2fff3bdc329758ba68a +Subproject commit 1587a436ec9231ac3bb485e74cc5ec2a7534efd5 diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c index e80f20dfed1182517cadf95d6e558a40ec4a2009..a09641236e9366f5a51718a70cb9ca72ea8b3233 100644 --- a/modules/chain/dap_chain.c +++ b/modules/chain/dap_chain.c @@ -591,7 +591,7 @@ bool download_notify_callback(dap_chain_t* a_chain) { json_object_object_add(l_chain_info, "chain_id", json_object_new_uint64(a_chain->id.uint64)); json_object_object_add(l_chain_info, "load_progress", json_object_new_int(a_chain->load_progress)); dap_notify_server_send_mt(json_object_get_string(l_chain_info)); - log_it(L_DEBUG, "Loading net \"%s\", chain %" DAP_UINT64_FORMAT_U " [%d%%]", a_chain->net_name, a_chain->id.uint64, a_chain->load_progress); + log_it(L_DEBUG, "Loading net \"%s\", chain \"%s\", ID 0x%016"DAP_UINT64_FORMAT_x " [%d%%]", a_chain->net_name, a_chain->name, a_chain->id.uint64, a_chain->load_progress); json_object_put(l_chain_info); return true; } diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c index a38facd229b518af960f9b3103f255eb78f4c893..766175ec0d082ba73c9f25a72f415ac5b7262329 100644 --- a/modules/chain/dap_chain_cell.c +++ b/modules/chain/dap_chain_cell.c @@ -465,7 +465,7 @@ int dap_chain_cell_load(dap_chain_t *a_chain, dap_chain_cell_t *a_cell) l_el_size = *(uint64_t*)a_cell->map_pos; dap_chain_atom_ptr_t l_atom = (dap_chain_atom_ptr_t)(a_cell->map_pos += sizeof(uint64_t)); dap_hash_fast(l_atom, l_el_size, &l_atom_hash); - a_chain->callback_atom_add(a_chain, l_atom, l_el_size, &l_atom_hash); + a_chain->callback_atom_add(a_chain, l_atom, l_el_size, &l_atom_hash, false); a_cell->map_pos += l_el_size; a_chain->load_progress = (int)((float)l_pos/l_full_size * 100 + 0.5); } @@ -494,7 +494,7 @@ int dap_chain_cell_load(dap_chain_t *a_chain, dap_chain_cell_t *a_cell) } dap_hash_fast_t l_atom_hash = {}; dap_hash_fast(l_element, l_el_size, &l_atom_hash); - dap_chain_atom_verify_res_t l_res = a_chain->callback_atom_add(a_chain, l_element, l_el_size, &l_atom_hash); + dap_chain_atom_verify_res_t l_res = a_chain->callback_atom_add(a_chain, l_element, l_el_size, &l_atom_hash, false); if (l_res != ATOM_ACCEPT && l_res != ATOM_FORK) { DAP_DELETE(l_element); } diff --git a/modules/chain/dap_chain_ch.c b/modules/chain/dap_chain_ch.c index 7aa1455274b0da1bd73d2353ca68ef68f079ecd3..9af3f8ad1d8a2801ef83dd69c464c34daffa1b0f 100644 --- a/modules/chain/dap_chain_ch.c +++ b/modules/chain/dap_chain_ch.c @@ -624,7 +624,7 @@ static bool s_sync_in_chains_callback(void *a_arg) dap_hash_fast(l_atom, l_atom_size, &l_atom_hash); if (s_debug_more) dap_get_data_hash_str_static(l_atom, l_atom_size, l_atom_hash_str); - dap_chain_atom_verify_res_t l_atom_add_res = l_chain->callback_atom_add(l_chain, l_atom, l_atom_size, &l_atom_hash); + dap_chain_atom_verify_res_t l_atom_add_res = l_chain->callback_atom_add(l_chain, l_atom, l_atom_size, &l_atom_hash, false); bool l_ack_send = false; switch (l_atom_add_res) { case ATOM_PASS: @@ -778,8 +778,8 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) if (s_debug_more) { char *l_atom_hash_str; dap_get_data_hash_str_static(l_chain_pkt->data, l_chain_pkt_data_size, l_atom_hash_str); - log_it(L_INFO, "In: CHAIN pkt: atom hash %s, size %zd, net id %lu, chain id %lu", - l_atom_hash_str, l_chain_pkt_data_size, l_chain_pkt->hdr.net_id, l_chain_pkt->hdr.chain_id); + log_it(L_INFO, "In: CHAIN pkt: atom hash %s, size %zd, net id %" DAP_UINT64_FORMAT_U ", chain id %" DAP_UINT64_FORMAT_U, + l_atom_hash_str, l_chain_pkt_data_size, l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64); } dap_proc_thread_callback_add(a_ch->stream_worker->worker->proc_queue_input, s_sync_in_chains_callback, l_args); } break; @@ -1481,13 +1481,12 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } struct legacy_sync_context *l_context = l_ch_chain->legacy_sync_context; if (!l_context || l_context->state != DAP_CHAIN_CH_STATE_SYNC_CHAINS_REMOTE) { - log_it(L_WARNING, "Can't process FIRST_CHAIN packet cause synchronization sequence violation"); + log_it(L_WARNING, "Can't process CHAIN_OLD packet cause synchronization sequence violation"); dap_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id, l_chain_pkt->hdr.chain_id, l_chain_pkt->hdr.cell_id, DAP_CHAIN_CH_ERROR_INCORRECT_SYNC_SEQUENCE); break; } - debug_if(s_debug_legacy, L_INFO, "In: CHAIN_OLD data_size=%zu", l_chain_pkt_data_size); struct atom_processing_args *l_args = DAP_NEW_Z_SIZE(struct atom_processing_args, l_ch_pkt->hdr.data_size + sizeof(struct atom_processing_args)); if (!l_args) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); @@ -1498,7 +1497,7 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } l_chain_pkt->hdr.data_size = l_chain_pkt_data_size; memcpy(l_args->data, l_chain_pkt, l_ch_pkt->hdr.data_size); - if (s_debug_more) { + if (s_debug_legacy) { char *l_atom_hash_str; dap_get_data_hash_str_static(l_chain_pkt->data, l_chain_pkt_data_size, l_atom_hash_str); log_it(L_INFO, "In: CHAIN_OLD pkt: atom hash %s (size %zd)", l_atom_hash_str, l_chain_pkt_data_size); diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h index a177889b138fb5bc8dff1b3c1c0a41d9704bf238..869ab65076249aaa437c4bf0be095493eb286365 100644 --- a/modules/chain/include/dap_chain.h +++ b/modules/chain/include/dap_chain.h @@ -91,7 +91,7 @@ typedef void (*dap_chain_callback_t)(dap_chain_t *); typedef int (*dap_chain_callback_new_cfg_t)(dap_chain_t *, dap_config_t *); typedef void (*dap_chain_callback_ptr_t)(dap_chain_t *, void * ); -typedef dap_chain_atom_verify_res_t (*dap_chain_callback_atom_t)(dap_chain_t *, dap_chain_atom_ptr_t, size_t, dap_hash_fast_t*); +typedef dap_chain_atom_verify_res_t (*dap_chain_callback_atom_t)(dap_chain_t *a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size, dap_hash_fast_t *a_atom_hash, bool a_atom_new); typedef dap_chain_atom_ptr_t (*dap_chain_callback_atom_form_treshold_t)(dap_chain_t *, size_t *); typedef dap_chain_atom_verify_res_t (*dap_chain_callback_atom_verify_t)(dap_chain_t *, dap_chain_atom_ptr_t , size_t, dap_hash_fast_t*); typedef size_t (*dap_chain_callback_atom_get_hdr_size_t)(void); 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 a3e9354c0d7ee6330bf74607218c2397b6236a17..0ac4c23414c1f025661d4d3d28db0c8051380c07 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -635,7 +635,7 @@ static bool s_callback_round_event_to_chain_callback_get_round_item(dap_global_d if (!l_verify_datum) { dap_hash_fast_t l_atom_hash = {}; dap_hash_fast(l_new_atom, l_event_size, &l_atom_hash); - dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size, &l_atom_hash); + dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size, &l_atom_hash, true); if (l_res == ATOM_ACCEPT) s_poa_round_clean(l_dag->chain); log_it(L_INFO, "Event %s from round %"DAP_UINT64_FORMAT_U" %s", diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index fc0256b4e8bef624ce44907cc55b801d3676ad2e..9b1e629107767a4294f513b3998a33875343a9ec 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -542,7 +542,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf l_sync_group, 72 * 3600, true, DAP_GDB_MEMBER_ROLE_NOBODY, DAP_CLUSTER_TYPE_AUTONOMIC); dap_link_manager_add_net_associate(l_net->pub.id.uint64, l_session->db_cluster->links_cluster); - dap_global_db_del_sync(l_sync_group, NULL); // Drop table on stratup + dap_global_db_erase_table_sync(l_sync_group); // Drop table on stratup DAP_DELETE(l_sync_group); #ifdef DAP_CHAIN_CS_ESBOCS_DIRECTIVE_SUPPORT @@ -1758,7 +1758,7 @@ static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, return false; } bool res = false; - dap_chain_atom_verify_res_t l_res = a_session->chain->callback_atom_add(a_session->chain, a_candidate, a_candidate_size, a_candidate_hash); + dap_chain_atom_verify_res_t l_res = a_session->chain->callback_atom_add(a_session->chain, a_candidate, a_candidate_size, a_candidate_hash, true); const char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(a_candidate_hash); switch (l_res) { case ATOM_ACCEPT: diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index 3b928c8606aac6c9e690d273e4d5dba21adb02a2..827e3cc46527df108467db3d33474b1640e35822 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -4989,13 +4989,13 @@ void dap_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_ledger_get_gdb_group(a_ledger, DAP_LEDGER_TXS_STR); - dap_global_db_del(l_gdb_group, NULL, NULL, NULL); + dap_global_db_erase_table(l_gdb_group, NULL, NULL); DAP_DELETE(l_gdb_group); } if (!a_preserve_db) { l_gdb_group = dap_ledger_get_gdb_group(a_ledger, DAP_LEDGER_SPENT_TXS_STR); - dap_global_db_del(l_gdb_group, NULL, NULL, NULL); + dap_global_db_erase_table(l_gdb_group, NULL, NULL); DAP_DELETE(l_gdb_group); } @@ -5008,7 +5008,7 @@ void dap_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_ledger_get_gdb_group(a_ledger, DAP_LEDGER_BALANCES_STR); - dap_global_db_del(l_gdb_group, NULL, NULL, NULL); + dap_global_db_erase_table(l_gdb_group, NULL, NULL); DAP_DELETE(l_gdb_group); } @@ -5036,10 +5036,10 @@ void dap_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_ledger_get_gdb_group(a_ledger, DAP_LEDGER_TOKENS_STR); - dap_global_db_del(l_gdb_group, NULL, NULL, NULL); + dap_global_db_erase_table(l_gdb_group, NULL, NULL); DAP_DELETE(l_gdb_group); l_gdb_group = dap_ledger_get_gdb_group(a_ledger, DAP_LEDGER_EMISSIONS_STR); - dap_global_db_del(l_gdb_group, NULL, NULL, NULL); + dap_global_db_erase_table(l_gdb_group, NULL, NULL); DAP_DELETE(l_gdb_group); } @@ -5051,7 +5051,7 @@ void dap_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_ledger_get_gdb_group(a_ledger, DAP_LEDGER_STAKE_LOCK_STR); - dap_global_db_del(l_gdb_group, NULL, NULL, NULL); + dap_global_db_erase_table(l_gdb_group, NULL, NULL); DAP_DELETE(l_gdb_group); } @@ -5223,17 +5223,25 @@ uint256_t dap_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_a * a_public_key_size[in] public key size * a_tx_first_hash [in/out] hash of the initial transaction/ found transaction, if 0 start from the beginning */ -static dap_ledger_tx_item_t* tx_item_find_by_addr(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, +static dap_ledger_tx_item_t *tx_item_find_by_addr(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, const char * a_token, dap_chain_hash_fast_t *a_tx_first_hash) { if(!a_addr || !a_tx_first_hash) return NULL; dap_ledger_private_t *l_ledger_pvt = PVT(a_ledger); + bool is_tx_found = false, is_search_started = dap_hash_fast_is_blank(a_tx_first_hash); - dap_ledger_tx_item_t *l_iter_current, *l_item_tmp; + dap_ledger_tx_item_t *l_iter_start = NULL, *l_iter_current, *l_item_tmp; pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock); - HASH_ITER(hh, l_ledger_pvt->ledger_items , l_iter_current, l_item_tmp) - { + if (!dap_hash_fast_is_blank(a_tx_first_hash)) { + HASH_FIND(hh, l_ledger_pvt->ledger_items, a_tx_first_hash, sizeof(dap_hash_t), l_iter_start); + if (!l_iter_start || !l_iter_start->hh.next) + return NULL; + // start searching from the next hash after a_tx_first_hash + l_iter_start = l_iter_start->hh.next; + } else + l_iter_start = l_ledger_pvt->ledger_items; + HASH_ITER(hh, l_iter_start, l_iter_current, l_item_tmp) { // If a_token is setup we check if its not our token - miss it if (a_token && *l_iter_current->cache_data.token_ticker && dap_strcmp(l_iter_current->cache_data.token_ticker, a_token) && diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 8185ae38589468497113b1370d3175dea8676d1c..aef3be7face0233a03964fdf3348a67c0f12ff54 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -440,6 +440,7 @@ int dap_chain_net_link_add(dap_chain_net_t *a_net, dap_stream_node_addr_t *a_add int rc = dap_link_manager_link_update(a_addr, a_host, a_port); if (rc) log_it(L_ERROR, "Can't update link to addr " NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS(a_addr)); + log_it(L_DEBUG, "Link "NODE_ADDR_FP_STR" successfully added", NODE_ADDR_FP_ARGS(a_addr)); return rc; } @@ -472,8 +473,10 @@ static void s_link_manager_callback_connected(dap_link_t *a_link, uint64_t a_net } dap_stream_ch_chain_net_pkt_hdr_t l_announce = { .version = DAP_STREAM_CH_CHAIN_NET_PKT_VERSION, .net_id = l_net->pub.id }; - dap_stream_ch_pkt_send_by_addr(&a_link->addr, DAP_STREAM_CH_CHAIN_NET_ID, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ANNOUNCE, - &l_announce, sizeof(l_announce)); + if(dap_stream_ch_pkt_send_by_addr(&a_link->addr, DAP_STREAM_CH_CHAIN_NET_ID, DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ANNOUNCE, + &l_announce, sizeof(l_announce))) { + dap_link_manager_accounting_link_in_net(l_net->pub.id.uint64, &a_link->addr, false); + } } static bool s_net_check_link_is_permanent(dap_chain_net_t *a_net, dap_stream_node_addr_t a_addr) @@ -2169,7 +2172,6 @@ int s_net_init(const char *a_net_name, uint16_t a_acl_idx) l_net->pub.ledger = dap_ledger_create(l_net, l_ledger_flags); // Decrees initializing dap_chain_net_decree_init(l_net); - l_net->pub.config = l_cfg; return 0; } diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index 464500889601e4e72ad3a26fd17ce17efa164b25..1460bce84e96d0110971b376ba051e6a47e98653 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -91,11 +91,26 @@ static dap_chain_net_links_t *s_get_ignored_node_addrs(dap_chain_net_t *a_net, s const dap_stream_node_addr_t *l_curr_addr = &dap_chain_net_get_my_node_info(a_net)->address, *l_uplinks = dap_link_manager_get_net_links_addrs(a_net->pub.id.uint64, &l_uplinks_count, NULL, true), - *l_low_availability = dap_link_manager_get_ignored_addrs(&l_low_availability_count); + *l_low_availability = dap_link_manager_get_ignored_addrs(&l_low_availability_count, a_net->pub.id.uint64); if(!l_curr_addr->uint64 && !l_uplinks && !l_low_availability) { log_it(L_WARNING, "Error forming ignore list in net %s, please check, should be minimum self addr", a_net->pub.name); return NULL; } + if (dap_log_level_get() <= L_DEBUG ) { + char *l_ignored_str = NULL; + DAP_NEW_Z_SIZE_RET_VAL(l_ignored_str, char, 50 * (l_uplinks_count + l_low_availability_count + 1) + 200 + strlen(a_net->pub.name), NULL, l_uplinks, l_low_availability); + sprintf(l_ignored_str + strlen(l_ignored_str), "Second %zu nodes will be ignored in balancer links preparing in net %s:\n\tSelf:\n\t\t"NODE_ADDR_FP_STR"\n", l_uplinks_count + l_low_availability_count + 1, a_net->pub.name, NODE_ADDR_FP_ARGS(l_curr_addr)); + sprintf(l_ignored_str + strlen(l_ignored_str), "\tUplinks (%zu):\n", l_uplinks_count); + for (size_t i = 0; i < l_uplinks_count; ++i) { + sprintf(l_ignored_str + strlen(l_ignored_str), "\t\t"NODE_ADDR_FP_STR"\n", NODE_ADDR_FP_ARGS(l_uplinks + i)); + } + sprintf(l_ignored_str + strlen(l_ignored_str), "\tCooling (%zu):\n", l_low_availability_count); + for (size_t i = 0; i < l_low_availability_count; ++i) { + sprintf(l_ignored_str + strlen(l_ignored_str), "\t\t"NODE_ADDR_FP_STR"\n", NODE_ADDR_FP_ARGS(l_low_availability + i)); + } + log_it(L_DEBUG, "%s", l_ignored_str); + DAP_DELETE(l_ignored_str); + } l_size = sizeof(dap_chain_net_links_t) + sizeof(dap_stream_node_addr_t) * (l_uplinks_count + l_low_availability_count + 1); // memory alloc dap_chain_net_links_t *l_ret = NULL; @@ -122,11 +137,21 @@ static dap_chain_net_links_t *s_get_ignored_node_addrs(dap_chain_net_t *a_net, s static void s_balancer_link_prepare_success(dap_chain_net_t* a_net, dap_chain_net_links_t *a_link_full_node_list, const char* a_host_addr, uint16_t a_host_port) { char l_err_str[128] = {0}; + if (dap_log_level_get() <= L_DEBUG ) { + char *l_links_str = NULL; + DAP_NEW_Z_SIZE_RET(l_links_str, char, (DAP_HOSTADDR_STRLEN + 50) * a_link_full_node_list->count_node + 200 + strlen(a_net->pub.name), NULL); + sprintf(l_links_str + strlen(l_links_str), "Second %"DAP_UINT64_FORMAT_U" links was prepared from balancer in net %s:\n", a_link_full_node_list->count_node, a_net->pub.name); + for (size_t i = 0; i < a_link_full_node_list->count_node; ++i) { + dap_link_info_t *l_link_info = (dap_link_info_t *)a_link_full_node_list->nodes_info + i; + sprintf(l_links_str + strlen(l_links_str), "\t"NODE_ADDR_FP_STR " [ %s : %u ]\n", + NODE_ADDR_FP_ARGS_S(l_link_info->node_addr), l_link_info->uplink_addr, l_link_info->uplink_port); + } + log_it(L_DEBUG, "%s", l_links_str); + DAP_DELETE(l_links_str); + } struct json_object *l_json; for (size_t i = 0; i < a_link_full_node_list->count_node; ++i) { dap_link_info_t *l_link_info = (dap_link_info_t *)a_link_full_node_list->nodes_info + i; - log_it(L_DEBUG,"Link " NODE_ADDR_FP_STR " [ %s : %u ] prepare success", - NODE_ADDR_FP_ARGS_S(l_link_info->node_addr), l_link_info->uplink_addr, l_link_info->uplink_port); if (dap_chain_net_link_add(a_net, &l_link_info->node_addr, l_link_info->uplink_addr, l_link_info->uplink_port)) continue; l_json = s_balancer_states_json_collect(a_net, a_host_addr, a_host_port); @@ -136,8 +161,6 @@ static void s_balancer_link_prepare_success(dap_chain_net_t* a_net, dap_chain_ne json_object_object_add(l_json, "errorMessage", json_object_new_string(l_err_str)); dap_notify_server_send_mt(json_object_get_string(l_json)); json_object_put(l_json); - log_it(L_DEBUG, "Link "NODE_ADDR_FP_STR" successfully added", - NODE_ADDR_FP_ARGS_S(l_link_info->node_addr)); } } diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index 11cf64eb6bcf0f08c7dc32ce0435b22e34e7bdae..d530ede2b7aee567857a50e890a89168210073f2 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -61,7 +61,7 @@ static const uint64_t s_cmp_delta_timestamp = (uint64_t)1000 /*sec*/ * (uint64_t static const uint64_t s_cmp_delta_event = 0; static const uint64_t s_cmp_delta_atom = 10; static const uint64_t s_timer_update_states_info = 10 /*sec*/ * 1000; -static const char *s_states_group = ".nodes.states"; +static const char s_states_group[] = ".nodes.states"; /** * @brief get states info about current @@ -474,7 +474,7 @@ dap_list_t *dap_chain_node_get_states_list_sort(dap_chain_net_t *a_net, dap_chai log_it(L_DEBUG, "Can't find state about %s node, apply low priority", l_objs[i].key); l_item->downlinks_count = (uint32_t)(-1); } else if (l_data_size != sizeof(dap_chain_node_net_states_info_t) + (l_state_store_obj->uplinks_count + l_state_store_obj->downlinks_count) * sizeof(dap_chain_node_addr_t)) { - log_it(L_DEBUG, "Wrong %s node record size, expected %zu, get %zu", l_objs[i].key, sizeof(dap_chain_node_net_states_info_t) + (l_state_store_obj->uplinks_count + l_state_store_obj->downlinks_count) * sizeof(dap_chain_node_addr_t), l_data_size); + log_it(L_DEBUG, "Wrong %s node state record size, expected %zu, get %zu. Apply low priority", l_objs[i].key, sizeof(dap_chain_node_net_states_info_t) + (l_state_store_obj->uplinks_count + l_state_store_obj->downlinks_count) * sizeof(dap_chain_node_addr_t), l_data_size); l_item->downlinks_count = (uint32_t)(-1); } else { l_item->atoms_count = l_state_store_obj->atoms_count; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 6e6a98adf95551c9a2f37f48c108a83442fe466c..a65a28b99060eb025468d290b8f4cd27ef985c8b 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -785,7 +785,7 @@ int com_global_db(int a_argc, char ** a_argv, void **a_str_reply) return -DAP_CHAIN_NODE_CLI_COM_GLOBAL_DB_PARAM_ERR; } - if (!dap_global_db_del_sync(l_group_str, NULL)) + if (!dap_global_db_erase_table_sync(l_group_str)) { json_object* json_obj_drop = json_object_new_object(); json_object_object_add(json_obj_drop, "Dropped table", json_object_new_string(l_group_str)); @@ -1897,8 +1897,8 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; l_wallet = dap_chain_wallet_open(l_file_name, c_wallets_path, &res); if (l_wallet) { - l_addr = l_net ? dap_chain_wallet_get_addr(l_wallet, l_net->pub.id) : NULL; - const char *l_addr_str = dap_chain_addr_to_str_static(l_addr); + //l_addr = l_net ? dap_chain_wallet_get_addr(l_wallet, l_net->pub.id) : NULL; + //const char *l_addr_str = dap_chain_addr_to_str_static(l_addr); json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); if(l_wallet->flags & DAP_WALLET$M_FL_ACTIVE) @@ -1908,9 +1908,9 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; json_object_object_add(json_obj_wall, "deprecated", json_object_new_string( strlen(dap_chain_wallet_check_sign(l_wallet))!=0 ? "true" : "false")); - if (l_addr_str) { - json_object_object_add(json_obj_wall, "addr", json_object_new_string(l_addr_str)); - } + //if (l_addr_str) { + // json_object_object_add(json_obj_wall, "addr", json_object_new_string(l_addr_str)); + //} dap_chain_wallet_close(l_wallet); 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 9a2aa0f1615eec112615c0d783faae2484aecd08..494ae6cd9eab56720468c56ea16bdb808b801a69 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 @@ -607,7 +607,7 @@ void dap_chain_net_srv_stake_purge(dap_chain_net_t *a_net) { dap_ledger_t *l_ledger = a_net->pub.ledger; char *l_gdb_group = dap_ledger_get_gdb_group(l_ledger, DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_GDB_GROUP); - dap_global_db_del(l_gdb_group, NULL, NULL, NULL); + dap_global_db_erase_table(l_gdb_group, NULL, NULL); DAP_DELETE(l_gdb_group); s_stake_net_clear(a_net); } diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 5c5170110b0c6c12338cb54294641aad184613fa..17180d9a64676e2a41ebf7f06e577663ec8951b0 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -103,7 +103,7 @@ static bool s_chain_find_atom(dap_chain_block_cache_t* a_blocks, dap_chain_hash_ // Callbacks static void s_callback_delete(dap_chain_t * a_chain); // Accept new block -static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t, dap_hash_fast_t * a_atom_hash); +static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t, dap_hash_fast_t * a_atom_hash, bool a_atom_new); // Verify new block static dap_chain_atom_verify_res_t s_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t, dap_hash_fast_t * a_atom_hash); @@ -1247,10 +1247,10 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply) }; //Clear gdb char *l_group_fee = dap_chain_cs_blocks_get_fee_group(l_net->pub.name); - dap_global_db_del_sync(l_group_fee, NULL); + dap_global_db_erase_table_sync(l_group_fee); DAP_DELETE(l_group_fee); char *l_group_reward = dap_chain_cs_blocks_get_reward_group(l_net->pub.name); - dap_global_db_del_sync(l_group_reward, NULL); + dap_global_db_erase_table_sync(l_group_reward); DAP_DELETE(l_group_reward); json_object* json_arr_bl_out = json_object_new_array(); @@ -1630,7 +1630,7 @@ static void s_select_longest_branch(dap_chain_cs_blocks_t * a_blocks, dap_chain_ * @param a_atom_size * @return */ -static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom , size_t a_atom_size, dap_hash_fast_t *a_atom_hash) +static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom , size_t a_atom_size, dap_hash_fast_t *a_atom_hash, bool a_atom_new) { dap_chain_cs_blocks_t * l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain); dap_chain_block_t * l_block = (dap_chain_block_t *) a_atom; @@ -1648,7 +1648,7 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da dap_chain_cell_t *l_cell = dap_chain_cell_find_by_id(a_chain, l_block->hdr.cell_id); #ifndef DAP_CHAIN_BLOCKS_TEST if ( !dap_chain_net_get_load_mode( dap_chain_net_by_id(a_chain->net_id)) ) { - if ( (ret = dap_chain_atom_save(l_cell, a_atom, a_atom_size, &l_block_hash)) < 0 ) { + if ( (ret = dap_chain_atom_save(l_cell, a_atom, a_atom_size, a_atom_new ? &l_block_hash : NULL)) < 0 ) { log_it(L_ERROR, "Can't save atom to file, code %d", ret); return ATOM_REJECT; } else if (a_chain->is_mapped) { @@ -1732,7 +1732,7 @@ static dap_chain_atom_verify_res_t s_callback_atom_add(dap_chain_t * a_chain, da dap_chain_cell_t *l_cell = dap_chain_cell_find_by_id(a_chain, l_block->hdr.cell_id); #ifndef DAP_CHAIN_BLOCKS_TEST if ( !dap_chain_net_get_load_mode( dap_chain_net_by_id(a_chain->net_id)) ) { - if ( (ret = dap_chain_atom_save(l_cell, a_atom, a_atom_size, &l_block_hash)) < 0 ) { + if ( (ret = dap_chain_atom_save(l_cell, a_atom, a_atom_size, a_atom_new ? &l_block_hash : NULL)) < 0 ) { log_it(L_ERROR, "Can't save atom to file, code %d", ret); return ATOM_REJECT; } else if (a_chain->is_mapped) { diff --git a/modules/type/blocks/tests/dap_chain_blocks_test.c b/modules/type/blocks/tests/dap_chain_blocks_test.c index 74d87da324abff28757fea8a729b4ed5cae6c7a4..3f0708c388ec09473cd2d05d1cced260ad6e0c44 100644 --- a/modules/type/blocks/tests/dap_chain_blocks_test.c +++ b/modules/type/blocks/tests/dap_chain_blocks_test.c @@ -15,7 +15,7 @@ dap_hash_fast_t dap_chain_block_test_add_new_block (dap_hash_fast_t *a_prev_bloc dap_chain_block_t * l_block = dap_chain_block_new(a_prev_block_hash, &l_block_size); dap_assert_PIF(l_block != NULL, "Creating of block:"); dap_hash_fast(l_block, l_block_size, &l_block_hash); - dap_chain_atom_verify_res_t ret_val = a_chain->callback_atom_add(a_chain, (dap_chain_atom_ptr_t)l_block, l_block_size, &l_block_hash); + dap_chain_atom_verify_res_t ret_val = a_chain->callback_atom_add(a_chain, (dap_chain_atom_ptr_t)l_block, l_block_size, &l_block_hash, false); dap_assert_PIF( (ret_val == ATOM_ACCEPT || ret_val == ATOM_FORK), "Add block into chain: "); if (a_block) @@ -113,7 +113,7 @@ void dap_chain_blocks_test() l_block_hash_copy = DAP_DUP(&l_block_hash); l_first_branch_atoms_list = dap_list_append(l_first_branch_atoms_list, l_block_hash_copy); - dap_chain_atom_verify_res_t ret_val = l_chain->callback_atom_add(l_chain, (dap_chain_atom_ptr_t)l_block_double_main_branch, l_block_double_main_branch_size, &l_block_double_main_branch_hash); + dap_chain_atom_verify_res_t ret_val = l_chain->callback_atom_add(l_chain, (dap_chain_atom_ptr_t)l_block_double_main_branch, l_block_double_main_branch_size, &l_block_double_main_branch_hash, false); dap_assert_PIF(ret_val == ATOM_PASS, "Add existing block into middle of main chain. Must be passed: "); dap_assert_PIF(dap_chain_block_test_compare_chain_hash_lists(l_chain, l_first_branch_atoms_list), "Check chain after atoms adding to the main branch "); @@ -134,7 +134,7 @@ void dap_chain_blocks_test() dap_assert_PIF(dap_chain_block_test_compare_chain_hash_lists(l_chain, l_first_branch_atoms_list), "Check branches is not switched: "); - ret_val = l_chain->callback_atom_add(l_chain, (dap_chain_atom_ptr_t)l_block_repeat_first_forked, l_block_repeat_first_forked_size, &l_block_repeat_first_forked_hash); + ret_val = l_chain->callback_atom_add(l_chain, (dap_chain_atom_ptr_t)l_block_repeat_first_forked, l_block_repeat_first_forked_size, &l_block_repeat_first_forked_hash, false); dap_assert_PIF(ret_val == ATOM_PASS, "Add existing first forked block into chain. Must be passed: "); dap_test_msg("Add third atom to the forked branch..."); @@ -183,7 +183,7 @@ void dap_chain_blocks_test() dap_assert_PIF(dap_chain_block_test_compare_chain_hash_lists(l_chain, l_third_branch_atoms_list), "Check branches is switched: "); - ret_val = l_chain->callback_atom_add(l_chain, (dap_chain_atom_ptr_t)l_block_repeat_middle_forked, l_block_repeat_middle_forked_size, &l_block_repeat_middle_forked_hash); + ret_val = l_chain->callback_atom_add(l_chain, (dap_chain_atom_ptr_t)l_block_repeat_middle_forked, l_block_repeat_middle_forked_size, &l_block_repeat_middle_forked_hash, false); dap_assert_PIF(ret_val == ATOM_PASS, "Add existing block into middle of forked chain. Must be passed: "); dap_pass_msg("Fork handling test: ") diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 5beadec7de20f69f010e920f88a26f96de70839a..261d64f99f8733f3853d5795658d2d4af39b3ed4 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -97,7 +97,7 @@ static void s_threshold_free(dap_chain_cs_dag_t *a_dag); static dap_chain_cs_dag_event_item_t *s_dag_proc_treshold(dap_chain_cs_dag_t *a_dag); // Atomic element organization callbacks -static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t, dap_hash_fast_t *a_atom_hash); // Accept new event in dag +static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t, dap_hash_fast_t *a_atom_hash, bool a_atom_new); // Accept new event in dag static dap_chain_atom_ptr_t s_chain_callback_atom_add_from_treshold(dap_chain_t * a_chain, size_t *a_event_size_out); // Accept new event in dag from treshold static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t, dap_hash_fast_t *a_atom_hash); // Verify new event in dag static size_t s_chain_callback_atom_get_static_hdr_size(void); // Get dag event header size @@ -452,7 +452,7 @@ static int s_sort_event_item(dap_chain_cs_dag_event_item_t* a, dap_chain_cs_dag_ * @param a_atom_size * @return 0 if verified and added well, otherwise if not */ -static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size, dap_hash_fast_t *a_atom_hash) +static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size, dap_hash_fast_t *a_atom_hash, bool a_atom_new) { dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG(a_chain); dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *) a_atom; @@ -517,7 +517,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha case ATOM_ACCEPT: { dap_chain_cell_t *l_cell = dap_chain_cell_find_by_id(a_chain, l_event->header.cell_id); if ( !dap_chain_net_get_load_mode( dap_chain_net_by_id(a_chain->net_id)) ) { - if ( dap_chain_atom_save(l_cell, a_atom, a_atom_size, &l_event_hash) < 0 ) { + if ( dap_chain_atom_save(l_cell, a_atom, a_atom_size, a_atom_new ? &l_event_hash : NULL) < 0 ) { log_it(L_ERROR, "Can't save atom to file"); ret = ATOM_REJECT; break; @@ -700,7 +700,7 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da dap_hash_fast(l_event, l_event_size, &l_event_hash); bool l_res = false; if (l_dag->is_add_directly) { - dap_chain_atom_verify_res_t l_verify_res = s_chain_callback_atom_add(a_chain, l_event, l_event_size, &l_event_hash); + dap_chain_atom_verify_res_t l_verify_res = s_chain_callback_atom_add(a_chain, l_event, l_event_size, &l_event_hash, true); DAP_DELETE(l_event); if (l_verify_res != ATOM_ACCEPT) { log_it(L_ERROR, "Can't add new event to the file, atom verification result %d", l_verify_res); @@ -945,7 +945,7 @@ dap_chain_cs_dag_event_item_t* s_dag_proc_treshold(dap_chain_cs_dag_t * a_dag) dap_chain_hash_fast_to_str_static(&l_event_item->hash)); dap_chain_cell_t *l_cell = dap_chain_cell_find_by_id(a_dag->chain, l_event_item->event->header.cell_id); if ( !l_event_item->mapped_region ) { - if ( dap_chain_atom_save(l_cell, (const byte_t*)l_event_item->event, l_event_item->event_size, &l_event_item->hash) < 0 ) { + if ( dap_chain_atom_save(l_cell, (const byte_t*)l_event_item->event, l_event_item->event_size, NULL) < 0 ) { log_it(L_CRITICAL, "Can't move atom from threshold to file"); res = false; break; @@ -1421,7 +1421,7 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply) json_object_object_add(json_obj_round,"verification status", json_object_new_string(l_buf)); // If not verify only mode we add 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 + if (s_chain_callback_atom_add(l_chain, l_event, l_event_size, &l_event_hash, true)!= 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)); } else { diff --git a/modules/type/none/dap_chain_cs_none.c b/modules/type/none/dap_chain_cs_none.c index 65b7dc8771afa0cedf4492b89bbdaf9a8a429719..25124d12a4636f168a753953f34e0700ae9dbd40 100644 --- a/modules/type/none/dap_chain_cs_none.c +++ b/modules/type/none/dap_chain_cs_none.c @@ -60,7 +60,7 @@ typedef struct dap_nonconsensus_private { #define PVT(a) ((a) ? (dap_nonconsensus_private_t *)(a)->_internal : NULL) // Atomic element organization callbacks -static dap_chain_atom_verify_res_t s_nonconsensus_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t, size_t, dap_hash_fast_t *a_atom_hash); // Accept new event in gdb +static dap_chain_atom_verify_res_t s_nonconsensus_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t, size_t, dap_hash_fast_t *a_atom_hash, bool a_atom_new); // Accept new event in gdb static dap_chain_atom_verify_res_t s_nonconsensus_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t, size_t, dap_hash_fast_t *a_atom_hash); // Verify new event in gdb static size_t s_nonconsensus_callback_atom_get_static_hdr_size(void); // Get gdb event header size @@ -129,7 +129,7 @@ static void s_changes_callback_notify(dap_store_obj_t *a_obj, void *a_arg) return; dap_hash_fast_t l_hash = {}; dap_chain_hash_fast_from_hex_str(a_obj->key, &l_hash); - s_nonconsensus_callback_atom_add(l_chain, (dap_chain_datum_t *)a_obj->value, a_obj->value_len, &l_hash); + s_nonconsensus_callback_atom_add(l_chain, (dap_chain_datum_t *)a_obj->value, a_obj->value_len, &l_hash, false); } int s_nonconsensus_callback_created(dap_chain_t *a_chain, dap_config_t UNUSED_ARG *a_chain_cfg) @@ -266,7 +266,7 @@ static void s_nonconsensus_ledger_load(dap_chain_t *a_chain) // load ledger dap_hash_fast_t l_hash = {}; dap_chain_hash_fast_from_hex_str(it->key, &l_hash); - s_nonconsensus_callback_atom_add(a_chain, it->value, it->value_len, &l_hash); + s_nonconsensus_callback_atom_add(a_chain, it->value, it->value_len, &l_hash, false); log_it(L_DEBUG,"Load mode, doesn't save item %s:%s", it->key, l_nochain_pvt->group_datums); } dap_global_db_objs_delete(l_values, l_values_count); @@ -308,7 +308,7 @@ static size_t s_nonconsensus_callback_datums_pool_proc(dap_chain_t * a_chain, da * @param a_atom_size atom size * @return dap_chain_atom_verify_res_t */ -static dap_chain_atom_verify_res_t s_nonconsensus_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size, dap_hash_fast_t *a_atom_hash) +static dap_chain_atom_verify_res_t s_nonconsensus_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size, dap_hash_fast_t *a_atom_hash, bool UNUSED_ARG a_atom_new) { if (NULL == a_chain) { log_it(L_WARNING, "Arguments is NULL for s_nonconsensus_callback_atom_add");