diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h index 493546b4b827bde9e25aaf46b75b91f205db08e6..aec24b4a3e1f1fd4e911ee93ef055461ae0af2c0 100644 --- a/modules/chain/include/dap_chain.h +++ b/modules/chain/include/dap_chain.h @@ -166,7 +166,7 @@ typedef struct dap_chain { dap_chain_callback_atom_iter_find_by_hash_t callback_atom_find_by_hash; dap_chain_callback_tx_find_by_hash_t callback_tx_find_by_hash; - dap_chain_callback_block_find_by_hash_t callback_block_find_by_hash; + dap_chain_callback_block_find_by_hash_t callback_block_find_by_tx_hash; dap_chain_callback_atom_iter_get_next_t callback_atom_iter_get_next; dap_chain_callback_atom_iter_get_atoms_t callback_atom_iter_get_links; diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 1621200a9cfcc8ecea6d0f02a586065a3f4d3f86..b5f18c03407927822a5aa372e09e2ae32d5d9c07 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -31,7 +31,7 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod dap_chain_hash_fast_t *a_data_hash, uint8_t *a_data, size_t a_data_size); static void s_session_round_clear(dap_chain_esbocs_session_t *a_session); static void s_session_round_new(dap_chain_esbocs_session_t *a_session); -static void s_session_candidate_to_chain( +static bool s_session_candidate_to_chain( dap_chain_esbocs_session_t *a_session, dap_chain_hash_fast_t *a_candidate_hash, dap_chain_block_t *a_candidate, size_t a_candidate_size); static void s_session_candidate_submit(dap_chain_esbocs_session_t *a_session); @@ -77,6 +77,8 @@ static dap_timerfd_t *s_session_cs_timer = NULL; typedef struct dap_chain_esbocs_pvt { // Base params dap_enc_key_t *blocks_sign_key; + dap_hash_fast_t candidate_hash; + dap_chain_addr_t *fee_addr; // Validators section bool poa_mode; uint16_t min_validators_count; @@ -88,7 +90,7 @@ typedef struct dap_chain_esbocs_pvt { uint16_t round_attempts_max; uint16_t round_attempt_timeout; // PoA section - dap_list_t *poa_validators; + dap_list_t *poa_validators; uint256_t minimum_fee; } dap_chain_esbocs_pvt_t; @@ -223,6 +225,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf dap_chain_esbocs_pvt_t *l_esbocs_pvt = PVT(l_esbocs); l_esbocs_pvt->minimum_fee = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "minimum_fee", "1.0")); + l_esbocs_pvt->fee_addr = dap_chain_addr_from_str(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "fee_addr", NULL)); const char *l_sign_cert_str = NULL; if ((l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "esbocs", "blocks-sign-cert")) != NULL) { @@ -832,6 +835,8 @@ static void s_session_candidate_submit(dap_chain_esbocs_session_t *a_session) } s_message_send(a_session, DAP_STREAM_CH_VOTING_MSG_TYPE_SUBMIT, &l_candidate_hash, l_candidate, l_candidate_size, a_session->cur_round.validators_list); + //Save candidate_hash + memcpy(&(PVT(a_session->esbocs)->candidate_hash), &l_candidate_hash, sizeof(dap_hash_fast_t)); } static void s_session_candidate_verify(dap_chain_esbocs_session_t *a_session, dap_chain_block_t *a_candidate, @@ -865,9 +870,10 @@ static void s_session_candidate_verify(dap_chain_esbocs_session_t *a_session, da a_session->processing_candidate = NULL; } -static void s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, dap_chain_hash_fast_t *a_candidate_hash, +static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, dap_chain_hash_fast_t *a_candidate_hash, dap_chain_block_t *a_candidate, size_t a_candidate_size) { + bool res = false; dap_chain_block_t *l_candidate = DAP_DUP_SIZE(a_candidate, a_candidate_size); dap_chain_atom_verify_res_t l_res = a_session->chain->callback_atom_add(a_session->chain, l_candidate, a_candidate_size); char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(a_candidate_hash); @@ -877,7 +883,10 @@ static void s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, if (dap_chain_atom_save(a_session->chain, (uint8_t *)l_candidate, a_candidate_size, a_session->chain->cells->id) < 0) log_it(L_ERROR, "ESBOCS: Can't save atom %s to the file", l_candidate_hash_str); else + { log_it(L_INFO, "ESBOCS: block %s added in chain successfully", l_candidate_hash_str); + res = true; + } break; case ATOM_MOVE_TO_THRESHOLD: log_it(L_INFO, "ESBOCS: Thresholded atom with hash %s", l_candidate_hash_str); @@ -895,11 +904,17 @@ static void s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, DAP_DELETE(l_candidate); } DAP_DELETE(l_candidate_hash_str); + return res; } static void s_session_round_finish(dap_chain_esbocs_session_t *a_session, dap_chain_esbocs_store_t *l_store) { bool l_cs_debug = PVT(a_session->esbocs)->debug; + bool f_compare = false; + dap_chain_t *l_chain = a_session->chain; + dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(l_chain); + dap_chain_block_cache_t *l_block_cache = NULL; + dap_hash_fast_t l_precommit_candidate_hash = {0}; uint16_t l_cs_level = PVT(a_session->esbocs)->min_validators_count; if (!dap_hash_fast_compare(&a_session->cur_round.attempt_candidate_hash, &l_store->candidate_hash)) { @@ -950,7 +965,14 @@ static void s_session_round_finish(dap_chain_esbocs_session_t *a_session, dap_ch DAP_DELETE(l_finish_candidate_hash_str); DAP_DELETE(l_finish_block_hash_str); } - s_session_candidate_to_chain(a_session, &l_store->precommit_candidate_hash, l_store->candidate, l_store->candidate_size); + + memcpy(&l_precommit_candidate_hash, &l_store->precommit_candidate_hash, sizeof(dap_hash_fast_t)); + f_compare = dap_hash_fast_compare(&l_store->candidate_hash,&(PVT(a_session->esbocs)->candidate_hash)); + if(s_session_candidate_to_chain(a_session, &l_store->precommit_candidate_hash, l_store->candidate, l_store->candidate_size)&&f_compare) + { + l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_precommit_candidate_hash); + dap_chain_mempool_tx_coll_fee_create(a_session->blocks_sign_key,(PVT(a_session->esbocs)->fee_addr),l_block_cache,PVT(a_session->esbocs)->minimum_fee,"hex"); + } } void s_session_sync_queue_add(dap_chain_esbocs_session_t *a_session, dap_chain_esbocs_message_t *a_message, size_t a_message_size) diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index b1fe9b256f47663b6e264204b71a73846048e553..9b919d140689609d4b858fae59eaa42d36eaa093 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -625,8 +625,8 @@ static bool s_fee_verificator_callback(dap_ledger_t * a_ledger, dap_hash_fast_t l_chain = dap_chain_net_get_chain_by_chain_type(l_net, CHAIN_TYPE_CA ); - //l_tx = l_chain->callback_tx_find_by_hash(l_chain, a_tx_out_hash); - l_block_cache = l_chain->callback_block_find_by_hash(l_chain,a_tx_out_hash); + //l_tx = l_chain->callback_tx_find_by_hash(l_chain, a_tx_out_hash); + l_block_cache = l_chain->callback_block_find_by_tx_hash(l_chain,a_tx_out_hash); l_sign_block = dap_chain_block_sign_get(l_block_cache->block, l_block_cache->block_size, 0); //dap_chain_hash_fast_t l_pkey_hash; //dap_sign_get_pkey_hash(l_sign_block, &l_pkey_hash); diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 54c3b56ee43afe6b510a2c0f94d918a179647e3c..bc1684db1c372890dfbeaa15dced1c6db7d86994 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -221,7 +221,7 @@ int dap_chain_cs_blocks_new(dap_chain_t * a_chain, dap_config_t * a_chain_config a_chain->callback_atom_find_by_hash = s_callback_atom_iter_find_by_hash; a_chain->callback_tx_find_by_hash = s_callback_atom_iter_find_by_tx_hash; - a_chain->callback_block_find_by_hash = s_callback_block_find_by_tx_hash; + a_chain->callback_block_find_by_tx_hash = s_callback_block_find_by_tx_hash; a_chain->callback_add_datums = s_callback_add_datums; a_chain->callback_purge = s_callback_cs_blocks_purge;