diff --git a/dap-sdk/crypto/include/dap_sign.h b/dap-sdk/crypto/include/dap_sign.h index 1de33fe7bb144a689e6926ece32f055a52c238c3..0c01cfb7c69c8b4923b553e051ca2e82e8fabc2a 100755 --- a/dap-sdk/crypto/include/dap_sign.h +++ b/dap-sdk/crypto/include/dap_sign.h @@ -127,7 +127,7 @@ uint8_t* dap_sign_get_sign(dap_sign_t *a_sign, size_t *a_sign_out); uint8_t* dap_sign_get_pkey(dap_sign_t *a_sign, size_t *a_pub_key_out); bool dap_sign_get_pkey_hash(dap_sign_t *a_sign, dap_chain_hash_fast_t * a_sign_hash); -bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_key_size_max); +bool dap_sign_verify_size(dap_sign_t *a_sign); dap_enc_key_t *dap_sign_to_enc_key(dap_sign_t * a_chain_sign); const char * dap_sign_type_to_str(dap_sign_type_t a_chain_sign_type); dap_sign_type_t dap_sign_type_from_str(const char * a_type_str); diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c index 3700b9c3f001620e22054a9a2a95a04782bba0b8..c518366970ba394c4d0e950a6285bdb00ef78a2f 100755 --- a/dap-sdk/crypto/src/dap_sign.c +++ b/dap-sdk/crypto/src/dap_sign.c @@ -315,9 +315,9 @@ bool dap_sign_get_pkey_hash(dap_sign_t *a_sign, dap_chain_hash_fast_t * a_sign_h } -bool dap_sign_verify_size(dap_sign_t *a_sign, size_t a_key_size_max) +bool dap_sign_verify_size(dap_sign_t *a_sign) { - if (a_sign->header.sign_pkey_size > a_key_size_max) + if (a_sign->header.sign_pkey_size > a_sign->header.sign_size) return false; return true; } @@ -349,7 +349,7 @@ dap_enc_key_t *dap_sign_to_enc_key(dap_sign_t * a_chain_sign) */ int dap_sign_verify(dap_sign_t * a_chain_sign, const void * a_data, const size_t a_data_size) { - if (!a_chain_sign || !a_data || !dap_sign_verify_size(a_chain_sign, a_data_size)) + if (!a_chain_sign || !a_data || !dap_sign_verify_size(a_chain_sign)) return -2; dap_enc_key_t * l_key = dap_sign_to_enc_key(a_chain_sign); diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c index d2877bcc0a4b7966fd9628327f95a6b44962eeb3..cda76b3195794ca835f41ddc99a1fedc67a4e984 100644 --- a/modules/chain/dap_chain.c +++ b/modules/chain/dap_chain.c @@ -342,7 +342,7 @@ dap_chain_t * dap_chain_load_from_cfg(dap_ledger_t* a_ledger, const char * a_cha log_it(L_DEBUG, "Added atom from treshold"); } } - dap_chain_save_all( l_chain ); + //dap_chain_save_all( l_chain ); log_it (L_NOTICE, "Loaded chain files"); } else { dap_chain_save_all( l_chain ); diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c index 7102fb648ee35eed1eb99dfd59b2e29e6f40d7f2..e4b10ca85ab599a692f610722edf77ace4c01fbf 100644 --- a/modules/chain/dap_chain_cell.c +++ b/modules/chain/dap_chain_cell.c @@ -297,7 +297,8 @@ int dap_chain_cell_file_append( dap_chain_cell_t * a_cell, const void* a_atom, s } if (l_total_wrote_bytes > 0) { fflush(a_cell->file_storage); - ftruncate(fileno(a_cell->file_storage), l_total_wrote_bytes + sizeof(dap_chain_cell_file_header_t)); + if (!a_atom) + ftruncate(fileno(a_cell->file_storage), l_total_wrote_bytes + sizeof(dap_chain_cell_file_header_t)); } if (l_atom_iter) { a_cell->chain->callback_atom_iter_delete(l_atom_iter); diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index d26336f27840ef42ec10071eb3c8982134b93820..015eb3fe8697c48833e6f0e91ef34f7536e6d24d 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -24,6 +24,7 @@ #include <stdlib.h> #include <time.h> #include <pthread.h> +#include "errno.h" #include "uthash.h" #ifdef _WIN32 @@ -300,12 +301,12 @@ static int s_dap_chain_add_atom_to_ledger(dap_chain_cs_dag_t * a_dag, dap_ledger case DAP_CHAIN_DATUM_TOKEN_DECL: { dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data; return dap_chain_ledger_token_load(a_ledger, l_token, l_datum->header.data_size); - } + } break; case DAP_CHAIN_DATUM_TOKEN_EMISSION: { dap_chain_datum_token_emission_t *l_token_emission = (dap_chain_datum_token_emission_t*) l_datum->data; return dap_chain_ledger_token_emission_load(a_ledger, l_token_emission, l_datum->header.data_size); - } + } break; case DAP_CHAIN_DATUM_TX: { dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data; @@ -319,10 +320,12 @@ static int s_dap_chain_add_atom_to_ledger(dap_chain_cs_dag_t * a_dag, dap_ledger l_tx_event->event = a_event_item->event; l_tx_event->event_size = a_event_item->event_size; memcpy(&l_tx_event->hash, &a_event_item->hash, sizeof (l_tx_event->hash) ); - pthread_rwlock_wrlock(l_events_rwlock); + int l_err = pthread_rwlock_wrlock(l_events_rwlock); HASH_ADD(hh,PVT(a_dag)->tx_events, hash, sizeof (l_tx_event->hash), l_tx_event); - pthread_rwlock_unlock(l_events_rwlock); + if (l_err != EDEADLK) { + pthread_rwlock_unlock(l_events_rwlock); } + } break; default: return -1; @@ -421,10 +424,10 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha case ATOM_ACCEPT: { int l_consensus_check = s_dap_chain_add_atom_to_events_table(l_dag, a_chain->ledger, l_event_item); //All correct, no matter for result - pthread_rwlock_wrlock(&PVT(l_dag)->events_rwlock); + pthread_rwlock_wrlock(l_events_rwlock); HASH_ADD(hh, PVT(l_dag)->events,hash,sizeof (l_event_item->hash), l_event_item); s_dag_events_lasts_process_new_last_event(l_dag, l_event_item); - pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock); + pthread_rwlock_unlock(l_events_rwlock); switch (l_consensus_check) { case 0: if(s_debug_more) @@ -881,7 +884,6 @@ dap_chain_cs_dag_event_item_t* dap_chain_cs_dag_proc_treshold(dap_chain_cs_dag_t char * l_event_hash_str = dap_chain_hash_fast_to_str_new(&l_event_item->hash); if(s_debug_more) log_it(L_DEBUG, "Processing event (threshold): %s...", l_event_hash_str); - int l_add_res = s_dap_chain_add_atom_to_events_table(a_dag, a_ledger, l_event_item); HASH_ADD(hh, PVT(a_dag)->events,hash,sizeof (l_event_item->hash), l_event_item); s_dag_events_lasts_process_new_last_event(a_dag, l_event_item);