diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index ea42647f2430a7869e91f6c6785f6076d9df380e..78ae7458e46f0e6299760dea12620a7d16d03a5b 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -39,7 +39,7 @@ endif() # Consensus type dag if (CELLFRAME_MODULES MATCHES "cs-blocks") -# add_subdirectory(type/blocks) + add_subdirectory(type/blocks) endif() # No consensus diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h index d75c893559f8867b509c8d727d58a7052498febe..0229999b387fef74d3121bee193121001cbfe0df 100644 --- a/modules/chain/include/dap_chain.h +++ b/modules/chain/include/dap_chain.h @@ -79,8 +79,8 @@ typedef dap_chain_atom_ptr_t * (*dap_chain_callback_atom_iter_get_atoms_t)(dap_c typedef dap_chain_atom_ptr_t (*dap_chain_callback_atom_iter_get_next_t)(dap_chain_atom_iter_t * ,size_t*); typedef void (*dap_chain_callback_atom_iter_delete_t)(dap_chain_atom_iter_t * ); -typedef size_t (*dap_chain_datum_callback_datum_pool_proc_add_t)(dap_chain_t * , dap_chain_datum_t **, size_t ); -typedef size_t (*dap_chain_datum_callback_datum_pool_proc_add_with_group_t)(dap_chain_t * , dap_chain_datum_t **, size_t, const char *); +typedef size_t (*dap_chain_callback_add_datums_t)(dap_chain_t * , dap_chain_datum_t **, size_t ); +typedef size_t (*dap_chain_callback_add_datums_with_group_t)(dap_chain_t * , dap_chain_datum_t **, size_t, const char *); typedef void (*dap_chain_callback_notify_t)(void * a_arg, dap_chain_t *a_chain, dap_chain_cell_id_t a_id, void* a_atom, size_t a_atom_size); //change in chain happened @@ -122,8 +122,8 @@ typedef struct dap_chain{ dap_chain_callback_atom_t callback_atom_add; dap_chain_callback_atom_verify_t callback_atom_verify; - dap_chain_datum_callback_datum_pool_proc_add_t callback_datums_pool_proc; - dap_chain_datum_callback_datum_pool_proc_add_with_group_t callback_datums_pool_proc_with_group; + dap_chain_callback_add_datums_t callback_add_datums; + dap_chain_callback_add_datums_with_group_t callback_add_datums_with_group; dap_chain_callback_atom_get_hdr_size_t callback_atom_get_hdr_static_size; // Get atom header's size diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index 320bed0abebed52e17b61c8b5dba75567be9d981..7cc13bfb3cdba6872e7943c42d5014bc7742422e 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -327,9 +327,9 @@ bool s_gdb_pkt_callback(dap_proc_thread_t *a_thread, void *a_arg) // apply received transaction dap_chain_t *l_chain = dap_chain_find_by_id(l_ch_chain->request_net_id, l_ch_chain->request_chain_id); if(l_chain) { - if(l_chain->callback_datums_pool_proc_with_group){ + if(l_chain->callback_add_datums_with_group){ void * restrict l_store_obj_value = l_store_obj->value; - l_chain->callback_datums_pool_proc_with_group(l_chain, + l_chain->callback_add_datums_with_group(l_chain, (dap_chain_datum_t** restrict) l_store_obj_value, 1, l_store_obj[i].group); } diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c index 0819674cad21cd3e584cb335af55245f377f32cb..1e9b966aeaa474b3baba928adca1341b8f939ed1 100644 --- a/modules/consensus/none/dap_chain_cs_none.c +++ b/modules/consensus/none/dap_chain_cs_none.c @@ -195,8 +195,8 @@ int dap_chain_gdb_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) a_chain->callback_atom_iter_delete = s_chain_callback_atom_iter_delete; a_chain->callback_atom_find_by_hash = s_chain_callback_atom_iter_find_by_hash; - a_chain->callback_datums_pool_proc = s_chain_callback_datums_pool_proc; - a_chain->callback_datums_pool_proc_with_group = s_chain_callback_datums_pool_proc_with_group; + a_chain->callback_add_datums = s_chain_callback_datums_pool_proc; + a_chain->callback_add_datums_with_group = s_chain_callback_datums_pool_proc_with_group; // Linear pass through a_chain->callback_atom_iter_get_first = s_chain_callback_atom_iter_get_first; // Get the fisrt element from chain diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index c5150e1cfd84094cb2abaee51480592e0c446545..b74867c4a7a55d236152bd947ca05eecd3ae44a7 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -568,7 +568,7 @@ dap_chain_hash_fast_t* dap_chain_proc_tx_create_cond(dap_chain_net_t * a_net, if(!l_datum) return NULL; - size_t l_datums_number = l_chain->callback_datums_pool_proc(l_chain, &l_datum, 1); + size_t l_datums_number = l_chain->callback_add_datums(l_chain, &l_datum, 1); if(!l_datums_number) return NULL; diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 4a213435a8b803ec3bcc030c07959c474f568a1c..20d0a70569adbb5f4561ec8cd1290215e6557363 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -2094,7 +2094,7 @@ void dap_chain_net_proc_mempool (dap_chain_net_t * a_net) } } } - size_t l_objs_processed = l_chain->callback_datums_pool_proc(l_chain, l_datums, l_datums_size); + size_t l_objs_processed = l_chain->callback_add_datums(l_chain, l_datums, l_datums_size); // Delete processed objects size_t l_objs_processed_tmp = (l_objs_processed > 15) ? min(l_objs_processed, 10) : l_objs_processed; for(size_t i = 0; i < l_objs_processed; i++) { diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index 22484d478b6ae9870866abafc8c1b1719b48faba..a27bb9a8bde60d52cbd5d593efc48594ed1ea698 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -260,7 +260,7 @@ bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_node_role_t } } } - if (a_chain->callback_datums_pool_proc(a_chain, &a_datum, 1) != 1) { + if (a_chain->callback_add_datums(a_chain, &a_datum, 1) != 1) { return false; } return true; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 6c3f58918094a1439dc9d335ea7d3d682f56caec..c74f2a5ef470007ee523c993ba52fd39675b02f7 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -2245,8 +2245,8 @@ int com_mempool_proc(int argc, char ** argv, void *arg_func, char ** a_str_reply l_verify_datum); ret = -9; }else{ - if (l_chain->callback_datums_pool_proc){ - if (l_chain->callback_datums_pool_proc(l_chain, &l_datum, 1) ==0 ){ + if (l_chain->callback_add_datums){ + if (l_chain->callback_add_datums(l_chain, &l_datum, 1) ==0 ){ dap_string_append_printf(l_str_tmp, "Error! Datum doesn't pass verifications, examine node log files"); ret = -6; }else{ diff --git a/modules/type/blocks/dap_chain_block.c b/modules/type/blocks/dap_chain_block.c index 1df5d188d442f12911633ce29d4a608d0f9c3fc6..11ea5fef6dd756bf44afe2187aa2058c3ea269da 100644 --- a/modules/type/blocks/dap_chain_block.c +++ b/modules/type/blocks/dap_chain_block.c @@ -106,5 +106,8 @@ size_t dap_chain_block_datum_add(dap_chain_block_t * a_block, size_t a_block_siz } } -void dap_chain_block_datum_del_by_hash(dap_chain_block_t * a_block, size_t a_block_size, dap_chain_hash_fast_t* a_datum_hash); +size_t dap_chain_block_datum_del_by_hash(dap_chain_block_t * a_block, size_t a_block_size, dap_chain_hash_fast_t* a_datum_hash) +{ + +} diff --git a/modules/type/blocks/dap_chain_block_cache.c b/modules/type/blocks/dap_chain_block_cache.c index 5227a8e79b9dfec89819f2cb5f0749af4841b07c..183d9d85148372a0758dbf7379a60610e638ce52 100644 --- a/modules/type/blocks/dap_chain_block_cache.c +++ b/modules/type/blocks/dap_chain_block_cache.c @@ -74,7 +74,6 @@ void dap_chain_block_cache_update(dap_chain_block_cache_t * a_block_cache) assert(a_block_cache); assert(a_block_cache->block); dap_hash_fast(a_block_cache->block, a_block_cache->block_size, &a_block_cache->block_hash); - a_block_cache->meta_size } /** diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index f7db8bcebe3a17a8d858ea7382e6e17000de2df4..bf0eb621834c70e539589b78eeb02b2bdf47e164 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -20,8 +20,9 @@ You should have received a copy of the GNU General Public License along with any DAP SDK based project. If not, see <http://www.gnu.org/licenses/>. */ -#include "dap_common.h" +#include <pthread.h> +#include "dap_common.h" #include "dap_enc_base58.h" #include "dap_chain.h" #include "dap_chain_net.h" @@ -35,6 +36,7 @@ typedef struct dap_chain_cs_blocks_pvt { + pthread_rwlock_t rwlock; dap_chain_cs_blocks_t * blocks; dap_chain_block_cache_t * block_cache_first; // Mapped area start @@ -86,7 +88,7 @@ static dap_chain_atom_ptr_t *s_callback_atom_iter_get_lasts( dap_chain_atom_iter // Delete iterator static void s_callback_atom_iter_delete(dap_chain_atom_iter_t * a_atom_iter ); // Get the fisrt block -static size_t s_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain_datum_t ** a_datums, size_t a_datums_size); +static size_t s_callback_add_datums(dap_chain_t * a_chain, dap_chain_datum_t ** a_datums, size_t a_datums_size); bool s_seed_mode=false; @@ -169,12 +171,14 @@ int dap_chain_cs_blocks_new(dap_chain_t * a_chain, dap_config_t * a_chain_config a_chain->callback_tx_find_by_hash = s_callback_atom_iter_find_by_tx_hash; - a_chain->callback_datums_pool_proc = s_callback_datums_pool_proc; + a_chain->callback_add_datums = s_callback_add_datums; dap_chain_cs_blocks_pvt_t *l_cs_blocks_pvt = DAP_NEW_Z(dap_chain_cs_blocks_pvt_t); l_cs_blocks->_pvt = l_cs_blocks_pvt; + a_chain->_pvt = l_cs_blocks_pvt; + pthread_rwlock_init(&l_cs_blocks_pvt->rwlock,NULL); - dap_chain_node_role_t l_net_role= dap_chain_net_get_role( dap_chain_net_by_id(a_chain->net_id) ); +// dap_chain_node_role_t l_net_role= dap_chain_net_get_role( dap_chain_net_by_id(a_chain->net_id) ); // Datum operations callbacks /* @@ -186,6 +190,14 @@ int dap_chain_cs_blocks_new(dap_chain_t * a_chain, dap_config_t * a_chain_config return 0; } +/** + * @brief dap_chain_cs_blocks_delete + * @param a_chain + */ +void dap_chain_cs_blocks_delete(dap_chain_t * a_chain) +{ + pthread_rwlock_destroy(&PVT(a_chain)->rwlock ); +} /** @@ -343,11 +355,12 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void *a_arg_func, char **a_s &l_datum_size, l_gdb_group_mempool); l_datums[0] = l_datum; - if ( s_callback_datums_pool_proc(l_chain,l_datums,l_datums_count ) == l_datums_count ){ + if ( s_callback_add_datums(l_chain,l_datums,l_datums_count ) == l_datums_count ){ for ( size_t i = 0; i <l_datums_count; i++){ dap_chain_hash_fast_t l_datum_hash; dap_hash_fast(l_datums[i],dap_chain_datum_size(l_datums[i]),&l_datum_hash); char * l_datums_datum_hash_str = dap_chain_hash_fast_to_str_new(&l_datum_hash); + if ( dap_chain_global_db_gr_del( dap_strdup(l_datums_datum_hash_str),l_gdb_group_mempool ) ){ dap_chain_node_cli_set_reply_text(a_str_reply, "Converted datum %s from mempool to event in the new forming round ", @@ -396,13 +409,10 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void *a_arg_func, char **a_s dap_string_append_printf(l_str_tmp,"\t\t\tchain_id: 0x%016llX\n",l_block->hdr.chain_id.uint64); dap_string_append_printf(l_str_tmp,"\t\t\tts_created: %s\n",ctime_r(&l_ts_reated, buf) ); - // Prepare to parse data section - size_t l_offset = 0; - - // Parse Metadata + // Dump Metadata dap_string_append_printf(l_str_tmp,"\tMetadata. Count: %us\n",l_block->hdr.meta_count ); - for (uint16_t i=0; i < l_block->hdr.meta_count && l_offset < l_block_size-sizeof (l_block->hdr); i++){ - dap_chain_block_meta_t * l_meta =(dap_chain_block_meta_t *) (l_block->meta_n_datum_n_sign + l_offset); + for (uint32_t i=0; i < l_block_cache->meta_count; i++){ + dap_chain_block_meta_t * l_meta = l_block_cache->meta[i]; switch (l_meta->hdr.type) { case DAP_CHAIN_BLOCK_META_GENESIS:{ dap_string_append_printf(l_str_tmp,"\t\tGENESIS\n"); @@ -428,111 +438,66 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void *a_arg_func, char **a_s dap_string_append_printf(l_str_tmp,"\t\t\0x%0X: 0x%s\n", l_data_hex ); } } - l_offset += l_meta->hdr.size + sizeof (l_meta->hdr); } - for (uint16_t i=0; i < l_block->hdr.meta_count && l_offset < l_block_size-sizeof (l_block->hdr); i++){ - dap_chain_datum_t * l_datum = (dap_chain_datum_t*) (l_block->hashes_n_datum_n_signs + l_offset); + dap_string_append_printf(l_str_tmp,"\t\tdatums:\tcount: %uz\n",l_block_cache->datum_count); + for (uint32_t i=0; i < l_block_cache->datum_count ; i++){ + dap_chain_datum_t * l_datum = l_block_cache->datum[i]; size_t l_datum_size = dap_chain_datum_size(l_datum); + dap_string_append_printf(l_str_tmp,"\t\t\tdatum:\tdatum_size: %u\n",l_datum_size); + if (l_datum_size < sizeof (l_datum->header) ){ + dap_string_append_printf(l_str_tmp,"\t\t\tERROR: datum size %zd is smaller than header size %zd \n",l_datum_size, + sizeof (l_datum->header)); + break; + } time_t l_datum_ts_create = (time_t) l_datum->header.ts_create; - // Nested datums - dap_string_append_printf(l_str_tmp,"\t\t\t\tdatum:\tdatum_size: %u\n",l_datum_size); - dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\tversion:=0x%02X\n", l_datum->header.version_id); - dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\ttype_id:=%s\n", c_datum_type_str[l_datum->header.type_id]); - dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\tts_create=%s\n",ctime_r( &l_datum_ts_create,buf )); - dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\tdata_size=%u\n", l_datum->header.data_size); + dap_string_append_printf(l_str_tmp,"\t\t\t\tversion:=0x%02X\n", l_datum->header.version_id); + dap_string_append_printf(l_str_tmp,"\t\t\t\ttype_id:=%s\n", c_datum_type_str[l_datum->header.type_id]); + dap_string_append_printf(l_str_tmp,"\t\t\t\tts_create=%s\n",ctime_r( &l_datum_ts_create,buf )); + dap_string_append_printf(l_str_tmp,"\t\t\t\tdata_size=%u\n", l_datum->header.data_size); + dap_chain_net_dump_datum(l_str_tmp, l_datum, "hex" ); } // Signatures - dap_string_append_printf(l_str_tmp,"\t\t\t\tsigns:\tcount: %us\n",l_block->hdr.sign_count); - l_offset += l_datum_size; - while (l_offset + sizeof (l_block->header) < l_event_size ){ - dap_sign_t * l_sign =(dap_sign_t *) (l_block->hashes_n_datum_n_signs +l_offset); + dap_string_append_printf(l_str_tmp,"\t\tsignatures:\tcount: %u\n",l_block_cache->sign_count ); + for (uint32_t i=0; i < l_block_cache->sign_count ; i++){ + dap_sign_t * l_sign =l_block_cache->sign[i]; size_t l_sign_size = dap_sign_get_size(l_sign); - if (l_sign_size == 0 ){ - dap_string_append_printf(l_str_tmp,"\t\t\t\tERROR: wrong sign size 0, stop parsing headers\n"); - break; - } dap_chain_addr_t l_addr = {0}; dap_chain_hash_fast_t l_pkey_hash; dap_sign_get_pkey_hash(l_sign, &l_pkey_hash); dap_chain_addr_fill(&l_addr, l_sign->header.type, &l_pkey_hash, l_net->pub.id); - char * l_addr_str = dap_chain_addr_to_str(&l_addr); - dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\ttype: %s\taddr: %s" - "n", dap_sign_type_to_str( l_sign->header.type ), - l_addr_str ); - l_offset += l_sign_size; - DAP_DELETE( l_addr_str); + char * l_pkey_hash_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash); + dap_string_append_printf(l_str_tmp,"\t\t\t: type:%s size: %zd pkey_hash: %s data_hash: " + "n", dap_sign_type_to_str( l_sign->header.type ), l_sign_size, l_pkey_hash_str ); + DAP_DELETE( l_pkey_hash_str ); } - dap_chain_net_dump_datum(l_str_tmp, l_datum, l_hash_out_type); - dap_chain_node_cli_set_reply_text(a_str_reply, l_str_tmp->str); dap_string_free(l_str_tmp,false); ret=0; } }else { - dap_chain_node_cli_set_reply_text(a_str_reply, - "Can't find blocl 0x%s in the new forming round ", - l_event_hash_str); + dap_chain_node_cli_set_reply_text(a_str_reply, "Can't find block %s ", l_subcmd_str_arg); ret=-10; } }break; case SUBCMD_LIST:{ - if( (l_from_events_str == NULL) || - (strcmp(l_from_events_str,"round.new") == 0) ){ - char * l_gdb_group_events = DAP_CHAIN_CS_DAG(l_chain)->gdb_group_events_round_new; - dap_string_t * l_str_tmp = dap_string_new(""); - if ( l_gdb_group_events ){ - dap_global_db_obj_t * l_objs; - size_t l_objs_count = 0; - l_objs = dap_chain_global_db_gr_load(l_gdb_group_events,&l_objs_count); - dap_string_append_printf(l_str_tmp,"%s.%s: Found %u records :\n",l_net->pub.name,l_chain->name,l_objs_count); - - for (size_t i = 0; i< l_objs_count; i++){ - dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *) l_objs[i].value; - char buf[50]; - time_t l_ts_create = (time_t) l_event->header.ts_created; - dap_string_append_printf(l_str_tmp,"\t%s: ts_create=%s", - l_objs[i].key, ctime_r( &l_ts_create,buf ) ); - } - // bugs-3932 - //DAP_DELETE( l_gdb_group_events); - if (l_objs && l_objs_count ) - dap_chain_global_db_objs_delete(l_objs, l_objs_count); - ret = 0; - } else { - dap_string_append_printf(l_str_tmp,"%s.%s: Error! No GlobalDB group!\n",l_net->pub.name,l_chain->name); - ret = -2; - - } - dap_chain_node_cli_set_reply_text(a_str_reply, l_str_tmp->str); - dap_string_free(l_str_tmp,false); - }else if (l_from_events_str && (strcmp(l_from_events_str,"events") == 0) ){ dap_string_t * l_str_tmp = dap_string_new(NULL); - size_t l_events_count = HASH_COUNT(PVT(l_dag)->events); - dap_string_append_printf(l_str_tmp,"%s.%s: Have %u events :\n", - l_net->pub.name,l_chain->name,l_events_count); - dap_chain_cs_dag_event_item_t * l_event_item = NULL,*l_event_item_tmp = NULL; + dap_string_append_printf(l_str_tmp,"%s.%s: Have %u blocks :\n", + l_net->pub.name,l_chain->name,PVT(l_blocks)->blocks_count); + dap_chain_block_cache_t * l_block_cache = NULL,*l_block_cache_tmp = NULL; - pthread_rwlock_rdlock(&PVT(l_dag)->events_rwlock); - HASH_ITER(hh,PVT(l_dag)->events,l_event_item, l_event_item_tmp ) { - char buf[50]; - char * l_event_item_hash_str = dap_chain_hash_fast_to_str_new( &l_event_item->hash); - time_t l_ts_create = (time_t) l_event_item->event->header.ts_created; + pthread_rwlock_rdlock(&PVT(l_blocks)->rwlock); + HASH_ITER(hh,PVT(l_blocks)->block_cache_first,l_block_cache, l_block_cache_tmp ) { + char l_buf[50]; dap_string_append_printf(l_str_tmp,"\t%s: ts_create=%s", - l_event_item_hash_str, ctime_r( &l_ts_create,buf ) ); - DAP_DELETE(l_event_item_hash_str); + l_block_cache->block_hash_str, ctime_r( &l_block_cache->ts_created,l_buf ) ); } - pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock); + pthread_rwlock_unlock(&PVT(l_blocks)->rwlock); dap_chain_node_cli_set_reply_text(a_str_reply, l_str_tmp->str); dap_string_free(l_str_tmp,false); - }else { - dap_chain_node_cli_set_reply_text(a_str_reply, "Undefined events source for listing "); - ret=-14; - - } }break; case SUBCMD_UNDEFINED: { @@ -715,7 +680,7 @@ static void s_callback_atom_iter_delete(dap_chain_atom_iter_t * a_atom_iter ) * @param a_datums_size * @return */ -static size_t s_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain_datum_t ** a_datums, size_t a_datums_size) +static size_t s_callback_add_datums(dap_chain_t * a_chain, dap_chain_datum_t ** a_datums, size_t a_datums_size) { } diff --git a/modules/type/blocks/include/dap_chain_block.h b/modules/type/blocks/include/dap_chain_block.h index 92a944fdad653dc96629a6f5a81b0d4bb8fe64de..cad3a151794549465eacedaa0f9d8239a1efd284 100644 --- a/modules/type/blocks/include/dap_chain_block.h +++ b/modules/type/blocks/include/dap_chain_block.h @@ -70,12 +70,6 @@ typedef struct dap_chain_block_meta{ #define DAP_CHAIN_BLOCK_META_NONCE2 0x21 -// Section with datum -typedef struct dap_chain_block_datum{ - uint32_t size_t; - dap_chain_datum_t datum; -}DAP_ALIGN_PACKED dap_chain_block_datum_t; - /** * @struct dap_chain_block * @brief The dap_chain_block struct diff --git a/modules/type/blocks/include/dap_chain_block_cache.h b/modules/type/blocks/include/dap_chain_block_cache.h index bd7439eb7014a71d1ef9cc7ba35da7107eaf3b0b..890accd18abab1d6e1933036ef2fb8f263588d40 100644 --- a/modules/type/blocks/include/dap_chain_block_cache.h +++ b/modules/type/blocks/include/dap_chain_block_cache.h @@ -29,8 +29,12 @@ typedef struct dap_chain_block_cache{ // Block's general non-nested attributes dap_chain_hash_fast_t block_hash; + char* block_hash_str; size_t block_size; + // Local platform values representation + time_t ts_created; + // Block's datums uint32_t datum_count; dap_chain_datum_t ** datum; diff --git a/modules/type/blocks/include/dap_chain_cs_blocks.h b/modules/type/blocks/include/dap_chain_cs_blocks.h index 59a18662e297e115db131a685910119c719c2f1b..f2be5e7fa63f0b63d87dd0a8f2e3ab24e3414ae7 100644 --- a/modules/type/blocks/include/dap_chain_cs_blocks.h +++ b/modules/type/blocks/include/dap_chain_cs_blocks.h @@ -58,3 +58,4 @@ int dap_chain_cs_blocks_init(); void dap_chain_cs_blocks_deinit(); int dap_chain_cs_blocks_new(dap_chain_t * a_chain, dap_config_t * a_chain_config); +void dap_chain_cs_blocks_delete(dap_chain_t * a_chain); diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 121cac6f470b81fe3e93f05a95ec2e5fbf7ea3f7..53de10dec0993374a7c926921abdc4e01727d69e 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -193,7 +193,7 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) a_chain->callback_tx_find_by_hash = s_chain_callback_atom_iter_find_by_tx_hash; - a_chain->callback_datums_pool_proc = s_chain_callback_datums_pool_proc; + a_chain->callback_add_datums = s_chain_callback_datums_pool_proc; // Datum operations callbacks /*