diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 5f6c1041c0b63c7730c215de7bda073504af0221..3a919cd8c0ce88cb86b21ac0f7a6bbe20e561820 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -54,7 +54,7 @@ #include "dap_chain_datum_tx_token.h" #include "dap_chain_datum_token.h" #include "dap_chain_mempool.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_ledger.h" #include "dap_chain_pvt.h" #include "json-c/json.h" @@ -3135,7 +3135,7 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, .group = l_gdb_group }; // Apply it with single DB transaction - if (dap_chain_global_db_driver_add(l_cache_used_outs, l_outs_used + 1)) { + if ( dap_global_db_set_raw(l_cache_used_outs, l_outs_used + 1,NULL,NULL) != 0) { if(s_debug_more) log_it(L_WARNING, "Ledger cache mismatch"); } diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h index 334db70dbfe203d85e84d0db77bfd03fb5e25391..e3d369ff2239efac6e4cc2c267a84b291ee486c4 100644 --- a/modules/chain/include/dap_chain.h +++ b/modules/chain/include/dap_chain.h @@ -26,7 +26,8 @@ #pragma once #include <stdbool.h> #include <pthread.h> -#include "dap_chain_global_db.h" +#include "dap_global_db.h" +#include "dap_global_db_sync.h" #include "dap_config.h" #include "dap_chain_common.h" #include "dap_chain_datum.h" 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 ba6325f455ed2737fb751d7e94060d2bda332375..745a4157eb4644fef812d028ee0200e85d01b0de 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -46,7 +46,7 @@ #include "dap_cert.h" #include "uthash.h" #include "dap_http_client.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_remote.h" #include "dap_stream.h" #include "dap_stream_ch_pkt.h" diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index 47eb1f0fe670c86a936907dcf803dff82a9da9b3..2290c9224ba89f7425cb5271c2a6dbaa930053d4 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -56,7 +56,7 @@ #include "dap_chain_cs.h" #include "dap_chain_cell.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_stream.h" #include "dap_stream_pkt.h" diff --git a/modules/consensus/block-poa/dap_chain_cs_block_poa.c b/modules/consensus/block-poa/dap_chain_cs_block_poa.c index 3c9424f31cf009b04a4599154d5ba10879368d1a..5487d268a6890bd1c183d88468259980e432029a 100644 --- a/modules/consensus/block-poa/dap_chain_cs_block_poa.c +++ b/modules/consensus/block-poa/dap_chain_cs_block_poa.c @@ -35,7 +35,7 @@ #include "dap_chain_cs_block_poa.h" #include "dap_chain_node_cli.h" #include "dap_chain_node_cli_cmd.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_cs.h" #include "dap_chain_cs_blocks.h" #include "dap_chain_net_srv_stake.h" diff --git a/modules/consensus/block-ton/dap_chain_cs_block_ton.c b/modules/consensus/block-ton/dap_chain_cs_block_ton.c index 6514720a8a64eaff901e9417ba8db86c999ae5ea..9986f70d7537564b4a9e490965670f19d21dbd6a 100644 --- a/modules/consensus/block-ton/dap_chain_cs_block_ton.c +++ b/modules/consensus/block-ton/dap_chain_cs_block_ton.c @@ -1325,10 +1325,307 @@ static void s_session_packet_in_handler_finish_save(dap_chain_cs_block_ton_sessi } } -struct proc_msg_type_submit{ +/** + * @brief The proc_msg_type_commit_sign struct + */ +struct proc_msg_type_commit_sign{ dap_chain_cs_block_ton_session_t *session; + dap_chain_hash_fast_t candidate_hash; + dap_sign_t *candidate_sign; + char * candidate_hash_str; + + dap_chain_cs_block_ton_round_t * round; + dap_chain_cs_block_ton_round_id_t round_id; + dap_chain_cs_block_ton_message_t * message; size_t message_size; + dap_chain_node_addr_t sender_node_addr; +}; + +/** + * @brief s_callback_get_candidate_block_and_commit_sign + * @param a_global_db_context + * @param a_rc + * @param a_group + * @param a_key + * @param a_value + * @param a_value_size + * @param a_value_ts + * @param a_is_pinned + * @param a_arg + */ +static void s_callback_get_candidate_block_and_commit_sign (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg) +{ + struct proc_msg_type_commit_sign * l_args = (struct proc_msg_type_commit_sign *) a_arg; + dap_chain_cs_block_ton_session_t *l_session = l_args->session; + dap_chain_hash_fast_t l_candidate_hash = l_args->candidate_hash; + dap_sign_t *l_candidate_sign = l_args->candidate_sign; + char * l_candidate_hash_str = l_args->candidate_hash_str; + dap_chain_cs_block_ton_message_t * l_message = l_args->message; + size_t l_message_size = l_args->message_size; + dap_chain_node_addr_t l_sender_node_addr = l_args->sender_node_addr; + dap_chain_cs_block_ton_round_t * l_round = l_args->round; // Part of session, rwlock need to be locked properly with it + dap_chain_cs_block_ton_round_id_t l_round_id = l_args->round_id; + + DAP_DELETE(l_args); + + size_t l_store_size = a_value_size; + dap_chain_cs_block_ton_store_t *l_store = (dap_chain_cs_block_ton_store_t *) a_value; + bool l_finalize_consensus = false; + + pthread_rwlock_rdlock(&l_session->rwlock); + + if (l_store) { + size_t l_candidate_size = l_store->hdr.candidate_size; + dap_chain_block_t *l_candidate = + (dap_chain_block_t *)DAP_DUP_SIZE(&l_store->candidate_n_signs, l_candidate_size); + size_t l_offset = dap_chain_block_get_sign_offset(l_candidate, l_candidate_size); + + int l_sign_verified=0; + // check candidate hash sign + if ( (l_sign_verified=dap_sign_verify(l_candidate_sign, + l_candidate, l_offset+sizeof(l_candidate->hdr))) == 1 ) { + l_message->hdr.is_verified = true; + l_store->hdr.sign_collected = true; + if (dap_global_db_set(l_session->gdb_group_store, l_candidate_hash_str, l_store, + l_store_size, true, NULL, NULL) == 0 ) { + uint16_t l_commitsign_count = s_session_message_count( + l_session, DAP_TON$ROUND_CUR, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_COMMIT_SIGN, + &l_candidate_hash, NULL); + l_commitsign_count++; + if ( 3* l_commitsign_count >= 2*l_round->validators_count ) { + // s_session_round_finish(l_session,false); + if (l_round_id.uint64 == l_session->cur_round.id.uint64) { + l_finalize_consensus = true; + } + if (PVT(l_session->ton)->debug) + log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Candidate:%s collected COMMIT_SIGN more than 2/3 of the validators, so to finished this round", + l_session->chain->net_name, l_session->chain->name, l_round->id.uint64, + l_session->attempt_current_number, l_candidate_hash_str); + } + } + } + else { + log_it(L_WARNING, "Candidate:%s sign is incorrect: code %d", l_candidate_hash_str, l_sign_verified); + } + } + pthread_rwlock_unlock(&l_session->rwlock); + DAP_DELETE(l_store); + DAP_DELETE(l_candidate_hash_str); + s_session_packet_in_handler_finish_save(l_session, &l_sender_node_addr,l_message, l_message_size, l_finalize_consensus); + +} + + +/** + * @brief The proc_msg_type_pre_commit struct + */ +struct proc_msg_type_pre_commit{ + dap_chain_cs_block_ton_session_t *session; + dap_chain_hash_fast_t candidate_hash; + char * candidate_hash_str; +}; + +/** + * @brief s_callback_get_candidate_block_and_pre_commit + * @param a_global_db_context + * @param a_rc + * @param a_group + * @param a_key + * @param a_value + * @param a_value_size + * @param a_value_ts + * @param a_is_pinned + * @param a_arg + */ +static void s_callback_get_candidate_block_and_pre_commit (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg) +{ + struct proc_msg_type_pre_commit * l_args = (struct proc_msg_type_pre_commit *) a_arg; + dap_chain_cs_block_ton_session_t *l_session = l_args->session; + dap_chain_hash_fast_t l_candidate_hash = l_args->candidate_hash; + char * l_candidate_hash_str = l_args->candidate_hash_str; + DAP_DELETE(l_args); + + size_t l_store_size = a_value_size; + dap_chain_cs_block_ton_store_t *l_store = (dap_chain_cs_block_ton_store_t *) a_value; + + pthread_rwlock_rdlock(&l_session->rwlock); + + // event CommitSign + if (l_store) { + if (PVT(l_session->ton)->blocks_sign_key) { + l_store->hdr.precommit_collected = true; + + if (dap_global_db_set_unsafe(a_global_db_context, l_session->gdb_group_store,l_candidate_hash_str, l_store, + l_store_size, true ) == 0 ) { + size_t l_candidate_size = l_store->hdr.candidate_size; + dap_chain_block_t *l_candidate = + (dap_chain_block_t *)DAP_DUP_SIZE(&l_store->candidate_n_signs, l_candidate_size); + size_t l_offset = dap_chain_block_get_sign_offset(l_candidate, l_candidate_size); + dap_sign_t *l_candidate_sign = dap_sign_create(PVT(l_session->ton)->blocks_sign_key, + l_candidate, l_offset + sizeof(l_candidate->hdr), 0); + size_t l_candidate_sign_size = dap_sign_get_size(l_candidate_sign); + + size_t l_commitsign_size = sizeof(dap_chain_cs_block_ton_message_commitsign_t)+l_candidate_sign_size; + dap_chain_cs_block_ton_message_commitsign_t *l_commitsign = + DAP_NEW_SIZE(dap_chain_cs_block_ton_message_commitsign_t, l_commitsign_size); + l_commitsign->round_id.uint64 = l_session->cur_round.id.uint64; + memcpy(&l_commitsign->candidate_hash, &l_candidate_hash, sizeof(dap_chain_hash_fast_t)); + memcpy(l_commitsign->candidate_sign, l_candidate_sign, l_candidate_sign_size); + s_message_send(l_session, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_COMMIT_SIGN, (uint8_t*)l_commitsign, + l_commitsign_size, l_session->cur_round.validators_start); + DAP_DELETE(l_commitsign); + DAP_DELETE(l_candidate); + DAP_DELETE(l_candidate_sign); + pthread_rwlock_unlock(&l_session->rwlock); + + pthread_rwlock_wrlock(&l_session->rwlock); + l_session->state = DAP_STREAM_CH_CHAIN_SESSION_STATE_WAIT_SIGNS; + l_session->ts_round_state_commit = dap_time_now(); + + if (PVT(l_session->ton)->debug) + log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U" attempt:%hu Candidate:%s collected PRE_COMMIT more than 2/3 of the validators, so to sent a COMMIT_SIGN", + l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, + l_session->attempt_current_number, l_candidate_hash_str); + } + } + else { + log_it(L_WARNING, "Can't sign block with blocks-sign-cert in [block-ton] section"); + } + DAP_DELETE(l_store); + } + pthread_rwlock_unlock(&l_session->rwlock); + + DAP_DELETE(l_candidate_hash_str); + +} + +/** + * @brief The proc_msg_type_vote struct + */ +struct proc_msg_type_vote{ + dap_chain_cs_block_ton_session_t *session; + dap_chain_hash_fast_t candidate_hash; + char * candidate_hash_str; +}; + +/** + * @brief s_callback_get_candidate_block_and_vote + * @param a_global_db_context + * @param a_rc + * @param a_group + * @param a_key + * @param a_value + * @param a_value_size + * @param a_value_ts + * @param a_is_pinned + * @param a_arg + */ +static void s_callback_get_candidate_block_and_vote (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg) +{ + struct proc_msg_type_vote * l_args = (struct proc_msg_type_vote *) a_arg; + dap_chain_cs_block_ton_session_t *l_session = l_args->session; + dap_chain_hash_fast_t l_candidate_hash = l_args->candidate_hash; + char * l_candidate_hash_str = l_args->candidate_hash_str; + DAP_DELETE(l_args); + size_t l_store_size = a_value_size; + dap_chain_cs_block_ton_store_t *l_store = (dap_chain_cs_block_ton_store_t *) a_value; + if (l_store) { + l_store->hdr.vote_collected = true; + if (dap_global_db_set_unsafe(a_global_db_context, l_session->gdb_group_store, l_candidate_hash_str, + l_store, l_store_size, true ) == 0 ) { + // Send PreCommit + dap_chain_cs_block_ton_message_precommit_t *l_precommit = + DAP_NEW_Z(dap_chain_cs_block_ton_message_precommit_t); + l_precommit->round_id.uint64 = l_session->cur_round.id.uint64; + memcpy(&l_precommit->candidate_hash, &l_candidate_hash, sizeof(dap_chain_hash_fast_t)); + l_precommit->attempt_number = l_session->attempt_current_number; + s_message_send(l_session, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_PRE_COMMIT, (uint8_t*)l_precommit, + sizeof(dap_chain_cs_block_ton_message_precommit_t), l_session->cur_round.validators_start); + DAP_DELETE(l_precommit); + if (PVT(l_session->ton)->debug) + log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Candidate:%s collected VOTE more than 2/3 of the validators, so to sent a PRE_COMMIT", + l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, + l_session->attempt_current_number, l_candidate_hash_str); + } + DAP_DELETE(l_store); + } + DAP_DELETE(l_candidate_hash_str); + +} + + +/** + * @brief The proc_msg_type_approve struct + */ +struct proc_msg_type_approve{ + dap_chain_cs_block_ton_session_t *session; + dap_chain_hash_fast_t candidate_hash; + char * candidate_hash_str; +}; + +/** + * @brief s_callback_get_candidate_block_and_approve + * @param a_global_db_context + * @param a_rc + * @param a_group + * @param a_key + * @param a_value + * @param a_value_size + * @param a_value_ts + * @param a_is_pinned + * @param a_arg + */ +static void s_callback_get_candidate_block_and_approve (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg) +{ + struct proc_msg_type_approve * l_args = (struct proc_msg_type_approve *) a_arg; + dap_chain_cs_block_ton_session_t *l_session = l_args->session; + dap_chain_hash_fast_t l_candidate_hash = l_args->candidate_hash; + char * l_candidate_hash_str = l_args->candidate_hash_str; + + DAP_DELETE(l_args); + + dap_chain_cs_block_ton_store_t *l_store = (dap_chain_cs_block_ton_store_t *) a_value; + size_t l_store_size = a_value_size; + + pthread_rwlock_rdlock(&l_session->rwlock); + + if (l_store && !l_store->hdr.approve_collected) { + if (PVT(l_session->ton)->debug) + log_it(L_MSG, "TON: APPROVE: candidate found in store:%s & !approve_collected", l_candidate_hash_str); + l_store->hdr.approve_collected = true; + if (dap_global_db_set_unsafe( a_global_db_context, l_session->gdb_group_store,l_candidate_hash_str, + l_store,l_store_size, true) == 0 ) { + if (PVT(l_session->ton)->debug) + log_it(L_MSG, "TON: APPROVE: candidate update:%s approve_collected=true", l_candidate_hash_str); + } else + if (PVT(l_session->ton)->debug) + log_it(L_MSG, "TON: APPROVE: can`t update candidate:%s", l_candidate_hash_str); + + // event Vote + dap_chain_cs_block_ton_message_vote_t *l_vote = + DAP_NEW_Z(dap_chain_cs_block_ton_message_vote_t); + l_vote->round_id.uint64 = l_session->cur_round.id.uint64; + memcpy(&l_vote->candidate_hash, &l_candidate_hash, sizeof(dap_chain_hash_fast_t)); + l_vote->attempt_number = l_session->attempt_current_number; + s_message_send(l_session, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_VOTE, (uint8_t*)l_vote, + sizeof(dap_chain_cs_block_ton_message_vote_t), l_session->cur_round.validators_start); + DAP_DELETE(l_vote); + if (PVT(l_session->ton)->debug) + log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu This is first attempt, so to sent a VOTE for candidate:%s", + l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, + l_session->attempt_current_number, l_candidate_hash_str ); + DAP_DELETE(l_store); + } + pthread_rwlock_unlock(&l_session->rwlock); + DAP_DELETE(l_candidate_hash_str); +} + +/** + * @brief The proc_msg_type_submit struct + */ +struct proc_msg_type_submit{ + dap_chain_cs_block_ton_session_t *session; dap_chain_hash_fast_t candidate_hash; char * candidate_hash_str; dap_chain_block_t * candidate; @@ -1468,7 +1765,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod l_message->hdr.sign_size, a_data_size, sizeof(*l_message)); goto handler_finish; } - size_t l_message_data_size = a_data_size - l_message->hdr.sign_size - l_message->hdr.sign_size ; + size_t l_message_data_size = a_data_size - sizeof(*l_message) - l_message->hdr.sign_size ; + byte_t * l_message_data = l_message->sign_n_message + l_message->hdr.sign_size; if ( !PVT(l_session->ton)->validators_list_by_stake ) { size_t l_data_size = 0; @@ -1788,17 +2086,15 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod switch (l_message->hdr.type) { case DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_SUBMIT: { if( sizeof(dap_chain_cs_block_ton_message_submit_t) > l_message_data_size){ - log_it(L_CRITICAL, "Wrong submit message size,have %zu bytes for data section when only a header requires %zu bytes", + log_it(L_WARNING, "Wrong submit message size,have %zu bytes for data section when only a header requires %zu bytes", l_message_data_size,sizeof(dap_chain_cs_block_ton_message_submit_t)); goto handler_finish; } - dap_chain_cs_block_ton_message_submit_t *l_submit = - (dap_chain_cs_block_ton_message_submit_t *) - (l_message->sign_n_message+l_message->hdr.sign_size); + dap_chain_cs_block_ton_message_submit_t *l_submit = (dap_chain_cs_block_ton_message_submit_t *)l_message_data; size_t l_candidate_size = l_submit->candidate_size; if( l_message_data_size < l_candidate_size + sizeof(*l_submit) ){ - log_it(L_CRITICAL, "Wrong submit message size %zu when maximum is %zu for received message", l_candidate_size, + log_it(L_WARNING, "Wrong submit message size %zu when maximum is %zu for received message", l_candidate_size, l_message_data_size - sizeof(*l_submit)); goto handler_finish; } @@ -1843,9 +2139,14 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod } } break; case DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_REJECT: { - dap_chain_cs_block_ton_message_reject_t *l_reject = - (dap_chain_cs_block_ton_message_reject_t *) - (l_message->sign_n_message+l_message->hdr.sign_size); + if ( sizeof(dap_chain_cs_block_ton_message_reject_t) >l_message_data_size ){ + log_it(L_WARNING, "Wrong reject message size,have %zu bytes for data section when requires %zu bytes", + l_message_data_size,sizeof(dap_chain_cs_block_ton_message_reject_t)); + goto handler_finish; + } + dap_chain_cs_block_ton_message_reject_t *l_reject = (dap_chain_cs_block_ton_message_reject_t *) l_message_data; + + dap_chain_hash_fast_t *l_candidate_hash = &l_reject->candidate_hash; pthread_rwlock_rdlock(&l_session->rwlock); @@ -1887,9 +2188,20 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod DAP_DELETE(l_candidate_hash_str); } break; case DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_APPROVE: { - dap_chain_cs_block_ton_message_approve_t *l_approve = - (dap_chain_cs_block_ton_message_approve_t *) - (l_message->sign_n_message+l_message->hdr.sign_size); + if ( sizeof(dap_chain_cs_block_ton_message_approve_t) >l_message_data_size ){ + log_it(L_WARNING, "Wrong reject message size,have %zu bytes for data section when requires %zu bytes", + l_message_data_size,sizeof(dap_chain_cs_block_ton_message_approve_t)); + goto handler_finish; + } + dap_chain_cs_block_ton_message_approve_t *l_approve = (dap_chain_cs_block_ton_message_approve_t *) l_message_data; + dap_sign_t * l_candidate_sign = (dap_sign_t *) l_approve->candidate_hash_sign; + size_t l_candidate_hash_sign_size = l_message_data_size - sizeof(dap_chain_cs_block_ton_message_approve_t); + if (l_candidate_hash_sign_size || dap_sign_get_size(l_candidate_sign) > l_candidate_hash_sign_size ){ + log_it(L_WARNING, "Wrong reject message size,have %zu bytes for candidate sign section when requires maximum %zu bytes", + dap_sign_get_size(l_candidate_sign),l_candidate_hash_sign_size); + goto handler_finish; + } + dap_chain_hash_fast_t *l_candidate_hash = &l_approve->candidate_hash; if ( s_hash_is_null(l_candidate_hash) ) { @@ -1901,7 +2213,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod } char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash); - if (PVT(l_session->ton)->debug) + pthread_rwlock_rdlock(&l_session->rwlock); + if (PVT(l_session->ton)->debug) log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Receive APPROVE: candidate:%s", l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, l_session->attempt_current_number, l_candidate_hash_str); @@ -1911,7 +2224,6 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod if ( (l_sign_verified=dap_sign_verify( (dap_sign_t*)l_approve->candidate_hash_sign, l_candidate_hash, sizeof(dap_chain_hash_fast_t))) == 1 ) { l_message->hdr.is_verified=true; - pthread_rwlock_rdlock(&l_session->rwlock); if ( l_session->attempt_current_number == 1 ) { // if this first attempt then send Vote event uint16_t l_approve_count = s_session_message_count( @@ -1924,54 +2236,40 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, l_session->attempt_current_number, l_candidate_hash_str); - size_t l_store_size = 0; - dap_chain_cs_block_ton_store_t *l_store = - (dap_chain_cs_block_ton_store_t *)dap_chain_global_db_gr_get( - l_candidate_hash_str, &l_store_size, l_session->gdb_group_store); - if (l_store && !l_store->hdr.approve_collected) { - if (PVT(l_session->ton)->debug) - log_it(L_MSG, "TON: APPROVE: candidate found in store:%s & !approve_collected", l_candidate_hash_str); - l_store->hdr.approve_collected = true; - if (dap_global_db_set(l_session->gdb_group_store,l_candidate_hash_str, - l_store,l_store_size, true, NULL, NULL) == 0 ) { - if (PVT(l_session->ton)->debug) - log_it(L_MSG, "TON: APPROVE: candidate update:%s approve_collected=true", l_candidate_hash_str); - } else - if (PVT(l_session->ton)->debug) - log_it(L_MSG, "TON: APPROVE: can`t update candidate:%s", l_candidate_hash_str); - - // event Vote - dap_chain_cs_block_ton_message_vote_t *l_vote = - DAP_NEW_Z(dap_chain_cs_block_ton_message_vote_t); - l_vote->round_id.uint64 = l_session->cur_round.id.uint64; - memcpy(&l_vote->candidate_hash, l_candidate_hash, sizeof(dap_chain_hash_fast_t)); - l_vote->attempt_number = l_session->attempt_current_number; - s_message_send(l_session, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_VOTE, (uint8_t*)l_vote, - sizeof(dap_chain_cs_block_ton_message_vote_t), l_session->cur_round.validators_start); - DAP_DELETE(l_vote); - if (PVT(l_session->ton)->debug) - log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu This is first attempt, so to sent a VOTE for candidate:%s", - l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, - l_session->attempt_current_number, l_candidate_hash_str ); - - DAP_DELETE(l_store); - } - } - } - pthread_rwlock_unlock(&l_session->rwlock); + struct proc_msg_type_approve * l_args = DAP_NEW_Z(struct proc_msg_type_approve); + l_args->session = l_session; + l_args->candidate_hash_str = l_candidate_hash_str; + l_args->candidate_hash = *l_candidate_hash; + + if ( dap_global_db_get(l_session->gdb_group_store,l_candidate_hash_str,s_callback_get_candidate_block_and_approve, l_args) != 0 ){ + log_it(L_ERROR, "Can't get candidate block for approvement"); + DAP_DELETE(l_args); + DAP_DELETE(l_candidate_hash_str); + } + }else{ + DAP_DELETE(l_candidate_hash_str); + } + }else{ + DAP_DELETE(l_candidate_hash_str); + } } else { log_it(L_WARNING, "Candidate hash sign is incorrect: code %d", l_sign_verified); - } - DAP_DELETE(l_candidate_hash_str); - } break; + DAP_DELETE(l_candidate_hash_str); + } + pthread_rwlock_unlock(&l_session->rwlock); + } break; case DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_VOTE_FOR: { - pthread_rwlock_rdlock(&l_session->rwlock); + if ( sizeof(dap_chain_cs_block_ton_message_votefor_t) >l_message_data_size ){ + log_it(L_WARNING, "Wrong vote_for message size,have %zu bytes for data section when requires %zu bytes", + l_message_data_size,sizeof(dap_chain_cs_block_ton_message_votefor_t)); + goto handler_finish; + } - dap_chain_cs_block_ton_message_votefor_t *l_votefor = - (dap_chain_cs_block_ton_message_votefor_t *) - (l_message->sign_n_message+l_message->hdr.sign_size); + dap_chain_cs_block_ton_message_votefor_t *l_votefor = (dap_chain_cs_block_ton_message_votefor_t *) l_message_data; dap_chain_hash_fast_t *l_candidate_hash = &l_votefor->candidate_hash; - + + pthread_rwlock_rdlock(&l_session->rwlock); + uint16_t l_attempt_current = l_session->attempt_current_number; if ( l_votefor->attempt_number != l_attempt_current) { pthread_rwlock_unlock(&l_session->rwlock); @@ -2016,9 +2314,12 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod pthread_rwlock_unlock(&l_session->rwlock); } break; case DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_VOTE: { - dap_chain_cs_block_ton_message_vote_t *l_vote = - (dap_chain_cs_block_ton_message_vote_t *) - (l_message->sign_n_message+l_message->hdr.sign_size); + if ( sizeof(dap_chain_cs_block_ton_message_vote_t) >l_message_data_size ){ + log_it(L_WARNING, "Wrong vote_for message size,have %zu bytes for data section when requires %zu bytes", + l_message_data_size,sizeof(dap_chain_cs_block_ton_message_vote_t)); + goto handler_finish; + } + dap_chain_cs_block_ton_message_vote_t *l_vote = (dap_chain_cs_block_ton_message_vote_t *) l_message_data; dap_chain_hash_fast_t *l_candidate_hash = &l_vote->candidate_hash; if ( l_vote->attempt_number != l_session->attempt_current_number) { @@ -2046,38 +2347,26 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod l_candidate_hash, &l_attempt_number); l_vote_count++; if (l_vote_count * 3 >= l_session->cur_round.validators_count * 2){ - size_t l_store_size = 0; - dap_chain_cs_block_ton_store_t *l_store = - (dap_chain_cs_block_ton_store_t *)dap_chain_global_db_gr_get( - l_candidate_hash_str, &l_store_size, l_session->gdb_group_store); - if (l_store) { - l_store->hdr.vote_collected = true; - if (dap_global_db_set(l_session->gdb_group_store, l_candidate_hash_str, - l_store, l_store_size, true, NULL,NULL ) == 0 ) { - // Send PreCommit - dap_chain_cs_block_ton_message_precommit_t *l_precommit = - DAP_NEW_Z(dap_chain_cs_block_ton_message_precommit_t); - l_precommit->round_id.uint64 = l_session->cur_round.id.uint64; - memcpy(&l_precommit->candidate_hash, l_candidate_hash, sizeof(dap_chain_hash_fast_t)); - l_precommit->attempt_number = l_session->attempt_current_number; - s_message_send(l_session, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_PRE_COMMIT, (uint8_t*)l_precommit, - sizeof(dap_chain_cs_block_ton_message_precommit_t), l_session->cur_round.validators_start); - DAP_DELETE(l_precommit); - if (PVT(l_session->ton)->debug) - log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Candidate:%s collected VOTE more than 2/3 of the validators, so to sent a PRE_COMMIT", - l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, - l_session->attempt_current_number, l_candidate_hash_str); - } - DAP_DELETE(l_store); - } + struct proc_msg_type_vote * l_args = DAP_NEW_Z(struct proc_msg_type_vote); + l_args->session = l_session; + l_args->candidate_hash_str = l_candidate_hash_str; + l_args->candidate_hash = *l_candidate_hash; + if (dap_global_db_get(l_session->gdb_group_store,l_candidate_hash_str,s_callback_get_candidate_block_and_vote, l_args ) != 0 ){ + log_it (L_ERROR, "Can't process get request for s_callback_get_candidate_block_and_vote()"); + DAP_DELETE(l_candidate_hash_str); + DAP_DELETE(l_args); + } } - DAP_DELETE(l_candidate_hash_str); pthread_rwlock_unlock(&l_session->rwlock); } break; case DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_PRE_COMMIT: { - dap_chain_cs_block_ton_message_precommit_t *l_precommit = - (dap_chain_cs_block_ton_message_precommit_t *) - (l_message->sign_n_message+l_message->hdr.sign_size); + if ( sizeof(dap_chain_cs_block_ton_message_precommit_t) >l_message_data_size ){ + log_it(L_WARNING, "Wrong pre_commit message size,have %zu bytes for data section when requires %zu bytes", + l_message_data_size,sizeof(dap_chain_cs_block_ton_message_precommit_t)); + goto handler_finish; + } + + dap_chain_cs_block_ton_message_precommit_t *l_precommit = (dap_chain_cs_block_ton_message_precommit_t *) l_message_data; dap_chain_hash_fast_t *l_candidate_hash = &l_precommit->candidate_hash; pthread_rwlock_rdlock(&l_session->rwlock); @@ -2101,69 +2390,45 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, l_session->attempt_current_number, l_candidate_hash_str); - pthread_rwlock_wrlock(&l_session->rwlock); uint16_t l_attempt_number = l_session->attempt_current_number; uint16_t l_precommit_count = s_session_message_count( l_session, DAP_TON$ROUND_CUR, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_PRE_COMMIT, l_candidate_hash, &l_attempt_number); l_precommit_count++; if ( 3* l_precommit_count >= 2*l_session->cur_round.validators_count ) { - size_t l_store_size = 0; - dap_chain_cs_block_ton_store_t *l_store = - (dap_chain_cs_block_ton_store_t *)dap_chain_global_db_gr_get( - l_candidate_hash_str, &l_store_size, l_session->gdb_group_store); - // event CommitSign - if (l_store) { - if (PVT(l_session->ton)->blocks_sign_key) { - l_store->hdr.precommit_collected = true; - - if (dap_global_db_set(l_session->gdb_group_store,l_candidate_hash_str, l_store, - l_store_size, true, NULL, NULL) == 0 ) { - size_t l_candidate_size = l_store->hdr.candidate_size; - dap_chain_block_t *l_candidate = - (dap_chain_block_t *)DAP_DUP_SIZE(&l_store->candidate_n_signs, l_candidate_size); - size_t l_offset = dap_chain_block_get_sign_offset(l_candidate, l_candidate_size); - dap_sign_t *l_candidate_sign = dap_sign_create(PVT(l_session->ton)->blocks_sign_key, - l_candidate, l_offset + sizeof(l_candidate->hdr), 0); - size_t l_candidate_sign_size = dap_sign_get_size(l_candidate_sign); - - size_t l_commitsign_size = sizeof(dap_chain_cs_block_ton_message_commitsign_t)+l_candidate_sign_size; - dap_chain_cs_block_ton_message_commitsign_t *l_commitsign = - DAP_NEW_SIZE(dap_chain_cs_block_ton_message_commitsign_t, l_commitsign_size); - l_commitsign->round_id.uint64 = l_session->cur_round.id.uint64; - memcpy(&l_commitsign->candidate_hash, l_candidate_hash, sizeof(dap_chain_hash_fast_t)); - memcpy(l_commitsign->candidate_sign, l_candidate_sign, l_candidate_sign_size); - s_message_send(l_session, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_COMMIT_SIGN, (uint8_t*)l_commitsign, - l_commitsign_size, l_session->cur_round.validators_start); - DAP_DELETE(l_commitsign); - DAP_DELETE(l_candidate); - DAP_DELETE(l_candidate_sign); - pthread_rwlock_unlock(&l_session->rwlock); - - pthread_rwlock_wrlock(&l_session->rwlock); - l_session->state = DAP_STREAM_CH_CHAIN_SESSION_STATE_WAIT_SIGNS; - l_session->ts_round_state_commit = dap_time_now(); - - if (PVT(l_session->ton)->debug) - log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U" attempt:%hu Candidate:%s collected PRE_COMMIT more than 2/3 of the validators, so to sent a COMMIT_SIGN", - l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, - l_session->attempt_current_number, l_candidate_hash_str); - pthread_rwlock_unlock(&l_session->rwlock); - } - } - else { - log_it(L_WARNING, "Can't sign block with blocks-sign-cert in [block-ton] section"); - } - DAP_DELETE(l_store); - } + struct proc_msg_type_pre_commit * l_args = DAP_NEW_Z(struct proc_msg_type_pre_commit); + l_args->session = l_session; + l_args->candidate_hash = *l_candidate_hash; + l_args->candidate_hash_str = l_candidate_hash_str; + if( dap_global_db_get(l_session->gdb_group_store, l_candidate_hash_str,s_callback_get_candidate_block_and_pre_commit, l_args ) != 0 ){ + log_it (L_ERROR, "Can't process get request for s_callback_get_candidate_block_and_pre_commit()"); + DAP_DELETE(l_candidate_hash_str); + DAP_DELETE(l_args); + } } - DAP_DELETE(l_candidate_hash_str); + pthread_rwlock_unlock(&l_session->rwlock); + } break; case DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_COMMIT_SIGN: { - dap_chain_cs_block_ton_message_commitsign_t *l_commitsign = - (dap_chain_cs_block_ton_message_commitsign_t *) - (l_message->sign_n_message+l_message->hdr.sign_size); - dap_chain_hash_fast_t *l_candidate_hash = &l_commitsign->candidate_hash; + if ( sizeof(dap_chain_cs_block_ton_message_commitsign_t) >l_message_data_size ){ + log_it(L_WARNING, "Wrong commit_sign message size,have %zu bytes for data section when requires %zu bytes", + l_message_data_size,sizeof(dap_chain_cs_block_ton_message_commitsign_t)); + goto handler_finish; + } + + dap_chain_cs_block_ton_message_commitsign_t *l_commitsign = (dap_chain_cs_block_ton_message_commitsign_t *) l_message_data; + dap_chain_hash_fast_t *l_candidate_hash = &l_commitsign->candidate_hash; + + dap_sign_t * l_candidate_sign = (dap_sign_t *) l_commitsign->candidate_sign; + size_t l_candidate_sign_size = dap_sign_get_size(l_candidate_sign); + size_t l_message_candidate_sign_size_max = l_message_data_size - sizeof(dap_chain_cs_block_ton_message_commitsign_t); + if (l_message_candidate_sign_size_max == 0 || dap_sign_get_size(l_candidate_sign) > l_message_candidate_sign_size_max ){ + log_it(L_WARNING, "Wrong reject message size,have %zu bytes for candidate sign section when requires maximum %zu bytes", + l_candidate_sign_size ,l_message_candidate_sign_size_max); + goto handler_finish; + } + + pthread_rwlock_rdlock(&l_session->rwlock); dap_chain_cs_block_ton_round_t *l_round = l_commitsign->round_id.uint64 == l_session->old_round.id.uint64 ? @@ -2174,6 +2439,8 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Receive COMMIT_SIGN: candidate: NULL", l_session->chain->net_name, l_session->chain->name, l_round->id.uint64, l_session->attempt_current_number); + pthread_rwlock_unlock(&l_session->rwlock); + goto handler_finish_save; } @@ -2183,49 +2450,26 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod l_session->chain->net_name, l_session->chain->name, l_round->id.uint64, l_session->attempt_current_number, l_candidate_hash_str); - pthread_rwlock_unlock(&l_session->rwlock); - - size_t l_store_size = 0; - dap_chain_cs_block_ton_store_t *l_store = - (dap_chain_cs_block_ton_store_t *)dap_chain_global_db_gr_get( - l_candidate_hash_str, &l_store_size, l_session->gdb_group_store); - if (l_store) { - size_t l_candidate_size = l_store->hdr.candidate_size; - dap_chain_block_t *l_candidate = - (dap_chain_block_t *)DAP_DUP_SIZE(&l_store->candidate_n_signs, l_candidate_size); - size_t l_offset = dap_chain_block_get_sign_offset(l_candidate, l_candidate_size); - - int l_sign_verified=0; - // check candidate hash sign - if ( (l_sign_verified=dap_sign_verify((dap_sign_t*)l_commitsign->candidate_sign, - l_candidate, l_offset+sizeof(l_candidate->hdr))) == 1 ) { - l_message->hdr.is_verified = true; - l_store->hdr.sign_collected = true; - if (dap_global_db_set(l_session->gdb_group_store, l_candidate_hash_str, l_store, - l_store_size, true, NULL, NULL) == 0 ) { - uint16_t l_commitsign_count = s_session_message_count( - l_session, DAP_TON$ROUND_CUR, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_COMMIT_SIGN, - l_candidate_hash, NULL); - l_commitsign_count++; - if ( 3* l_commitsign_count >= 2*l_round->validators_count ) { - // s_session_round_finish(l_session,false); - if (l_commitsign->round_id.uint64 == l_session->cur_round.id.uint64) { - l_finalize_consensus = true; - } - if (PVT(l_session->ton)->debug) - log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Candidate:%s collected COMMIT_SIGN more than 2/3 of the validators, so to finished this round", - l_session->chain->net_name, l_session->chain->name, l_round->id.uint64, - l_session->attempt_current_number, l_candidate_hash_str); - } - } - } - else { - log_it(L_WARNING, "Candidate:%s sign is incorrect: code %d", l_candidate_hash_str, l_sign_verified); - } - } - pthread_rwlock_unlock(&l_session->rwlock); - DAP_DELETE(l_store); - DAP_DELETE(l_candidate_hash_str); + struct proc_msg_type_commit_sign * l_args = DAP_NEW_Z(struct proc_msg_type_commit_sign); + l_args->session = l_session; + l_args->round = l_round; + l_args->round_id = l_commitsign->round_id; + l_args->candidate_hash_str = l_candidate_hash_str; + l_args->candidate_hash = *l_candidate_hash; + l_args->candidate_sign = DAP_DUP_SIZE(l_candidate_sign, l_candidate_sign_size); + l_args->message = l_message; + l_args->message_size = a_data_size; + l_args->sender_node_addr = *a_sender_node_addr; + + if (dap_global_db_get(l_session->gdb_group_store, l_candidate_hash_str,s_callback_get_candidate_block_and_commit_sign , l_args) != 0 ){ + log_it (L_ERROR, "Can't process get request for s_callback_get_candidate_block_and_commit_sign()"); + DAP_DELETE(l_candidate_hash_str); + DAP_DELETE(l_args); + }else{ + pthread_rwlock_unlock(&l_session->rwlock); + return; // Message we'll proc in callback later + } + pthread_rwlock_unlock(&l_session->rwlock); } break; default: 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 61d2f2dbf8efb021ed5ddb886864269e977904ec..95c39991ac5c3113587da020b77762e0ce636806 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -41,14 +41,15 @@ #include "dap_chain_net.h" #include "dap_chain_node_cli.h" #include "dap_chain_node_cli_cmd.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" +#include "dap_chain_global_db_driver.h" #include "dap_chain_cs.h" #include "dap_chain_cs_dag.h" #include "dap_chain_cs_dag_event.h" #include "dap_chain_cs_dag_poa.h" #include "dap_chain_net_srv_stake.h" #include "dap_chain_cell.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_cert.h" #define LOG_TAG "dap_chain_cs_dag_poa" diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c index 42b4fe2a4b8bcf88ae85d16c169dec15d7c0df98..5e0ed733a5d51b8d83bcecfc22b2bb97c75dc786 100644 --- a/modules/consensus/none/dap_chain_cs_none.c +++ b/modules/consensus/none/dap_chain_cs_none.c @@ -35,7 +35,7 @@ #include "dap_hash.h" #include "dap_chain_cell.h" #include "dap_chain_ledger.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_driver.h" #include "dap_chain_cs.h" #include "dap_chain_cs_none.h" diff --git a/modules/global-db/CMakeLists.txt b/modules/global-db/CMakeLists.txt index 3f4dadeb1c086ff1653b159cf1b3160b00439f7d..b6e759e7b3063ceddce67581316c5c6f9a9f1441 100644 --- a/modules/global-db/CMakeLists.txt +++ b/modules/global-db/CMakeLists.txt @@ -15,7 +15,7 @@ file(GLOB DAP_CHAIN_GLOBAL_DB_HDR include/dap_global_db.h include/dap_global_db_sync.h include/dap_global_db_pkt.h - include/dap_chain_global_db.h + include/dap_global_db.h include/dap_chain_global_db_remote.h include/dap_chain_global_db_driver.h include/dap_chain_global_db_driver_pgsql.h diff --git a/modules/global-db/dap_chain_global_db_driver.c b/modules/global-db/dap_chain_global_db_driver.c index 6e83d4d317038888cec5f91dc1475c4ec41eef40..851f1ce99bc975582f07290cd6260c0178d46419 100644 --- a/modules/global-db/dap_chain_global_db_driver.c +++ b/modules/global-db/dap_chain_global_db_driver.c @@ -43,7 +43,7 @@ #include "dap_events.h" #include "dap_list.h" #include "dap_common.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_driver_sqlite.h" #include "dap_chain_global_db_driver_cdb.h" diff --git a/modules/global-db/dap_chain_global_db_driver_cdb.c b/modules/global-db/dap_chain_global_db_driver_cdb.c index ad233a126b6aaaed290b961eef6a6921f61de582..d5f78a6e4745a9723d5e38c0489be930492cd498 100644 --- a/modules/global-db/dap_chain_global_db_driver_cdb.c +++ b/modules/global-db/dap_chain_global_db_driver_cdb.c @@ -34,7 +34,7 @@ #define _GNU_SOURCE -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_driver_cdb.h" #include "dap_common.h" #include "dap_hash.h" diff --git a/modules/global-db/dap_chain_global_db_driver_mdbx.c b/modules/global-db/dap_chain_global_db_driver_mdbx.c index e6113d34e312753e90c399d111c03fde39274233..7c2a35ec69f5f8babb37b366adf77f5d4ee8faec 100644 --- a/modules/global-db/dap_chain_global_db_driver_mdbx.c +++ b/modules/global-db/dap_chain_global_db_driver_mdbx.c @@ -45,7 +45,8 @@ #define _GNU_SOURCE -#include "dap_chain_global_db.h" +#include "dap_global_db.h" +#include "dap_config.h" #include "dap_chain_global_db_driver_mdbx.h" #include "dap_hash.h" #include "dap_strfuncs.h" 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 46b19f2057dfb4d731eace3b644b7192fcfbde50..4ae35c61f3b54959a004a5c2e49e3e8e15bacbd7 100644 --- a/modules/global-db/dap_chain_global_db_driver_sqlite.c +++ b/modules/global-db/dap_chain_global_db_driver_sqlite.c @@ -35,7 +35,7 @@ #include <unistd.h> #endif -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_driver_sqlite.h" #include "dap_common.h" #include "dap_hash.h" diff --git a/modules/global-db/dap_chain_global_db_remote.c b/modules/global-db/dap_chain_global_db_remote.c index 11e22dcd938c5283729b726fb5262332534262a2..92c1769f6f40cafe6f1f6758ecd89841efbe234c 100644 --- a/modules/global-db/dap_chain_global_db_remote.c +++ b/modules/global-db/dap_chain_global_db_remote.c @@ -1,7 +1,7 @@ #include <string.h> #include <stdlib.h> -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_remote.h" #include "dap_common.h" #include "dap_strfuncs.h" diff --git a/modules/global-db/dap_global_db.c b/modules/global-db/dap_global_db.c index 987bb14198525128eb5865dd558bfb1026212b21..f006df713dda08ec5389cc9bb29a49b7424bd192 100644 --- a/modules/global-db/dap_global_db.c +++ b/modules/global-db/dap_global_db.c @@ -33,7 +33,7 @@ #include "dap_proc_thread.h" #define LOG_TAG "dap_global_db" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_global_db_sync.h" #include "dap_chain_global_db_driver.h" diff --git a/modules/global-db/include/dap_chain_global_db.h b/modules/global-db/include/dap_chain_global_db.h index 436e968fe8ddf769249d5b4547012cdbc5ef2c0a..b3235a6ccbcd525bfc490807750f3e1b5eca4385 100644 --- a/modules/global-db/include/dap_chain_global_db.h +++ b/modules/global-db/include/dap_chain_global_db.h @@ -13,14 +13,4 @@ #include "dap_global_db_sync.h" -enum { - DAP_DB$K_OPTYPE_ADD = 0x61, /* 'a', */ /* Operation Type = INSERT/ADD */ - DAP_DB$K_OPTYPE_DEL = 0x64, /* 'd', */ /* -- // -- DELETE */ - DAP_DB$K_OPTYPE_RETR = 0x72, /* 'r', */ /* -- // -- RETRIEVE/GET */ -}; - -/** - * Get entry from base - */ -uint8_t * dap_chain_global_db_gr_get(const char *a_key, size_t *a_data_len_out, const char *a_group); diff --git a/modules/global-db/include/dap_global_db.h b/modules/global-db/include/dap_global_db.h index 0908c3412b9c68945dbe1fa5c38faf9989b442af..8e237b265a867397140e86375755b586459dbbd0 100644 --- a/modules/global-db/include/dap_global_db.h +++ b/modules/global-db/include/dap_global_db.h @@ -45,6 +45,12 @@ typedef struct dap_global_db_context #define DAP_CONTEXT_TYPE_GLOBAL_DB 100 +enum { + DAP_DB$K_OPTYPE_ADD = 0x61, /* 'a', */ /* Operation Type = INSERT/ADD */ + DAP_DB$K_OPTYPE_DEL = 0x64, /* 'd', */ /* -- // -- DELETE */ + DAP_DB$K_OPTYPE_RETR = 0x72, /* 'r', */ /* -- // -- RETRIEVE/GET */ +}; + typedef struct dap_store_obj { uint64_t id; dap_nanotime_t timestamp; @@ -89,6 +95,8 @@ typedef bool (*dap_global_db_callback_results_raw_t) (dap_global_db_context_t * #define DAP_GLOBAL_DB_RC_NO_RESULTS -1 #define DAP_GLOBAL_DB_RC_ERROR -666 + + extern bool g_dap_global_db_debug_more; int dap_global_db_init(const char * a_path, const char * a_driver); diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index 0a9dd8357cbe432569188312c6cbfa1be90a7beb..4d1c8a047a3a8e85895ec6f2ba23e53049d65983 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -48,7 +48,7 @@ #include "http_status_code.h" #include "dap_chain_common.h" #include "dap_chain_node.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_enc.h" #include <dap_enc_http.h> #include <dap_enc_key.h> diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 586bc72814eaa0ff9617eac4be363060fad80e2c..ddd4952c955487e694a22ea33050055ce29fac27 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -89,7 +89,7 @@ #include "dap_chain_ledger.h" #include "dap_chain_cs_none.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_remote.h" #include "dap_stream_ch_chain_net_pkt.h" diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index d70573058afeaf11997a4c752687a791e63a66f1..dba3a0a5b6fc5301ec79fdcfede3b9c9b3dfaa33 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -43,7 +43,7 @@ #include "dap_hash.h" #include "rand/dap_rand.h" #include "dap_chain_net.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_node.h" #define LOG_TAG "chain_node" diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index f35cac3be00a7e666937441a835a3c82e326c0cc..a787a58fe1fa4ec9bfbd44ae5a793ab315158932 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -71,7 +71,7 @@ #include "dap_enc_base58.h" #include "dap_chain_wallet.h" #include "dap_chain_node.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_node_client.h" #include "dap_chain_node_remote.h" #include "dap_chain_node_cli_cmd.h" @@ -96,7 +96,7 @@ #include "dap_chain_datum_tx_items.h" #include "dap_chain_ledger.h" #include "dap_chain_mempool.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_remote.h" #include "dap_stream_ch_chain_net.h" diff --git a/modules/net/dap_chain_node_dns_server.c b/modules/net/dap_chain_node_dns_server.c index 1bffdd2bbbba6c60b96afacccba21794f839d8b4..1c5c06078fc5a2bb0983cefaa59df3c9efcee51c 100644 --- a/modules/net/dap_chain_node_dns_server.c +++ b/modules/net/dap_chain_node_dns_server.c @@ -31,7 +31,7 @@ #include "dap_chain_net.h" #include "dap_chain_node.h" #include "dap_string.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_global_db_remote.h" #define LOG_TAG "dap_chain_node_dns_server" diff --git a/modules/net/include/dap_chain_node.h b/modules/net/include/dap_chain_node.h index 0b5c2b8bc5507b4f47c3cc2361ba91510e3062da..d14c6afbe7998d0ce6a9bf8950307c1e263c4f16 100644 --- a/modules/net/include/dap_chain_node.h +++ b/modules/net/include/dap_chain_node.h @@ -45,7 +45,7 @@ #include "dap_events_socket.h" #include "dap_chain_common.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain.h" #include "dap_chain_net.h" diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c index 44bd0494e5e812709d206b36d383f45796140ec3..08999930ce338c52d8c3b5a32c3ef6e2ec37c4f0 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -28,7 +28,7 @@ #include "dap_chain_net_srv_order.h" #include "dap_hash.h" #include "dap_enc_base58.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_net_srv_countries.h" #define LOG_TAG "dap_chain_net_srv_order" diff --git a/modules/type/blocks/dap_chain_block_chunk.c b/modules/type/blocks/dap_chain_block_chunk.c index 7f8a31322716d16c99c44c5f4f4185456d60c8ff..265767acea40e25d9f564d3fac52fd8f25781351 100644 --- a/modules/type/blocks/dap_chain_block_chunk.c +++ b/modules/type/blocks/dap_chain_block_chunk.c @@ -23,7 +23,7 @@ #include "dap_chain_net.h" #include "dap_common.h" #include "dap_strfuncs.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" #include "dap_chain_block_chunk.h" #define LOG_TAG "dap_chain_block_chunk" diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 4a0e25847a62470bf81c1accf4b23bb4ba363c22..b7df079f906336914da2898bbb6616da351705c6 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -47,7 +47,8 @@ #include "dap_chain_datum.h" #include "dap_chain_cs.h" #include "dap_chain_cs_dag.h" -#include "dap_chain_global_db.h" +#include "dap_global_db.h" +#include "dap_chain_global_db_driver.h" #include "dap_chain_node_cli.h" #include "dap_chain_node_cli_cmd.h" #include "dap_chain_cell.h"