Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
libdap-chain-cs-dag
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
cellframe
libdap-chain-cs-dag
Commits
e8c561d4
Commit
e8c561d4
authored
5 years ago
by
Alexandr Mruchok
Browse files
Options
Downloads
Plain Diff
Merge branch 'master' of
https://gitlab.demlabs.net/cellframe/libdap-chain-cs-dag
into feature-2648
parents
6df35765
447d6db4
No related branches found
No related tags found
1 merge request
!7
Feature 2648
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
dap_chain_cs_dag.c
+52
-13
52 additions, 13 deletions
dap_chain_cs_dag.c
dap_chain_cs_dag_event.c
+8
-8
8 additions, 8 deletions
dap_chain_cs_dag_event.c
dap_chain_cs_dag_event.h
+3
-3
3 additions, 3 deletions
dap_chain_cs_dag_event.h
with
63 additions
and
24 deletions
dap_chain_cs_dag.c
+
52
−
13
View file @
e8c561d4
...
...
@@ -59,6 +59,7 @@ typedef struct dap_chain_cs_dag_event_item {
UT_hash_handle
hh
;
}
dap_chain_cs_dag_event_item_t
;
typedef
struct
dap_chain_cs_dag_pvt
{
dap_enc_key_t
*
datum_add_sign_key
;
...
...
@@ -66,6 +67,8 @@ typedef struct dap_chain_cs_dag_pvt {
pthread_rwlock_t
events_rwlock
;
dap_chain_cs_dag_event_item_t
*
events
;
dap_chain_cs_dag_event_item_t
*
tx_events
;
dap_chain_cs_dag_event_item_t
*
events_treshold
;
dap_chain_cs_dag_event_item_t
*
events_lasts_unlinked
;
...
...
@@ -86,6 +89,8 @@ static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t
static
dap_chain_atom_ptr_t
s_chain_callback_atom_iter_find_by_hash
(
dap_chain_atom_iter_t
*
a_atom_iter
,
dap_chain_hash_fast_t
*
a_atom_hash
);
static
dap_chain_datum_tx_t
*
s_chain_callback_atom_iter_find_by_tx_hash
(
dap_chain_t
*
a_chain
,
dap_chain_hash_fast_t
*
a_atom_hash
);
static
dap_chain_datum_t
*
s_chain_callback_atom_get_datum
(
dap_chain_atom_ptr_t
a_event
);
// Get event(s) from dag
...
...
@@ -181,6 +186,7 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
a_chain
->
callback_atom_iter_get_lasts
=
s_chain_callback_atom_iter_get_lasts
;
a_chain
->
callback_atom_find_by_hash
=
s_chain_callback_atom_iter_find_by_hash
;
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
;
...
...
@@ -208,7 +214,7 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
l_dag
->
is_celled
=
dap_config_get_item_bool_default
(
a_chain_cfg
,
"dag"
,
"is_celled"
,
false
);
l_dag
->
is_add_directy
=
dap_config_get_item_bool_default
(
a_chain_cfg
,
"dag"
,
"is_add_directly"
,
false
);
l_dag
->
datum_add_hashes_count
=
dap_config_get_item_uint16_default
(
a_chain_cfg
,
"dag"
,
"datum_add_hashes_count"
,
1
);
l_dag
->
gdb_group_events_round_new
=
strdup
(
dap_config_get_item_str_default
(
a_chain_cfg
,
"dag"
,
"gdb_group_events_round_new"
,
l_dag
->
gdb_group_events_round_new
=
dap_
strdup
(
dap_config_get_item_str_default
(
a_chain_cfg
,
"dag"
,
"gdb_group_events_round_new"
,
"events.round.new"
));
if
(
l_dag
->
is_single_line
)
{
log_it
(
L_NOTICE
,
"DAG chain initialized (single line)"
);
...
...
@@ -305,6 +311,8 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t
l_event_last
=
DAP_NEW_Z
(
dap_chain_cs_dag_event_item_t
);
l_event_last
->
ts_added
=
l_event_item
->
ts_added
;
l_event_last
->
event
=
l_event
;
dap_hash_fast
(
l_event
,
dap_chain_cs_dag_event_calc_size
(
l_event
),
&
l_event_last
->
hash
);
HASH_ADD
(
hh
,
PVT
(
l_dag
)
->
events_lasts_unlinked
,
hash
,
sizeof
(
l_event_last
->
hash
),
l_event_last
);
}
...
...
@@ -323,6 +331,12 @@ static int s_chain_callback_atom_add(dap_chain_t * a_chain, dap_chain_atom_ptr_t
break
;
case
DAP_CHAIN_DATUM_TX
:
{
dap_chain_datum_tx_t
*
l_tx
=
(
dap_chain_datum_tx_t
*
)
l_datum
->
data
;
dap_chain_cs_dag_event_item_t
*
l_tx_event
=
DAP_NEW_Z
(
dap_chain_cs_dag_event_item_t
);
l_tx_event
->
ts_added
=
l_event_item
->
ts_added
;
l_tx_event
->
event
=
l_event
;
memcpy
(
&
l_tx_event
->
hash
,
&
l_event_item
->
hash
,
sizeof
(
l_tx_event
->
hash
)
);
HASH_ADD
(
hh
,
PVT
(
l_dag
)
->
tx_events
,
hash
,
sizeof
(
l_tx_event
->
hash
),
l_tx_event
);
//if ( !l_gdb_priv->is_load_mode ) // If its not load module but mempool proc
// l_tx->header.ts_created = time(NULL);
//if(dap_chain_datum_tx_get_size(l_tx) == l_datum->header.data_size){
...
...
@@ -678,12 +692,14 @@ static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t
l_atom_iter
->
chain
=
a_chain
;
l_atom_iter
->
cur
=
a_atom
;
dap_chain_hash_fast_t
l_atom_hash
;
dap_hash_fast
(
a_atom
,
a_chain
->
callback_atom_get_size
(
a_atom
),
&
l_atom_hash
);
if
(
a_atom
){
dap_chain_hash_fast_t
l_atom_hash
;
dap_hash_fast
(
a_atom
,
a_chain
->
callback_atom_get_size
(
a_atom
),
&
l_atom_hash
);
dap_chain_cs_dag_event_item_t
*
l_atom_item
;
HASH_FIND
(
hh
,
PVT
(
DAP_CHAIN_CS_DAG
(
a_chain
))
->
events
,
&
l_atom_hash
,
sizeof
(
l_atom_hash
),
l_atom_item
);
l_atom_iter
->
cur_item
=
l_atom_item
;
dap_chain_cs_dag_event_item_t
*
l_atom_item
;
HASH_FIND
(
hh
,
PVT
(
DAP_CHAIN_CS_DAG
(
a_chain
))
->
events
,
&
l_atom_hash
,
sizeof
(
l_atom_hash
),
l_atom_item
);
l_atom_iter
->
cur_item
=
l_atom_item
;
}
return
l_atom_iter
;
}
...
...
@@ -766,8 +782,12 @@ static dap_chain_atom_ptr_t* s_chain_callback_atom_iter_get_lasts( dap_chain_ato
static
dap_chain_atom_ptr_t
*
s_chain_callback_atom_iter_get_links
(
dap_chain_atom_iter_t
*
a_atom_iter
,
size_t
*
a_links_size_ptr
)
{
if
(
a_atom_iter
->
cur
){
if
(
a_atom_iter
->
cur
&&
a_atom_iter
->
chain
){
dap_chain_cs_dag_t
*
l_dag
=
DAP_CHAIN_CS_DAG
(
a_atom_iter
->
chain
);
if
(
!
l_dag
){
log_it
(
L_ERROR
,
"Chain %s have DAP_CHAIN_CS_DAG() = NULL"
,
a_atom_iter
->
chain
->
name
);
return
NULL
;
}
dap_chain_cs_dag_event_t
*
l_event
=
(
dap_chain_cs_dag_event_t
*
)
a_atom_iter
->
cur
;
dap_chain_cs_dag_event_item_t
*
l_event_item
=
(
dap_chain_cs_dag_event_item_t
*
)
a_atom_iter
->
cur_item
;
if
(
l_event
->
header
.
hash_count
>
0
){
...
...
@@ -784,12 +804,17 @@ static dap_chain_atom_ptr_t* s_chain_callback_atom_iter_get_links( dap_chain_ato
l_ret
[
i
]
=
l_link_item
->
event
;
}
else
{
char
*
l_link_hash_str
=
dap_chain_hash_fast_to_str_new
(
l_link_hash
);
char
*
l_event_hash_str
=
dap_chain_hash_fast_to_str_new
(
&
l_event_item
->
hash
);
log_it
(
L_ERROR
,
"Can't find %s->%s links"
,
l_event_hash_str
,
l_link_hash_str
);
char
*
l_event_hash_str
=
l_event_item
?
dap_chain_hash_fast_to_str_new
(
&
l_event_item
->
hash
)
:
NULL
;
log_it
(
L_ERROR
,
"Can't find %s->%s links"
,
l_event_hash_str
?
l_event_hash_str
:
"[null]"
,
l_link_hash_str
);
DAP_DELETE
(
l_event_hash_str
);
DAP_DELETE
(
l_link_hash_str
);
(
*
a_links_size_ptr
)
--
;
}
}
if
(
!
(
*
a_links_size_ptr
)){
DAP_DELETE
(
l_ret
);
l_ret
=
NULL
;
}
return
l_ret
;
}
}
...
...
@@ -816,6 +841,20 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_find_by_hash(dap_chain_at
return
NULL
;
}
static
dap_chain_datum_tx_t
*
s_chain_callback_atom_iter_find_by_tx_hash
(
dap_chain_t
*
a_chain
,
dap_chain_hash_fast_t
*
a_atom_hash
)
{
dap_chain_cs_dag_t
*
l_dag
=
DAP_CHAIN_CS_DAG
(
a_chain
);
dap_chain_cs_dag_event_item_t
*
l_event_item
=
NULL
;
HASH_FIND
(
hh
,
PVT
(
l_dag
)
->
tx_events
,
a_atom_hash
,
sizeof
(
*
a_atom_hash
),
l_event_item
);
if
(
l_event_item
){
dap_chain_datum_t
*
l_datum
=
dap_chain_cs_dag_event_get_datum
(
l_event_item
->
event
)
;
return
l_datum
?
l_datum
->
header
.
data_size
?
(
dap_chain_datum_tx_t
*
)
l_datum
->
data
:
NULL
:
NULL
;
}
else
return
NULL
;
}
/**
* @brief s_chain_callback_atom_iter_get_next Get the next dag event
* @param a_atom_iter
...
...
@@ -1153,18 +1192,18 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
dap_string_append_printf
(
l_str_tmp
,
"
\t\t\t\t
signs:
\t
count: %us
\n
"
,
l_event
->
header
.
signs_count
);
l_offset
+=
l_datum_size
;
while
(
l_offset
+
sizeof
(
l_event
->
header
)
<
l_event_size
){
dap_
chain_
sign_t
*
l_sign
=
(
dap_
chain_
sign_t
*
)
(
l_event
->
hashes_n_datum_n_signs
+
l_offset
);
size_t
l_sign_size
=
dap_
chain_
sign_get_size
(
l_sign
);
dap_sign_t
*
l_sign
=
(
dap_sign_t
*
)
(
l_event
->
hashes_n_datum_n_signs
+
l_offset
);
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\t
ERROR: wrong sign size 0, stop parsing headers
\n
"
);
break
;
}
dap_enc_key_t
*
l_sign_key
=
dap_
chain_
sign_to_enc_key
(
l_sign
);
dap_enc_key_t
*
l_sign_key
=
dap_sign_to_enc_key
(
l_sign
);
dap_chain_addr_t
l_addr
=
{
0
};
dap_chain_addr_fill
(
&
l_addr
,
l_sign_key
,
&
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\t
type: %s
\t
addr: %s"
"n"
,
dap_
chain_
sign_type_to_str
(
l_sign
->
header
.
type
),
"n"
,
dap_sign_type_to_str
(
l_sign
->
header
.
type
),
l_addr_str
);
l_offset
+=
l_sign_size
;
DAP_DELETE
(
l_addr_str
);
...
...
This diff is collapsed.
Click to expand it.
dap_chain_cs_dag_event.c
+
8
−
8
View file @
e8c561d4
...
...
@@ -26,7 +26,7 @@
#include
"dap_enc_key.h"
#include
"dap_hash.h"
#include
"dap_
chain_
sign.h"
#include
"dap_sign.h"
#include
"dap_chain_datum.h"
#include
"dap_chain_cs_dag.h"
#include
"dap_chain_cs_dag_event.h"
...
...
@@ -65,11 +65,11 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_new(dap_chain_id_t a_chain_id,
memcpy
(
l_event_new
->
hashes_n_datum_n_signs
+
l_hashes_size
,
a_datum
,
l_datum_size
);
if
(
a_key
){
dap_
chain_
sign_t
*
l_sign
=
dap_
chain_
sign_create
(
a_key
,
l_event_new
,
dap_sign_t
*
l_sign
=
dap_sign_create
(
a_key
,
l_event_new
,
l_hashes_size
+
sizeof
(
l_event_new
->
header
)
+
l_datum_size
,
0
);
if
(
l_sign
){
size_t
l_sign_size
=
dap_
chain_
sign_get_size
(
l_sign
);
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
);
l_event_size
+=
l_sign_size
;
...
...
@@ -111,8 +111,8 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy_with_sign_add( dap_chain_
{
size_t
l_event_size
=
dap_chain_cs_dag_event_calc_size
(
a_event
);
size_t
l_event_signing_size
=
dap_chain_cs_dag_event_calc_size_excl_signs
(
a_event
);
dap_
chain_
sign_t
*
l_sign
=
dap_
chain_
sign_create
(
l_key
,
a_event
,
l_event_signing_size
,
0
);
size_t
l_sign_size
=
dap_
chain_
sign_get_size
(
l_sign
);
dap_sign_t
*
l_sign
=
dap_sign_create
(
l_key
,
a_event
,
l_event_signing_size
,
0
);
size_t
l_sign_size
=
dap_sign_get_size
(
l_sign
);
dap_chain_cs_dag_event_t
*
l_event_new
=
DAP_NEW_Z_SIZE
(
dap_chain_cs_dag_event_t
,
l_event_size
+
l_sign_size
);
memcpy
(
l_event_new
,
a_event
,
l_event_size
);
memcpy
(
l_event_new
+
l_event_size
,
l_sign
,
l_sign_size
);
...
...
@@ -126,7 +126,7 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy_with_sign_add( dap_chain_
* @param a_sign_number
* @return
*/
dap_
chain_
sign_t
*
dap_chain_cs_dag_event_get_sign
(
dap_chain_cs_dag_event_t
*
a_event
,
uint16_t
a_sign_number
)
dap_sign_t
*
dap_chain_cs_dag_event_get_sign
(
dap_chain_cs_dag_event_t
*
a_event
,
uint16_t
a_sign_number
)
{
if
(
a_event
->
header
.
signs_count
>
a_sign_number
){
size_t
l_offset_to_sign
=
dap_chain_cs_dag_event_calc_size_excl_signs
(
a_event
);
...
...
@@ -134,10 +134,10 @@ dap_chain_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a
uint16_t
l_signs_offset
=
0
;
uint16_t
l_signs_passed
;
for
(
l_signs_passed
=
0
;
l_signs_passed
<
a_sign_number
;
l_signs_passed
++
){
dap_
chain_
sign_t
*
l_sign
=
(
dap_
chain_
sign_t
*
)
(
l_signs
+
l_signs_offset
);
dap_sign_t
*
l_sign
=
(
dap_sign_t
*
)
(
l_signs
+
l_signs_offset
);
l_signs_offset
+=
l_sign
->
header
.
sign_pkey_size
+
l_sign
->
header
.
sign_size
+
sizeof
(
l_sign
->
header
);
}
return
(
dap_
chain_
sign_t
*
)
l_signs
+
l_signs_offset
;
return
(
dap_sign_t
*
)
l_signs
+
l_signs_offset
;
}
else
return
NULL
;
}
...
...
This diff is collapsed.
Click to expand it.
dap_chain_cs_dag_event.h
+
3
−
3
View file @
e8c561d4
...
...
@@ -26,7 +26,7 @@
#include
"dap_enc_key.h"
#include
"dap_chain_common.h"
#include
"dap_chain_datum.h"
#include
"dap_
chain_
sign.h"
#include
"dap_sign.h"
#include
"dap_hash.h"
typedef
struct
dap_chain_cs_dag
dap_chain_cs_dag_t
;
...
...
@@ -67,7 +67,7 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy(dap_chain_cs_dag_event_t
// Important: returns new deep copy of event
dap_chain_cs_dag_event_t
*
dap_chain_cs_dag_event_copy_with_sign_add
(
dap_chain_cs_dag_event_t
*
a_event
,
dap_enc_key_t
*
l_key
);
dap_
chain_
sign_t
*
dap_chain_cs_dag_event_get_sign
(
dap_chain_cs_dag_event_t
*
a_event
,
uint16_t
a_sign_number
);
dap_sign_t
*
dap_chain_cs_dag_event_get_sign
(
dap_chain_cs_dag_event_t
*
a_event
,
uint16_t
a_sign_number
);
/**
* @brief dap_chain_cs_dag_event_calc_size
...
...
@@ -87,7 +87,7 @@ static inline size_t dap_chain_cs_dag_event_calc_size(dap_chain_cs_dag_event_t *
uint16_t
l_signs_offset
=
0
;
uint16_t
l_signs_passed
;
for
(
l_signs_passed
=
0
;
l_signs_passed
<
a_event
->
header
.
signs_count
;
l_signs_passed
++
){
dap_
chain_
sign_t
*
l_sign
=
(
dap_
chain_
sign_t
*
)
l_signs
+
l_signs_offset
;
dap_sign_t
*
l_sign
=
(
dap_sign_t
*
)
l_signs
+
l_signs_offset
;
l_signs_offset
+=
l_sign
->
header
.
sign_pkey_size
+
l_sign
->
header
.
sign_size
+
sizeof
(
l_sign
->
header
);
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment