From 40151fee84cb2880f267e93cda2918ef7204e573 Mon Sep 17 00:00:00 2001 From: Dmitriy Gerasimov <naeper@demlabs.net> Date: Tue, 21 May 2019 19:40:04 +0700 Subject: [PATCH] [*] Lot of fixes --- dap_chain_net.c | 29 +++++++++++++++++++++++++++-- dap_chain_node_cli_cmd.c | 22 ++++++++-------------- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/dap_chain_net.c b/dap_chain_net.c index 92f0d6c..75255e6 100644 --- a/dap_chain_net.c +++ b/dap_chain_net.c @@ -120,7 +120,9 @@ static int s_net_states_proc(dap_chain_net_t * l_net); static void * s_net_proc_thread ( void * a_net); static void s_net_proc_thread_start( dap_chain_net_t * a_net ); static void s_net_proc_kill( dap_chain_net_t * a_net ); - +static void s_gbd_history_callback_notify (void * a_arg,const char a_op_code, const char * a_prefix, const char * a_group, + const char * a_key, const void * a_value, + const size_t a_value_len); static int s_cli_net(int argc, const char ** argv, char **str_reply); static bool s_seed_mode = false; @@ -151,6 +153,25 @@ int dap_chain_net_state_go_to(dap_chain_net_t * a_net, dap_chain_net_state_t a_n return 0; } +/** + * @brief s_gbd_history_callback_notify + * @param a_op_code + * @param a_prefix + * @param a_group + * @param a_key + * @param a_value + * @param a_value_len + */ +static void s_gbd_history_callback_notify (void * a_arg, const char a_op_code, const char * a_prefix, const char * a_group, + const char * a_key, const void * a_value, + const size_t a_value_len) +{ + if (a_arg) { + dap_chain_net_t * l_net = (dap_chain_net_t *) a_arg; + dap_chain_net_sync_all(l_net); + } +} + /** * @brief s_net_states_proc @@ -582,6 +603,7 @@ int dap_chain_net_init() "\tList,add,del, dump or establish links\n\n" ); s_seed_mode = dap_config_get_item_bool_default(g_config,"general","seed_mode",false); + return 0; } @@ -704,6 +726,8 @@ int dap_chain_net_load(const char * a_net_name) } l_net->pub.gdb_groups_prefix = dap_strdup ( dap_config_get_item_str_default(l_cfg , "general" , "gdb_groups_prefix","" ) ); + dap_chain_global_db_add_history_group_prefix( l_net->pub.gdb_groups_prefix); + dap_chain_global_db_add_history_callback_notify(l_net->pub.gdb_groups_prefix, s_gbd_history_callback_notify, l_net ); // Add network to the list @@ -775,6 +799,7 @@ int dap_chain_net_load(const char * a_net_name) } + // Init chains size_t l_chains_path_size =strlen(dap_config_path())+1+strlen(l_net->pub.name)+1+strlen("network")+1; char * l_chains_path = DAP_NEW_Z_SIZE (char,l_chains_path_size); @@ -796,7 +821,7 @@ int dap_chain_net_load(const char * a_net_name) //dap_config_open(l_chains_path); // Create chain object - dap_chain_t * l_chain = dap_chain_load_from_cfg(l_net->pub.name, l_net->pub.id, l_chains_path); + dap_chain_t * l_chain = dap_chain_load_from_cfg(l_net->pub.ledger, l_net->pub.name, l_net->pub.id, l_chains_path); if(l_chain){ DL_APPEND( l_net->pub.chains, l_chain); if(l_chain->callback_created) diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index 1ffb7ca..306e166 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -1913,7 +1913,7 @@ int com_token_decl(int argc, const char ** argv, char ** str_reply) } // Load certs lists - size_t l_signs_size = dap_chain_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_size); + size_t l_certs_count = dap_chain_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_size); if(!l_certs_size) { dap_chain_node_cli_set_reply_text(str_reply, "token_create command requres at least one valid certificate to sign the basic transaction of emission"); @@ -1925,8 +1925,7 @@ int com_token_decl(int argc, const char ** argv, char ** str_reply) l_certs_size = l_signs_total; // Create new datum token - dap_chain_datum_token_t * l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(l_datum_token->header) + - l_signs_size); + dap_chain_datum_token_t * l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(l_datum_token->header)); l_datum_token->header.version = 1; // Current version snprintf(l_datum_token->header.ticker, sizeof(l_datum_token->header.ticker), "%s", l_ticker); l_datum_token->header.total_supply = l_total_supply; @@ -1942,11 +1941,13 @@ int com_token_decl(int argc, const char ** argv, char ** str_reply) sizeof(l_datum_token->header), 0); size_t l_sign_size = dap_chain_sign_get_size(l_sign); + l_datum_token=DAP_REALLOC(l_datum_token,sizeof (l_datum_token->header)+l_signs_offset +l_sign_size); memcpy(l_datum_token->signs + l_signs_offset, l_sign, l_sign_size); + l_signs_offset += l_sign_size; DAP_DELETE(l_sign); } dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_DECL, l_datum_token, - sizeof(l_datum_token->header) + l_signs_size); + sizeof(l_datum_token->header) + l_signs_offset ); size_t l_datum_size = dap_chain_datum_size(l_datum); // Calc datum's hash @@ -2106,19 +2107,10 @@ int com_token_emit(int argc, const char ** argv, char ** str_reply) char * l_gdb_group_mempool_base_tx = dap_chain_net_get_gdb_group_mempool(l_chain_base_tx); // Create emission datum - - // First calc summary sign size - size_t l_token_emission_signs_size =0; - for ( size_t i=0 ; i < l_certs_size ; i++) { - // TODO Here must be added serialized size! - l_token_emission_signs_size += dap_chain_cert_sign_output_size(l_certs[i],0); - } - // then create datum in memory dap_chain_datum_token_emission_t * l_token_emission; size_t l_token_emission_size = sizeof (l_token_emission->hdr) + - sizeof (l_token_emission->data.type_auth.signs_count) + - l_token_emission_signs_size; + sizeof (l_token_emission->data.type_auth.signs_count); l_token_emission = DAP_NEW_Z_SIZE(dap_chain_datum_token_emission_t, l_token_emission_size); strncpy(l_token_emission->hdr.ticker, l_ticker, sizeof(l_token_emission->hdr.ticker)); @@ -2129,6 +2121,8 @@ int com_token_emit(int argc, const char ** argv, char ** str_reply) for (size_t i =0; i < l_certs_size; i++ ){ dap_chain_sign_t * l_sign = dap_chain_cert_sign(l_certs[i],&l_token_emission->hdr, sizeof(l_token_emission->hdr),0 ); size_t l_sign_size = dap_chain_sign_get_size(l_sign); + l_token_emission_size += l_sign_size; + l_token_emission= DAP_REALLOC(l_token_emission, l_token_emission_size); memcpy(l_token_emission->data.type_auth.signs+l_offset,l_sign,l_sign_size); l_offset+= l_sign_size; DAP_DELETE(l_sign); -- GitLab