diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ffafbe6f93def1d8625dd6b425b80c48ad0938b..4eb71372f3de98d3f9b4d738d19bfa0c5b0acd13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 2.8) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "2.1-1") +set(CELLFRAME_SDK_NATIVE_VERSION "2.1-2") include(cmake/OS_Detection.cmake) add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index a020a853cbae3a48ec93b8413399c1d0c6e81c0f..0a9db533b84f754241bde32ed77c68b8fd7c1d36 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -205,7 +205,7 @@ static int compare_datum_items(const void * l_a, const void * l_b) * @param a_token * @return */ -int dap_chain_ledger_token_check(dap_ledger_t * a_ledger, dap_chain_datum_token_t *a_token) +int dap_chain_ledger_token_decl_add_check(dap_ledger_t * a_ledger, dap_chain_datum_token_t *a_token) { if ( !a_ledger){ log_it(L_ERROR, "NULL ledger, can't add datum with token declaration!"); @@ -307,7 +307,7 @@ dap_ledger_t* dap_chain_ledger_create(uint16_t a_check_flags) return l_ledger; //dap_chain_ledger_load(l_ledger, "kelvin-testnet", "plasma"); } -int dap_chain_ledger_token_emission_check(dap_ledger_t *a_ledger, const dap_chain_datum_token_emission_t *a_token_emission +int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, const dap_chain_datum_token_emission_t *a_token_emission , size_t a_token_emission_size) { int ret = 0; @@ -853,7 +853,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t * @param a_tx * @return */ -int dap_chain_ledger_tx_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx) +int dap_chain_ledger_tx_add_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx) { if(!a_tx) return -2; diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h index 58281f90737350e76fdea96ef85a56fceed8909c..4dbcedb0f5e0069968b5fedc21287e461a30149a 100644 --- a/modules/chain/include/dap_chain_ledger.h +++ b/modules/chain/include/dap_chain_ledger.h @@ -80,7 +80,7 @@ static inline dap_chain_hash_fast_t* dap_chain_node_datum_tx_calc_hash(dap_chain int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx); -int dap_chain_ledger_tx_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx); +int dap_chain_ledger_tx_add_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx); /** * Add new token datum @@ -88,7 +88,7 @@ int dap_chain_ledger_tx_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx */ int dap_chain_ledger_token_add(dap_ledger_t * a_ledger,dap_chain_datum_token_t *a_token, size_t a_token_size); -int dap_chain_ledger_token_check(dap_ledger_t * a_ledger,dap_chain_datum_token_t *a_token); +int dap_chain_ledger_token_decl_add_check(dap_ledger_t * a_ledger,dap_chain_datum_token_t *a_token); /** * Add token emission datum @@ -97,7 +97,7 @@ int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, const dap_chain_datum_token_emission_t *a_token_emission, size_t a_token_emission_size); // Check if it addable -int dap_chain_ledger_token_emission_check(dap_ledger_t *a_ledger, +int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, const dap_chain_datum_token_emission_t *a_token_emission, size_t a_token_emission_size); dap_chain_datum_token_emission_t * dap_chain_ledger_token_emission_find(dap_ledger_t *a_ledger, diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index f56276cff12cdf9efd44433b69f2d02baa896268..817a8666efa59c87a67ec6423bfa442d6b46a531 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -1966,7 +1966,7 @@ void dap_chain_net_proc_mempool (dap_chain_net_t * a_net) size_t l_objs_size_tmp = (l_objs_size > 15) ? min(l_objs_size, 10) : l_objs_size; for(size_t i = 0; i < l_objs_size; i++) { dap_chain_datum_t * l_datum = (dap_chain_datum_t*) l_objs[i].value; - int l_verify_datum= dap_chain_net_verify_datum( a_net, l_datum) ; + int l_verify_datum= dap_chain_net_verify_datum_for_add( a_net, l_datum) ; if (l_verify_datum != 0){ log_it(L_WARNING, "Datum doesn't pass verifications (code %d), delete such datum from pool", l_verify_datum); @@ -2073,7 +2073,26 @@ dap_list_t * dap_chain_net_get_add_gdb_group(dap_chain_net_t * a_net, dap_chain_ return l_list_groups; } -int dap_chain_net_verify_datum(dap_chain_net_t *a_net, dap_chain_datum_t * a_datum ) +/** + * @brief dap_chain_net_verify_datum_for_add + * @param a_net + * @param a_datum + * @return + */ +int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t * a_datum ) { - + if( ! a_datum) + return -10; + if( ! a_net ) + return -11; + + switch ( a_datum->header.type_id) { + case DAP_CHAIN_DATUM_TX: return dap_chain_ledger_tx_add_check( a_net->pub.ledger, + (dap_chain_datum_tx_t*) a_datum->data ); + case DAP_CHAIN_DATUM_TOKEN_DECL: return dap_chain_ledger_token_decl_add_check( a_net->pub.ledger, + (dap_chain_datum_token_t*) a_datum->data ); + case DAP_CHAIN_DATUM_TOKEN_EMISSION : return dap_chain_ledger_token_emission_add_check( a_net->pub.ledger, + (dap_chain_datum_token_emission_t*) a_datum->data, a_datum->header.data_size ); + default: return 0; + } } diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index 1f95a00da8600135fe02c8bcdb3db84648405c5a..bcdfbdd0f1c67d1190358a8197d28d25ee588678 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -270,22 +270,23 @@ void dap_chain_node_mempool_periodic(void *a_param) UNUSED(a_param); size_t l_net_count; bool l_mempool_auto; + bool l_mempool_auto_default = false; dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count); for (int i = 0; i < l_net_count; i++) { - l_mempool_auto = dap_config_get_item_bool_default(g_config, "mempool", "auto_proc", false); - if (!l_mempool_auto) { - dap_chain_node_role_t l_role = dap_chain_net_get_role(l_net_list[i]); - switch (l_role.enums) { + dap_chain_node_role_t l_role = dap_chain_net_get_role(l_net_list[i]); + + switch (l_role.enums) { case NODE_ROLE_ROOT: case NODE_ROLE_MASTER: case NODE_ROLE_ROOT_MASTER: case NODE_ROLE_CELL_MASTER: - l_mempool_auto = true; + l_mempool_auto_default = true; break; default: - break; - } + l_mempool_auto_default = false; } + + l_mempool_auto = dap_config_get_item_bool_default(g_config, "mempool", "auto_proc", l_mempool_auto_default); if (l_mempool_auto) { dap_chain_t *l_chain; DL_FOREACH(l_net_list[i]->pub.chains, l_chain) { diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 52d7365202a72de98c5f476966ade6686b5f5008..14c7a183cb08342f4ea1a4d6456b065c3b351b82 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1,4 +1,4 @@ -/* +/* * Authors: * Dmitriy A. Gerasimov <gerasimov.dmitriy@demlabs.net> * Alexander Lysikov <alexander.lysikov@demlabs.net> @@ -2124,7 +2124,7 @@ int com_mempool_proc(int argc, char ** argv, void *arg_func, char ** a_str_reply size_t l_datum_size=0; dap_chain_datum_t * l_datum = (dap_chain_datum_t*) dap_chain_global_db_gr_get(l_datum_hash_str, &l_datum_size, l_gdb_group_mempool); - size_t l_datum_size2= dap_chain_datum_size( l_datum); + size_t l_datum_size2= l_datum? dap_chain_datum_size( l_datum): 0; if (l_datum_size != l_datum_size2 ){ ret = -8; dap_chain_node_cli_set_reply_text(a_str_reply, "Error! Corrupted datum %s, size by datum headers is %zd when in mempool is only %zd bytes", @@ -2136,7 +2136,7 @@ int com_mempool_proc(int argc, char ** argv, void *arg_func, char ** a_str_reply dap_string_append_printf(l_str_tmp, "0x%s: type_id=%s ts_create=%s data_size=%u\n", l_datum_hash_str, c_datum_type_str[l_datum->header.type_id], ctime_r(&l_ts_create, buf), l_datum->header.data_size); - int l_verify_datum= dap_chain_net_verify_datum( l_net, l_datum) ; + int l_verify_datum= dap_chain_net_verify_datum_for_add( l_net, l_datum) ; if (l_verify_datum != 0){ dap_string_append_printf(l_str_tmp, "Error! Datum doesn't pass verifications (code %d) examine node log files", l_verify_datum); diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 2247a0107eb05f171337cf0984b4b4e076696294..463a6e777c4d46d4e445f648d362c6077acc9fea 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -152,4 +152,4 @@ char * dap_chain_net_get_gdb_group_mempool_by_chain_type(dap_chain_net_t * l_net dap_chain_net_t **dap_chain_net_list(size_t *a_size); dap_list_t * dap_chain_net_get_add_gdb_group(dap_chain_net_t * a_net, dap_chain_node_addr_t a_node_addr); -int dap_chain_net_verify_datum(dap_chain_net_t *a_net, dap_chain_datum_t * a_datum ); +int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t * a_datum ); diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 8a4290424d9b0698bc1b9db7d74277388ec1ba52..873be6125e2d4227abed8fe5fef109549bfd8ed5 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -208,7 +208,8 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) } } - l_dag->is_static_genesis_event = dap_config_get_item_bool_default(a_chain_cfg,"dag","is_static_genesis_event",false); + l_dag->is_static_genesis_event = (l_static_genesis_event_hash_str != NULL) && dap_config_get_item_bool_default(a_chain_cfg,"dag","is_static_genesis_event",false); + l_dag->is_single_line = dap_config_get_item_bool_default(a_chain_cfg,"dag","is_single_line",false); l_dag->is_celled = dap_config_get_item_bool_default(a_chain_cfg,"dag","is_celled",false); l_dag->is_add_directy = dap_config_get_item_bool_default(a_chain_cfg,"dag","is_add_directly",false); @@ -395,7 +396,7 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain // Verify for correctness dap_chain_net_t * l_net = dap_chain_net_by_id( a_chain->net_id); - int l_verify_datum= dap_chain_net_verify_datum( l_net, l_datum) ; + int l_verify_datum= dap_chain_net_verify_datum_for_add( l_net, l_datum) ; if (l_verify_datum != 0){ log_it(L_WARNING, "Datum doesn't pass verifications (code %d)", l_verify_datum); @@ -567,13 +568,16 @@ static int s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_pt char * l_genesis_event_hash_str = dap_chain_hash_fast_to_str_new(&l_dag->static_genesis_event_hash); log_it(L_WARNING, "Wrong genesis block %s (staticly predefined %s)",l_event_hash_str, l_genesis_event_hash_str); + DAP_DELETE(l_event_hash_str); + DAP_DELETE(l_genesis_event_hash_str); return -22; } + return 0; } int ret = l_dag->callback_cs_verify ( l_dag, l_event ); if (ret == 0 ){ - if ( PVT(l_dag)->events ) + if ( PVT(l_dag)->events ){ for (size_t i = 0; i< l_event->header.hash_count; i++) { dap_chain_hash_fast_t * l_hash = ((dap_chain_hash_fast_t *) l_event->hashes_n_datum_n_signs) + i; dap_chain_cs_dag_event_item_t * l_event_search = NULL; @@ -584,6 +588,7 @@ static int s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_pt } } + } return 0; }else {