From 21886ef54e5b6d00c605221271530f83201b1574 Mon Sep 17 00:00:00 2001 From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net> Date: Fri, 18 Sep 2020 21:57:51 +0700 Subject: [PATCH] [*] Hotfix of new event create on verification step --- CMakeLists.txt | 2 +- .../consensus/dag-pos/dap_chain_cs_dag_pos.c | 4 +- modules/type/dag/dap_chain_cs_dag.c | 40 ++++++++++--------- modules/type/dag/dap_chain_cs_dag_event.c | 3 +- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 59c5885ae7..9fd7506cca 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.5-16") +set(CELLFRAME_SDK_NATIVE_VERSION "2.5-17") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") set(DAPSDK_MODULES "") diff --git a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c index 597ea51c63..cb37b8d615 100644 --- a/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c +++ b/modules/consensus/dag-pos/dap_chain_cs_dag_pos.c @@ -231,9 +231,9 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_ dap_chain_addr_t l_addr = { 0 }; for ( size_t l_sig_pos=0; l_sig_pos < a_dag_event->header.signs_count; l_sig_pos++ ){ - dap_sign_t * l_sign = dap_chain_cs_dag_event_get_sign(a_dag_event, 0,a_dag_event_size); + dap_sign_t * l_sign = dap_chain_cs_dag_event_get_sign(a_dag_event, a_dag_event_size,l_sig_pos); if ( l_sign == NULL){ - log_it(L_WARNING, "Event is NOT signed with anything"); + log_it(L_WARNING, "Event is NOT signed with anything: sig pos %zd, event size %zd", a_dag_event_size); return -4; } diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 44c31b7872..6385aacf84 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -482,7 +482,6 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain if(l_dag->callback_cs_event_create) l_event = l_dag->callback_cs_event_create(l_dag,l_datum,l_hashes,l_hashes_linked,&l_event_size); if ( l_event&&l_event_size){ // Event is created - if (l_dag->is_add_directy) { if (s_chain_callback_atom_add(a_chain, l_event, l_event_size) == ATOM_ACCEPT) { // add events to file @@ -593,24 +592,29 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_ } // genesis or seed mode if (l_event->header.hash_count == 0){ - if(s_seed_mode && !PVT(l_dag)->events) - return ATOM_ACCEPT; - - if (l_dag->is_static_genesis_event ){ - dap_chain_hash_fast_t l_event_hash; - dap_chain_cs_dag_event_calc_hash(l_event,a_atom_size, &l_event_hash); - if ( memcmp( &l_event_hash, &l_dag->static_genesis_event_hash, sizeof(l_event_hash) ) != 0 ){ - char * l_event_hash_str = dap_chain_hash_fast_to_str_new(&l_event_hash); - 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 ATOM_REJECT; - }else{ - return ATOM_ACCEPT; + if(s_seed_mode && !PVT(l_dag)->events){ + log_it(L_NOTICE,"Accepting genesis event"); + return ATOM_ACCEPT; + }else if(s_seed_mode){ + log_it(L_WARNING,"Cant accept genesis event: already present data in DAG, ->events is not NULL"); + return ATOM_REJECT; + } + + if (l_dag->is_static_genesis_event ){ + dap_chain_hash_fast_t l_event_hash; + dap_chain_cs_dag_event_calc_hash(l_event,a_atom_size, &l_event_hash); + if ( memcmp( &l_event_hash, &l_dag->static_genesis_event_hash, sizeof(l_event_hash) ) != 0 ){ + char * l_event_hash_str = dap_chain_hash_fast_to_str_new(&l_event_hash); + 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 ATOM_REJECT; + }else{ + return ATOM_ACCEPT; + } } - } } //chain coherence diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c index a9d1d755b5..3b39ba72c0 100644 --- a/modules/type/dag/dap_chain_cs_dag_event.c +++ b/modules/type/dag/dap_chain_cs_dag_event.c @@ -77,9 +77,10 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_new(dap_chain_id_t a_chain_id, size_t l_sign_size = dap_sign_get_size(l_sign); l_event_new = (dap_chain_cs_dag_event_t* )DAP_REALLOC(l_event_new,l_event_size+l_sign_size ); memcpy(l_event_new->hashes_n_datum_n_signs + l_hashes_size + l_datum_size, l_sign, l_sign_size); - *a_event_size += l_sign_size; l_event_size += l_sign_size; + *a_event_size = l_event_size; l_event_new->header.signs_count++; + log_it(L_INFO,"Created event size %zd, signed with sign size %zd", l_event_size, l_sign_size); DAP_DELETE(l_sign); }else { log_it(L_ERROR,"Can't sign dag event!"); -- GitLab