diff --git a/dap-sdk b/dap-sdk index f57a08d56b0f01200fb5f7b9edde9977e13aefa5..c9259b9949a44daee571d2fff3bdc329758ba68a 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit f57a08d56b0f01200fb5f7b9edde9977e13aefa5 +Subproject commit c9259b9949a44daee571d2fff3bdc329758ba68a 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 176e99bf6e130de15ba6e73dbdc84a76e55136a0..404f16616f41837b0e4d76ef6536ff49d21291bd 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: @@ -745,7 +745,7 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } break; case DAP_CHAIN_CH_PKT_TYPE_CHAIN: { - if (!l_chain_pkt_data_size) { + if (!l_chain_pkt_data_size || l_chain_pkt_data_size > sizeof(dap_chain_ch_pkt_t) + DAP_CHAIN_ATOM_MAX_SIZE * 4) { log_it(L_WARNING, "Incorrect data size %zu in packet %s", l_chain_pkt_data_size, dap_chain_ch_pkt_type_to_str(l_ch_pkt->hdr.type)); dap_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id, @@ -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; @@ -1480,13 +1480,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); @@ -1497,7 +1496,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 825915ef413d48c1164fdd736560f5526b7f34f0..ffefac6b4a44721b8015f8014f655b42e1577e2c 100644 --- a/modules/chain/include/dap_chain.h +++ b/modules/chain/include/dap_chain.h @@ -85,7 +85,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 8e58e91ba550621f26b917d60d1add49fcc75243..112e5bc495c4d63e4757b8894932712506ad290e 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -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 8f1c8a6d2a71f17c39f68a1f0f7ed96b546f4c6c..3c05f9fc287bfe13380529bbc41c35ec44646bc7 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -5371,19 +5371,24 @@ 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; - bool is_null_hash = dap_hash_fast_is_blank(a_tx_first_hash); - bool is_search_enable = is_null_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) && @@ -5392,12 +5397,6 @@ static dap_ledger_tx_item_t* tx_item_find_by_addr(dap_ledger_t *a_ledger, const // Now work with it dap_chain_datum_tx_t *l_tx = l_iter_current->tx; dap_chain_hash_fast_t *l_tx_hash = &l_iter_current->tx_hash_fast; - // start searching from the next hash after a_tx_first_hash - if(!is_search_enable) { - if(dap_hash_fast_compare(l_tx_hash, a_tx_first_hash)) - is_search_enable = true; - continue; - } // Get 'out' items from transaction dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT_ALL, NULL); for(dap_list_t *it = l_list_out_items; it; it = dap_list_next(it)) { diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 5e0f867ca020f25fd51466d60c4794b2e4061e8a..ae29fe56a99637fb09d8defdd4bef8525bb3bb3f 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); @@ -1627,7 +1627,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; @@ -1645,7 +1645,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) { @@ -1729,7 +1729,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/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");