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