diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h index 2b33563a07f87f5bf350c6f50abea57c95bc3faa..86aa6b97b08be5eb7eda5545542ee4a1d32f2bc9 100644 --- a/modules/chain/include/dap_chain_ledger.h +++ b/modules/chain/include/dap_chain_ledger.h @@ -55,7 +55,7 @@ typedef struct dap_chain_net dap_chain_net_t; // Check double spending in local cell #define DAP_CHAIN_LEDGER_CHECK_LOCAL_DS 0x0002 -// Check the double spending in all cells +// Check the double spending in all cells #define DAP_CHAIN_LEDGER_CHECK_CELLS_DS 0x0100 #define DAP_CHAIN_LEDGER_CACHE_ENABLED 0x0200 diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index b8a3f5c46fe5c483d7cff12af42ee1aef1fa72df..dca16fe7ba5e8bba495307716e91ca0a235f7227 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -217,16 +217,14 @@ typedef struct dap_chain_net_item{ dap_chain_net_id_t net_id; dap_chain_net_t * chain_net; UT_hash_handle hh; + UT_hash_handle hh2; } dap_chain_net_item_t; #define PVT(a) ( (dap_chain_net_pvt_t *) (void*) a->pvt ) #define PVT_S(a) ( (dap_chain_net_pvt_t *) (void*) a.pvt ) -static pthread_rwlock_t s_net_items_rwlock = PTHREAD_RWLOCK_INITIALIZER, - s_net_ids_rwlock = PTHREAD_RWLOCK_INITIALIZER; -static dap_chain_net_item_t *s_net_items = NULL, - *s_net_items_ids = NULL; - +static pthread_rwlock_t s_net_items_rwlock = PTHREAD_RWLOCK_INITIALIZER; +static dap_chain_net_item_t *s_net_items = NULL, *s_net_ids = NULL; static const char * c_net_states[]={ [NET_STATE_OFFLINE] = "NET_STATE_OFFLINE", @@ -2237,35 +2235,26 @@ int s_net_init(const char * a_net_name, uint16_t a_acl_idx) // Add network to the list dap_chain_net_item_t * l_net_item = DAP_NEW_Z( dap_chain_net_item_t); - dap_chain_net_item_t * l_net_item2 = DAP_NEW_Z( dap_chain_net_item_t); snprintf(l_net_item->name,sizeof (l_net_item->name),"%s" ,dap_config_get_item_str(l_cfg , "general" , "name" )); l_net_item->chain_net = l_net; l_net_item->net_id.uint64 = l_net->pub.id.uint64; pthread_rwlock_wrlock(&s_net_items_rwlock); HASH_ADD_STR(s_net_items,name,l_net_item); + HASH_ADD(hh2, s_net_ids, net_id, sizeof(l_net_item->net_id), l_net_item); pthread_rwlock_unlock(&s_net_items_rwlock); - memcpy( l_net_item2,l_net_item,sizeof (*l_net_item)); - pthread_rwlock_wrlock(&s_net_ids_rwlock); - HASH_ADD(hh,s_net_items_ids,net_id,sizeof ( l_net_item2->net_id),l_net_item2); - pthread_rwlock_unlock(&s_net_ids_rwlock); - // LEDGER model uint16_t l_ledger_flags = 0; switch ( PVT( l_net )->node_role.enums ) { - case NODE_ROLE_ROOT_MASTER: - case NODE_ROLE_ROOT: - case NODE_ROLE_ARCHIVE: - case NODE_ROLE_MASTER: - l_ledger_flags |= DAP_CHAIN_LEDGER_CHECK_CELLS_DS; - case NODE_ROLE_CELL_MASTER: - l_ledger_flags |= DAP_CHAIN_LEDGER_CHECK_TOKEN_EMISSION; - case NODE_ROLE_FULL: - case NODE_ROLE_LIGHT: - l_ledger_flags |= DAP_CHAIN_LEDGER_CHECK_LOCAL_DS; - if (dap_config_get_item_bool_default(g_config, "ledger", "cache_enabled", true)) - l_ledger_flags |= DAP_CHAIN_LEDGER_CACHE_ENABLED; + case NODE_ROLE_LIGHT: + break; + case NODE_ROLE_FULL: + l_ledger_flags |= DAP_CHAIN_LEDGER_CHECK_LOCAL_DS | DAP_CHAIN_LEDGER_CHECK_TOKEN_EMISSION; + if (dap_config_get_item_bool_default(g_config, "ledger", "cache_enabled", true)) + l_ledger_flags |= DAP_CHAIN_LEDGER_CACHE_ENABLED; + default: + l_ledger_flags |= DAP_CHAIN_LEDGER_CHECK_CELLS_DS; } // init LEDGER model l_net->pub.ledger = dap_chain_ledger_create(l_ledger_flags, l_net->pub.name, l_net->pub.native_ticker); @@ -2819,9 +2808,9 @@ dap_ledger_t * dap_chain_ledger_by_net_name( const char * a_net_name) dap_chain_net_t * dap_chain_net_by_id( dap_chain_net_id_t a_id) { dap_chain_net_item_t * l_net_item = NULL; - pthread_rwlock_rdlock(&s_net_ids_rwlock); - HASH_FIND(hh,s_net_items_ids,&a_id,sizeof (a_id), l_net_item ); - pthread_rwlock_unlock(&s_net_ids_rwlock); + pthread_rwlock_rdlock(&s_net_items_rwlock); + HASH_FIND(hh2, s_net_ids, &a_id, sizeof(a_id), l_net_item); + pthread_rwlock_unlock(&s_net_items_rwlock); return l_net_item ? l_net_item->chain_net : NULL; } diff --git a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c index 05e180e58d76f64652bfc9179786395056d451a6..d7d576969a9452716cca98e295586330cb4fe7c7 100644 --- a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c +++ b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c @@ -317,9 +317,9 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da if (dap_strlen(l_time_staking_str) != 6) return TIME_ERROR; - char l_time_staking_day_str[2] = {l_time_staking_str[4], l_time_staking_str[5]}; + char l_time_staking_day_str[3] = {l_time_staking_str[4], l_time_staking_str[5], 0}; int l_time_staking_day = atoi(l_time_staking_day_str); - char l_time_staking_month_str[2] = {l_time_staking_str[2], l_time_staking_str[3]}; + char l_time_staking_month_str[3] = {l_time_staking_str[2], l_time_staking_str[3], 0}; int l_time_staking_month = atoi(l_time_staking_month_str); if (l_time_staking_month < 1 || l_time_staking_month > 12)