diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index 33fe355ad6dbd7e1b21c39472f5fd6f21bb8ba97..07d6dcb64752a5d829a7ee9c068a8d69636d51cf 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -229,16 +229,11 @@ static int com_global_db_add(dap_chain_node_info_t *a_node_info, const char *ali dap_chain_node_cli_set_reply_text(str_reply, "not found -cell parameter"); return -1; } - if(!ipv4_str && !ipv6_str) { - dap_chain_node_cli_set_reply_text(str_reply, "not found -ipv4 or -ipv6 parameter"); - return -1; - } - else { - if(ipv4_str) - inet_pton(AF_INET, ipv4_str, &(a_node_info->hdr.ext_addr_v4)); - if(ipv6_str) - inet_pton(AF_INET6, ipv6_str, &(a_node_info->hdr.ext_addr_v6)); - } + if(ipv4_str) + inet_pton(AF_INET, ipv4_str, &(a_node_info->hdr.ext_addr_v4)); + if(ipv6_str) + inet_pton(AF_INET6, ipv6_str, &(a_node_info->hdr.ext_addr_v6)); + // check match addr to cell or no /*dap_chain_node_addr_t *addr = dap_chain_node_gen_addr(&node_info->hdr.cell_id); if(!dap_chain_node_check_addr(&node_info->hdr.address, &node_info->hdr.cell_id)) { @@ -2111,22 +2106,46 @@ 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++) { + 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; - dap_chain_hash_fast_t l_token_emission_hash; + 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; + l_token_emission = DAP_NEW_Z(dap_chain_datum_token_emission_t); - strncpy(l_token_emission->ticker, l_ticker, sizeof(l_token_emission->ticker)); - l_token_emission->value = l_emission_value; - dap_hash_fast(l_token_emission, sizeof(dap_chain_datum_token_emission_t), &l_token_emission_hash); + strncpy(l_token_emission->hdr.ticker, l_ticker, sizeof(l_token_emission->hdr.ticker)); + l_token_emission->hdr.value = l_emission_value; + + // Then add signs + size_t l_offset=0; + 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); + memcpy(l_token_emission->data.type_auth.signs+l_offset,l_sign,l_sign_size); + l_offset+= l_sign_size; + DAP_DELETE(l_sign); + } + + // Produce datum dap_chain_datum_t * l_datum_emission = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_EMISSION, l_token_emission, - sizeof(dap_chain_datum_token_emission_t)); + l_token_emission_size); size_t l_datum_emission_size = sizeof(l_datum_emission->header) + l_datum_emission->header.data_size; + // Delete token emission DAP_DELETE(l_token_emission); - dap_chain_hash_fast_t l_key_hash; - dap_hash_fast(l_datum_emission, l_datum_emission_size, &l_key_hash); - char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash); + // Calc datum's hash + dap_chain_hash_fast_t l_datum_emission_hash; + dap_hash_fast(l_datum_emission, l_datum_emission_size, &l_datum_emission_hash); + char * l_key_str = dap_chain_hash_fast_to_str_new(&l_datum_emission_hash); // Add to mempool emission token if(dap_chain_global_db_gr_set(l_key_str, (uint8_t *) l_datum_emission, l_datum_emission_size @@ -2142,9 +2161,8 @@ int com_token_emit(int argc, const char ** argv, char ** str_reply) // create first transaction (with tx_token) dap_chain_datum_tx_t *l_tx = DAP_NEW_Z_SIZE(dap_chain_datum_tx_t, sizeof(dap_chain_datum_tx_t)); dap_chain_hash_fast_t l_tx_prev_hash = { 0 }; - dap_chain_hash_fast_t l_datum_token_hash = { 0 }; // create items - dap_chain_tx_token_t *l_tx_token = dap_chain_datum_tx_item_token_create(&l_token_emission_hash, l_ticker); + dap_chain_tx_token_t *l_tx_token = dap_chain_datum_tx_item_token_create(&l_datum_emission_hash, l_ticker); dap_chain_tx_in_t *l_in = dap_chain_datum_tx_item_in_create(&l_tx_prev_hash, 0); dap_chain_tx_out_t *l_out = dap_chain_datum_tx_item_out_create(l_addr, l_emission_value); @@ -2176,8 +2194,9 @@ int com_token_emit(int argc, const char ** argv, char ** str_reply) // use l_tx hash for compatible with utho hash //dap_hash_fast(l_tx, l_tx_size, &l_key_hash); //dap_hash_fast(l_datum_tx, l_datum_tx_size, &l_key_hash); // calc datum hash - dap_hash_fast(l_datum_tx, l_datum_tx_size, &l_key_hash); - l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash); + dap_chain_hash_fast_t l_datum_tx_hash; + dap_hash_fast(l_datum_tx, l_datum_tx_size, &l_datum_tx_hash); + l_key_str = dap_chain_hash_fast_to_str_new(&l_datum_tx_hash); DAP_DELETE(l_tx); // Add to mempool tx token diff --git a/dap_chain_node_client.c b/dap_chain_node_client.c index d837f15768ba32c65a34420465b1ae86800bc84f..ce380cab4433fb14add6166aae1698b74b4cfd4b 100644 --- a/dap_chain_node_client.c +++ b/dap_chain_node_client.c @@ -167,19 +167,19 @@ static void s_ch_chain_callback_notify_packet_in(dap_stream_ch_chain_t* a_ch_cha case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_GLOBAL_DB: case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_CHAINS:{ dap_stream_ch_chain_sync_request_t * l_request = NULL; - //if ( a_pkt_data_size == sizeof ( *l_request)) - // l_request = (dap_stream_ch_chain_sync_request_t* ) a_pkt->data; + if ( a_pkt_data_size == sizeof ( *l_request)) + l_request = (dap_stream_ch_chain_sync_request_t* ) a_pkt->data; if ( l_request ){ if ( l_request->ts_start < (uint64_t) dap_db_log_get_last_timestamp() ){ - log_it(L_INFO, "Remote is synced all but we have updates for it"); + log_it(L_INFO, "Remote is synced but we have updates for it"); // Get log diff a_ch_chain->request_last_ts = dap_db_log_get_last_timestamp(); dap_list_t *l_list = dap_db_log_get_list((time_t) l_request->ts_start); if ( l_list ) { // Add it to outgoing list - l_list->next = a_ch_chain->request_global_db_trs; + l_list->prev = a_ch_chain->request_global_db_trs; a_ch_chain->request_global_db_trs = l_list; a_ch_chain->request_net_id.uint64 = a_pkt->hdr.net_id.uint64; a_ch_chain->request_cell_id.uint64 = a_pkt->hdr.cell_id.uint64;