From c70b705bcd6922a71c8200762f7f1fa8c7189ada Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Mon, 14 Mar 2022 13:15:56 +0000 Subject: [PATCH] features-5796 --- dap-sdk/core/src/dap_string.c | 6 +-- modules/chain/dap_chain_pvt.c | 7 +++ modules/chain/include/dap_chain.h | 10 +++- modules/chain/include/dap_chain_pvt.h | 5 +- modules/channel/chain/dap_stream_ch_chain.c | 43 ++++------------- .../chain/include/dap_stream_ch_chain.h | 2 +- modules/consensus/none/dap_chain_cs_none.c | 1 - modules/global-db/dap_chain_global_db.c | 2 +- modules/net/dap_chain_net.c | 48 ++++++++++++------- modules/net/dap_chain_node.c | 44 +++++++---------- modules/net/include/dap_chain_net.h | 3 +- modules/net/include/dap_chain_node.h | 3 -- modules/net/srv/dap_chain_net_srv_order.c | 16 +++++-- .../net/srv/include/dap_chain_net_srv_order.h | 2 +- 14 files changed, 92 insertions(+), 100 deletions(-) diff --git a/dap-sdk/core/src/dap_string.c b/dap-sdk/core/src/dap_string.c index 0f5a56bfce..ac05cc758a 100755 --- a/dap-sdk/core/src/dap_string.c +++ b/dap-sdk/core/src/dap_string.c @@ -833,8 +833,8 @@ dap_string_t* dap_string_up(dap_string_t *string) */ void dap_string_append_vprintf(dap_string_t *string, const char *format, va_list args) { - const char l_oom [] = { "Out of memory@%s!" }, l_buf[128]; - char *buf; + const char l_oom [] = { "Out of memory@%s!" }; + char *buf, l_buf[128]; int len; dap_return_if_fail(string != NULL); @@ -852,7 +852,7 @@ void dap_string_append_vprintf(dap_string_t *string, const char *format, va_list memcpy(string->str + string->len, buf, len + 1); string->len += len; } else { - len = sprintf(l_buf, l_oom, __func__ ); + len = dap_sprintf(l_buf, l_oom, __func__ ); if ( (string->str = DAP_NEW_SIZE(char, sizeof(l_buf ))) ) memcpy(string->str, l_buf , len); } diff --git a/modules/chain/dap_chain_pvt.c b/modules/chain/dap_chain_pvt.c index afb7af0186..33f233562a 100644 --- a/modules/chain/dap_chain_pvt.c +++ b/modules/chain/dap_chain_pvt.c @@ -34,6 +34,13 @@ #define LOG_TAG "dap_chain_pvt" +void dap_chain_add_mempool_notify_callback(dap_chain_t *a_chain, dap_global_db_obj_callback_notify_t a_callback, void *a_cb_arg) +{ + dap_chain_gdb_notifier_t *l_notifier = DAP_NEW(dap_chain_gdb_notifier_t); + l_notifier->callback = a_callback; + l_notifier->cb_arg = a_cb_arg; + DAP_CHAIN_PVT(a_chain)->mempool_notifires = dap_list_append(DAP_CHAIN_PVT(a_chain)->mempool_notifires, l_notifier); +} diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h index f0d2b64a1f..eafbdb94cc 100644 --- a/modules/chain/include/dap_chain.h +++ b/modules/chain/include/dap_chain.h @@ -31,10 +31,10 @@ #include "dap_chain_datum.h" #include "dap_chain_datum_tx.h" -struct dap_chain; +#include "dap_chain_global_db.h" + typedef struct dap_chain dap_chain_t; -struct dap_chain_cell; typedef struct dap_chain_cell dap_chain_cell_t; typedef struct dap_ledger dap_ledger_t; @@ -164,6 +164,11 @@ typedef struct dap_chain{ void * _inheritor; // inheritor object } dap_chain_t; +typedef struct dap_chain_gdb_notifier { + dap_global_db_obj_callback_notify_t callback; + void *cb_arg; +} dap_chain_gdb_notifier_t; + #define DAP_CHAIN(a) ( (dap_chain_t *) (a)->_inheritor) int dap_chain_init(void); @@ -190,3 +195,4 @@ void dap_chain_add_callback_notify(dap_chain_t * a_chain, dap_chain_callback_not dap_chain_atom_ptr_t dap_chain_get_atom_by_hash(dap_chain_t * a_chain, dap_chain_hash_fast_t * a_atom_hash, size_t * a_atom_size); bool dap_chain_get_atom_last_hash(dap_chain_t *a_chain, dap_hash_fast_t *a_atom_hash, dap_chain_cell_id_t a_cel_id); ssize_t dap_chain_atom_save(dap_chain_t *a_chain, const uint8_t *a_atom, size_t a_atom_size, dap_chain_cell_id_t a_cell_id); +void dap_chain_add_mempool_notify_callback(dap_chain_t *a_chain, dap_global_db_obj_callback_notify_t a_callback, void *a_cb_arg); diff --git a/modules/chain/include/dap_chain_pvt.h b/modules/chain/include/dap_chain_pvt.h index 4af990d5fc..6e50793adb 100644 --- a/modules/chain/include/dap_chain_pvt.h +++ b/modules/chain/include/dap_chain_pvt.h @@ -26,12 +26,9 @@ #include <stdint.h> #include "dap_common.h" #include "dap_chain.h" - #include "dap_chain_cs.h" #include "dap_chain_cell.h" - - /** * @struct dap_chain_pvt * @brief Internal blochain data, mostly aggregated @@ -43,6 +40,7 @@ typedef struct dap_chain_pvt char * file_storage_dir; char * cs_name; int celled; + dap_list_t *mempool_notifires; } dap_chain_pvt_t; #define DAP_CHAIN_PVT(a) ((dap_chain_pvt_t *) a->_pvt ) @@ -50,4 +48,3 @@ typedef struct dap_chain_pvt #define DAP_CHAIN_PVT_LOCAL(a) dap_chain_pvt_t * l_chain_pvt = DAP_CHAIN_PVT(a) #define DAP_CHAIN_PVT_LOCAL_NEW(a) dap_chain_pvt_t * l_chain_pvt = DAP_NEW_Z(dap_chain_pvt_t); a->_pvt = l_chain_pvt - diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index be041c9fcf..16cf0202ad 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -634,47 +634,24 @@ static void s_gdb_sync_tsd_worker_callback(dap_worker_t *a_worker, void *a_arg) * @param group_name * @return dap_chain_t* */ -dap_chain_t *dap_chain_get_chain_from_group_name(dap_chain_net_id_t net_id, const char *group_name) +dap_chain_t *dap_chain_get_chain_from_group_name(dap_chain_net_id_t a_net_id, const char *a_group_name) { - if (!group_name) - { + if (!a_group_name) { log_it(L_ERROR, "GDB group name is NULL "); return NULL; } - - dap_chain_net_t *l_net = dap_chain_net_by_id(net_id); - + dap_chain_net_t *l_net = dap_chain_net_by_id(a_net_id); if (!l_net) return false; - - dap_chain_t *l_chain; - - DL_FOREACH(l_net->pub.chains, l_chain) - { - char *s_chain_group_name = dap_chain_net_get_gdb_group_from_chain(l_chain); - - if (!strcmp(group_name,s_chain_group_name)) - { - DAP_DELETE(s_chain_group_name); - return l_chain; - } - DAP_DELETE(s_chain_group_name); - - // - // if we don't get GDB group name, we get it from mempool group - // - - s_chain_group_name = dap_chain_net_get_gdb_group_mempool(l_chain); - - if (!strcmp(group_name,s_chain_group_name)) - { - DAP_DELETE(s_chain_group_name); + dap_chain_t *l_chain = NULL; + DL_FOREACH(l_net->pub.chains, l_chain) { + char *l_chain_group_name = dap_chain_net_get_gdb_group_from_chain(l_chain); + if (!strcmp(a_group_name, l_chain_group_name)) { + DAP_DELETE(l_chain_group_name); return l_chain; } - - DAP_DELETE(s_chain_group_name); - } - + DAP_DELETE(l_chain_group_name); + } return NULL; } diff --git a/modules/channel/chain/include/dap_stream_ch_chain.h b/modules/channel/chain/include/dap_stream_ch_chain.h index 82dc678168..a4600374ba 100644 --- a/modules/channel/chain/include/dap_stream_ch_chain.h +++ b/modules/channel/chain/include/dap_stream_ch_chain.h @@ -92,5 +92,5 @@ void dap_stream_ch_chain_deinit(void); inline static uint8_t dap_stream_ch_chain_get_id(void) { return (uint8_t) 'C'; } void dap_stream_ch_chain_go_idle ( dap_stream_ch_chain_t * a_ch_chain); -dap_chain_t * dap_chain_get_chain_from_group_name(dap_chain_net_id_t net_id, const char *group_name); +dap_chain_t * dap_chain_get_chain_from_group_name(dap_chain_net_id_t a_net_id, const char *a_group_name); void dap_stream_ch_chain_create_sync_request_gdb(dap_stream_ch_chain_t * a_ch_chain, dap_chain_net_t * a_net); diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c index 610845e57b..ff89056db6 100644 --- a/modules/consensus/none/dap_chain_cs_none.c +++ b/modules/consensus/none/dap_chain_cs_none.c @@ -141,7 +141,6 @@ static void s_history_callback_notify(void * a_arg, const char a_op_code, const dap_chain_net_t *l_net = dap_chain_net_by_id( l_gdb->chain->net_id); log_it(L_DEBUG,"%s.%s: op_code='%c' group=\"%s\" key=\"%s\" value_size=%zu",l_net->pub.name, l_gdb->chain->name, a_op_code, a_group, a_key, a_value_size); - dap_chain_node_mempool_autoproc_notify((void *)l_net, a_op_code, a_group, a_key, a_value, a_value_size); dap_chain_net_sync_gdb_broadcast((void *)l_net, a_op_code, a_group, a_key, a_value, a_value_size); } } diff --git a/modules/global-db/dap_chain_global_db.c b/modules/global-db/dap_chain_global_db.c index f2ebde4d2e..e874bb9723 100644 --- a/modules/global-db/dap_chain_global_db.c +++ b/modules/global-db/dap_chain_global_db.c @@ -211,7 +211,7 @@ int dap_chain_global_db_init(dap_config_t * g_config) s_track_history = dap_config_get_item_bool_default(g_config, "resources", "dap_global_db_track_history", s_track_history); s_db_drvmode_async = dap_config_get_item_bool(g_config, "resources", "dap_global_db_drvmode_async"); - log_it(L_NOTICE,"DB Driver Async mode: %s", s_db_drvmode_async ? "ON": "Off"); + log_it(L_NOTICE,"DB Driver Async mode: %s", s_db_drvmode_async ? "ON": "OFF"); lock(); int res = dap_db_driver_init(l_driver_name, l_storage_path, s_db_drvmode_async); diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 04848913bb..602e6e6812 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -186,7 +186,7 @@ typedef struct dap_chain_net_pvt{ // General rwlock for structure pthread_rwlock_t rwlock; - dap_list_t *notify_callbacks; + dap_list_t *gdb_notifiers; } dap_chain_net_pvt_t; typedef struct dap_chain_net_item{ @@ -388,12 +388,14 @@ dap_chain_net_state_t dap_chain_net_get_target_state(dap_chain_net_t *a_net) * * @param a_callback dap_global_db_obj_callback_notify_t callback function */ -void dap_chain_net_add_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback) +void dap_chain_net_add_gdb_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback, void *a_cb_arg) { - PVT(a_net)->notify_callbacks = dap_list_append(PVT(a_net)->notify_callbacks, a_callback); + dap_chain_gdb_notifier_t *l_notifier = DAP_NEW(dap_chain_gdb_notifier_t); + l_notifier->callback = a_callback; + l_notifier->cb_arg = a_cb_arg; + PVT(a_net)->gdb_notifiers = dap_list_append(PVT(a_net)->gdb_notifiers, l_notifier); } - /** * @brief if current network in ONLINE state send to all connected node * executes, when you add data to gdb chain (class=gdb in chain config) @@ -434,14 +436,6 @@ void dap_chain_net_sync_gdb_broadcast(void *a_arg, const char a_op_code, const c dap_store_obj_pkt_t *l_data_out = dap_store_packet_single(l_obj); dap_store_obj_free(l_obj, 1); dap_chain_t *l_chain = dap_chain_get_chain_from_group_name(l_net->pub.id, a_group); - - if (!l_chain) - { - log_it(L_WARNING, "chain object is not found for group %s", a_group); - DAP_DELETE(l_data_out); - return; - } - dap_chain_id_t l_chain_id = l_chain ? l_chain->id : (dap_chain_id_t) {}; dap_chain_cell_id_t l_cell_id = l_chain ? l_chain->cells->id : (dap_chain_cell_id_t){}; pthread_rwlock_rdlock(&PVT(l_net)->rwlock); @@ -478,10 +472,31 @@ static void s_gbd_history_callback_notify(void *a_arg, const char a_op_code, con return; } dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg; - for (dap_list_t *it = PVT(l_net)->notify_callbacks; it; it = it->next) { - dap_global_db_obj_callback_notify_t l_callback = (dap_global_db_obj_callback_notify_t)it->data; + for (dap_list_t *it = PVT(l_net)->gdb_notifiers; it; it = it->next) { + dap_chain_gdb_notifier_t *el = (dap_chain_gdb_notifier_t *)it->data; + if (!el) + continue; + dap_global_db_obj_callback_notify_t l_callback = el->callback; if (l_callback) - l_callback(a_arg, a_op_code, a_group, a_key, a_value, a_value_len); + l_callback(el->cb_arg, a_op_code, a_group, a_key, a_value, a_value_len); + } + dap_chain_t *l_chain; + DL_FOREACH(l_net->pub.chains, l_chain) { + if (!l_chain) { + continue; + } + char *l_gdb_group_str = dap_chain_net_get_gdb_group_mempool(l_chain); + if (!strcmp(a_group, l_gdb_group_str)) { + for (dap_list_t *it = DAP_CHAIN_PVT(l_chain)->mempool_notifires; it; it = it->next) { + dap_chain_gdb_notifier_t *el = (dap_chain_gdb_notifier_t *)it->data; + if (!el) + continue; + dap_global_db_obj_callback_notify_t l_callback = el->callback; + if (l_callback) + l_callback(el->cb_arg, a_op_code, a_group, a_key, a_value, a_value_len); + } + } + DAP_DELETE(l_gdb_group_str); } } @@ -2476,7 +2491,7 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx) // reload ledger cache at once s_chain_net_reload_ledger_cache_once(l_net); - dap_chain_net_add_notify_callback(l_net, dap_chain_net_sync_gdb_broadcast); + dap_chain_net_add_gdb_notify_callback(l_net, dap_chain_net_sync_gdb_broadcast, l_net); if (l_target_state != l_net_pvt->state_target) dap_chain_net_state_go_to(l_net, l_target_state); @@ -2785,7 +2800,6 @@ bool dap_chain_net_get_flag_sync_from_zero( dap_chain_net_t * a_net) */ void dap_chain_net_proc_mempool (dap_chain_net_t * a_net) { - dap_string_t * l_str_tmp = dap_string_new(NULL); dap_chain_t *l_chain; DL_FOREACH(a_net->pub.chains, l_chain) { diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index 4d42872cab..de32cd4f0e 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -234,6 +234,22 @@ int dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_da return (int)a_chain->callback_add_datums(a_chain, &a_datum, 1); } +static void s_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_code, const char *a_group, + const char *a_key, const void *a_value, const size_t a_value_len) +{ + UNUSED(a_value_len); + if (!a_arg || !a_value || a_op_code != 'a') { + return; + } + dap_chain_t *l_chain =(dap_chain_t *)a_arg; + dap_chain_net_t *l_net = dap_chain_net_by_id(l_chain->net_id); + if (!l_net->pub.mempool_autoproc) + return; + dap_chain_datum_t *l_datum = (dap_chain_datum_t *)a_value; + if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) { + dap_chain_global_db_gr_del(a_key, a_group); + } +} /** * @brief @@ -285,8 +301,8 @@ bool dap_chain_node_mempool_autoproc_init() dap_chain_global_db_objs_delete(l_objs, l_objs_size); } DAP_DELETE(l_gdb_group_mempool); + dap_chain_add_mempool_notify_callback(l_chain, s_chain_node_mempool_autoproc_notify, l_chain); } - dap_chain_net_add_notify_callback(l_net_list[i], dap_chain_node_mempool_autoproc_notify); } } DAP_DELETE(l_net_list); @@ -299,29 +315,3 @@ bool dap_chain_node_mempool_autoproc_init() void dap_chain_node_mempool_autoproc_deinit() { } - -void dap_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_code, const char *a_group, - const char *a_key, const void *a_value, const size_t a_value_len) -{ - UNUSED(a_value_len); - if (!a_arg || !a_value || a_op_code != 'a') { - return; - } - dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg; - if (!l_net->pub.mempool_autoproc) - return; - dap_chain_t *l_chain; - DL_FOREACH(l_net->pub.chains, l_chain) { - if (!l_chain) { - continue; - } - char *l_gdb_group_str = dap_chain_net_get_gdb_group_mempool(l_chain); - if (!strcmp(a_group, l_gdb_group_str)) { - dap_chain_datum_t *l_datum = (dap_chain_datum_t *)a_value; - if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) { - dap_chain_global_db_gr_del( a_key, l_gdb_group_str); - } - } - DAP_DELETE(l_gdb_group_str); - } -} diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 07468926d7..8de81bd720 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -83,7 +83,6 @@ typedef struct dap_chain_net{ uint8_t pvt[]; } dap_chain_net_t; - int dap_chain_net_init(void); void dap_chain_net_deinit(void); @@ -185,7 +184,7 @@ bool dap_chain_net_get_add_gdb_group(dap_chain_net_t *a_net, dap_chain_node_addr int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t * a_datum ); void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, const char *a_hash_out_type); -void dap_chain_net_add_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback); +void dap_chain_net_add_gdb_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback, void *a_cb_arg); void dap_chain_net_sync_gdb_broadcast(void *a_arg, const char a_op_code, const char *a_group, const char *a_key, const void *a_value, const size_t a_value_len); diff --git a/modules/net/include/dap_chain_node.h b/modules/net/include/dap_chain_node.h index 447527b6a5..8b5c36720c 100644 --- a/modules/net/include/dap_chain_node.h +++ b/modules/net/include/dap_chain_node.h @@ -147,6 +147,3 @@ inline static char* dap_chain_node_addr_to_hash_str(dap_chain_node_addr_t *addre int dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_datum); bool dap_chain_node_mempool_autoproc_init(); void dap_chain_node_mempool_autoproc_deinit(); -void dap_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_code, const char *a_group, - const char *a_key, const void *a_value, const size_t a_value_len); - diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c index ff03823de2..79ddfab3f4 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -59,7 +59,9 @@ char *s_server_continents[]={ struct dap_order_notify { dap_chain_net_t *net; dap_global_db_obj_callback_notify_t callback; + void *cb_arg; }; + static dap_list_t *s_order_notify_callbacks = NULL; static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const char *a_group, const char *a_key, const void *a_value, const size_t a_value_len); @@ -73,7 +75,7 @@ int dap_chain_net_srv_order_init(void) uint16_t l_net_count; dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count); for (uint16_t i = 0; i < l_net_count; i++) { - dap_chain_net_add_notify_callback(l_net_list[i], s_srv_order_callback_notify); + dap_chain_net_add_gdb_notify_callback(l_net_list[i], s_srv_order_callback_notify, l_net_list[i]); } //geoip_info_t *l_ipinfo = chain_net_geoip_get_ip_info("8.8.8.8"); return 0; @@ -583,17 +585,20 @@ static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const struct dap_order_notify *l_notifier = (struct dap_order_notify *)it->data; if ((l_notifier->net == NULL || l_notifier->net == l_net) && l_notifier->callback) { - l_notifier->callback(a_arg, a_op_code, a_group, a_key, a_value, a_value_len); + l_notifier->callback(l_notifier->cb_arg, a_op_code, a_group, + a_key, a_value, a_value_len); } } - if (a_value && a_op_code != 'a' && dap_config_get_item_bool_default(g_config, "srv", "order_signed_only", false)) { + if (a_value && a_op_code == DAP_DB$K_OPTYPE_ADD && + dap_config_get_item_bool_default(g_config, "srv", "order_signed_only", false)) { dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)a_value; if (l_order->version != 2) { dap_chain_global_db_gr_del( a_key, a_group); } else { dap_sign_t *l_sign = (dap_sign_t *)&l_order->ext_n_sign[l_order->ext_size]; if (!dap_sign_verify_size(l_sign, a_value_len) || - dap_sign_verify(l_sign, l_order, sizeof(dap_chain_net_srv_order_t) + l_order->ext_size) != 1) { + dap_sign_verify(l_sign, l_order, + sizeof(dap_chain_net_srv_order_t) + l_order->ext_size) != 1) { dap_chain_global_db_gr_del( a_key, a_group); DAP_DELETE(l_gdb_group_str); return; @@ -617,10 +622,11 @@ static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const DAP_DELETE(l_gdb_group_str); } -void dap_chain_net_srv_order_add_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback) +void dap_chain_net_srv_order_add_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback, void *a_cb_arg) { struct dap_order_notify *l_notifier = DAP_NEW(struct dap_order_notify); l_notifier->net = a_net; l_notifier->callback = a_callback; + l_notifier->cb_arg = a_cb_arg; s_order_notify_callbacks = dap_list_append(s_order_notify_callbacks, l_notifier); } diff --git a/modules/net/srv/include/dap_chain_net_srv_order.h b/modules/net/srv/include/dap_chain_net_srv_order.h index 64ba42eff1..4c959be7e9 100644 --- a/modules/net/srv/include/dap_chain_net_srv_order.h +++ b/modules/net/srv/include/dap_chain_net_srv_order.h @@ -148,7 +148,7 @@ dap_chain_net_srv_order_t *dap_chain_net_srv_order_compose( char *dap_chain_net_srv_order_save(dap_chain_net_t *a_net, dap_chain_net_srv_order_t *a_order); void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,dap_string_t * a_str_out, const char *a_hash_out_type); -void dap_chain_net_srv_order_add_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback); +void dap_chain_net_srv_order_add_notify_callback(dap_chain_net_t *a_net, dap_global_db_obj_callback_notify_t a_callback, void *a_cb_arg); /** * @brief dap_chain_net_srv_order_get_gdb_group_mempool * @param l_chain -- GitLab