diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index 1ee99b542e21cff0d18151a2315addf3821f0959..6bcba7c5f6fdae618d43b7292315b06ce0f6cd36 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -2079,22 +2079,46 @@ int com_token_emit(int argc, const char ** argv, char ** str_reply) // 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 @@ -2110,9 +2134,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); @@ -2144,8 +2167,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); diff --git a/dap_chain_node_client.c b/dap_chain_node_client.c index d837f15768ba32c65a34420465b1ae86800bc84f..cb14bdd9951a25ef60f0b15ba69b594a855e21c8 100644 --- a/dap_chain_node_client.c +++ b/dap_chain_node_client.c @@ -167,8 +167,8 @@ 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() ){ @@ -179,7 +179,7 @@ static void s_ch_chain_callback_notify_packet_in(dap_stream_ch_chain_t* a_ch_cha 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;