From 14a2be237d9c5ee71f1999e33de8da3d0230b90f Mon Sep 17 00:00:00 2001 From: Constantin P <papizh.konstantin@demlabs.net> Date: Wed, 12 Jul 2023 07:33:17 +0000 Subject: [PATCH] Hotfix 9183 --- modules/chain/dap_chain_ledger.c | 14 +++++++------- modules/chain/include/dap_chain_ledger.h | 10 +++++----- modules/net/dap_chain_net.c | 2 +- .../service/stake/dap_chain_net_srv_stake_lock.c | 9 +++++++++ 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index a204ac75b2..24e944eeee 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -80,7 +80,7 @@ static const char *s_ledger_tx_check_err_str[] = { [DAP_CHAIN_LEDGER_TX_CACHE_CHECK_INVALID_TX_SIGN] = "DAP_CHAIN_LEDGER_TX_CACHE_CHECK_INVALID_TX_SIGN", [DAP_CHAIN_LEDGER_TX_CACHE_IN_EMS_ALREADY_USED] = "DAP_CHAIN_LEDGER_TX_CACHE_IN_EMS_ALREADY_USED", [DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_IN_EMS_ALREADY_USED] = "DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_IN_EMS_ALREADY_USED", - [DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_EMISSION_NOT_FOUND] = "DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_EMISSION_NOT_FOUND", + [DAP_CHAIN_LEDGER_TX_CACHE_CHECK_EMISSION_NOT_FOUND] = "DAP_CHAIN_LEDGER_TX_CACHE_CHECK_EMISSION_NOT_FOUND", [DAP_CHAIN_LEDGER_TX_CACHE_CHECK_TX_NO_VALID_INPUTS] = "DAP_CHAIN_LEDGER_TX_CACHE_CHECK_TX_NO_VALID_INPUTS", [DAP_CHAIN_LEDGER_TX_CACHE_CHECK_TICKER_NOT_FOUND] = "DAP_CHAIN_LEDGER_TX_CACHE_CHECK_TICKER_NOT_FOUND", [DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_INVALID_TOKEN] = "DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_INVALID_TOKEN", @@ -126,9 +126,9 @@ static const char *s_ledger_token_decl_err_str[] = { [DAP_CHAIN_LEDGER_TOKEN_DECL_ADD_ERR_TOTAL_SIGNS_EXCEED_UNIQUE_SIGNS] = "DAP_CHAIN_LEDGER_TOKEN_DECL_ADD_ERR_TOTAL_SIGNS_EXCEED_UNIQUE_SIGNS" }; -char *dap_chain_ledger_tx_check_err_str(dap_chain_ledger_tx_check_t a_code) { +char *dap_chain_ledger_tx_check_err_str(int a_code) { return (a_code >= DAP_CHAIN_LEDGER_TX_CHECK_OK) && (a_code < DAP_CHAIN_LEDGER_TX_CHECK_UNKNOWN) - ? (char*)s_ledger_tx_check_err_str[a_code] + ? (char*)s_ledger_tx_check_err_str[(dap_chain_ledger_tx_check_t)a_code] : dap_itoa(a_code); } @@ -768,9 +768,9 @@ int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, dap_chain_datu return DAP_CHAIN_LEDGER_TOKEN_DECL_ADD_OK; } -char *dap_chain_ledger_token_decl_add_err_code_to_str(dap_chain_ledger_token_decl_add_err_t a_code) { +char *dap_chain_ledger_token_decl_add_err_code_to_str(int a_code) { return (a_code >= DAP_CHAIN_LEDGER_TOKEN_DECL_ADD_OK) && (a_code < DAP_CHAIN_LEDGER_TOKEN_DECL_ADD_UNKNOWN) - ? (char*)s_ledger_token_decl_err_str[a_code] + ? (char*)s_ledger_token_decl_err_str[(dap_chain_ledger_token_decl_add_err_t)a_code] : dap_itoa(a_code); } @@ -2920,9 +2920,9 @@ int dap_chain_ledger_token_emission_load(dap_ledger_t *a_ledger, byte_t *a_token return dap_chain_ledger_token_emission_add(a_ledger, a_token_emission, a_token_emission_size, a_token_emission_hash, false); } -char *dap_chain_ledger_token_emission_err_code_to_str(dap_chain_ledger_emission_err_code_t a_code) { +char *dap_chain_ledger_token_emission_err_code_to_str(int a_code) { return (a_code >= DAP_CHAIN_LEDGER_EMISSION_ADD_OK && a_code < DAP_CHAIN_LEDGER_EMISSION_ADD_UNKNOWN) - ? (char*)s_ledger_emission_add_err_str[a_code] + ? (char*)s_ledger_emission_add_err_str[(dap_chain_ledger_emission_err_code_t)a_code] : dap_itoa(a_code); } diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h index e07f544e7f..dd522a8189 100644 --- a/modules/chain/include/dap_chain_ledger.h +++ b/modules/chain/include/dap_chain_ledger.h @@ -54,7 +54,7 @@ typedef enum dap_chain_ledger_tx_check{ DAP_CHAIN_LEDGER_TX_CACHE_CHECK_INVALID_TX_SIGN, DAP_CHAIN_LEDGER_TX_CACHE_IN_EMS_ALREADY_USED, DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_IN_EMS_ALREADY_USED, - DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_EMISSION_NOT_FOUND, + DAP_CHAIN_LEDGER_TX_CACHE_CHECK_EMISSION_NOT_FOUND, DAP_CHAIN_LEDGER_TX_CACHE_CHECK_TX_NO_VALID_INPUTS, DAP_CHAIN_LEDGER_TX_CACHE_CHECK_TICKER_NOT_FOUND, DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_INVALID_TOKEN, @@ -132,7 +132,7 @@ typedef struct dap_chain_net dap_chain_net_t; // Error code for no previous transaction (for stay in mempool) #define DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS DAP_CHAIN_LEDGER_TX_CACHE_CHECK_PREV_TX_NOT_FOUND // Error code for no emission for a transaction (for stay in mempoold) -#define DAP_CHAIN_CS_VERIFY_CODE_TX_NO_EMISSION DAP_CHAIN_LEDGER_TX_CACHE_STAKE_LOCK_EMISSION_NOT_FOUND +#define DAP_CHAIN_CS_VERIFY_CODE_TX_NO_EMISSION DAP_CHAIN_LEDGER_TX_CACHE_CHECK_EMISSION_NOT_FOUND // Error code for no decree for anchor (for stay in mempool) #define DAP_CHAIN_CS_VERIFY_CODE_NO_DECREE -1113 @@ -188,7 +188,7 @@ int dap_chain_ledger_tx_load(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, int dap_chain_ledger_tx_add_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, size_t a_datum_size, dap_hash_fast_t *a_datum_hash); -char* dap_chain_ledger_tx_check_err_str(dap_chain_ledger_tx_check_t a_code); +char* dap_chain_ledger_tx_check_err_str(int a_code); /** * Print list transaction from ledger @@ -212,7 +212,7 @@ dap_chain_datum_token_t *dap_chain_ledger_token_ticker_check(dap_ledger_t * a_le int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size); int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size); int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size); -char *dap_chain_ledger_token_decl_add_err_code_to_str(dap_chain_ledger_token_decl_add_err_t a_code); +char *dap_chain_ledger_token_decl_add_err_code_to_str(int a_code); dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger); // Get all token-declarations @@ -232,7 +232,7 @@ dap_list_t * dap_chain_ledger_token_auth_pkeys_hashes(dap_ledger_t *a_ledger, co int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_emission, size_t a_token_emission_size, dap_hash_fast_t *a_emission_hash, bool a_from_threshold); int dap_chain_ledger_token_emission_load(dap_ledger_t *a_ledger, byte_t *a_token_emission, size_t a_token_emission_size, dap_hash_fast_t *a_token_emission_hash); -char *dap_chain_ledger_token_emission_err_code_to_str(dap_chain_ledger_emission_err_code_t a_code); +char *dap_chain_ledger_token_emission_err_code_to_str(int a_code); // Check if it addable int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_token_emission, size_t a_token_emission_size, dap_chain_hash_fast_t *a_emission_hash); diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 08a39c8fa1..ea4887d45b 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -3273,7 +3273,7 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke { const char l_path[] = "network/"; char l_cfg_path[strlen(a_net->pub.name) + strlen(l_path) + 1]; - dap_snprintf(l_cfg_path, sizeof(l_cfg_path) - 1, "%s%s", l_path, a_net->pub.name); + dap_snprintf(l_cfg_path, sizeof(l_cfg_path), "%s%s", l_path, a_net->pub.name); dap_config_t *l_cfg = dap_config_open(l_cfg_path); const char *l_auth_type = dap_config_get_item_str(l_cfg, "auth", "type"); bool l_authorized = true; diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c index 077330a82c..a31b7db254 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_lock.c +++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c @@ -931,6 +931,15 @@ static bool s_stake_lock_callback_verificator(dap_ledger_t *a_ledger, dap_chain_ if (dap_hash_fast_is_blank(&l_burning_tx_hash)) return false; l_burning_tx = dap_chain_ledger_tx_find_by_hash(a_ledger, &l_burning_tx_hash); + if (!l_burning_tx) { + char l_burning_tx_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE] = { '\0' }; + dap_hash_fast_to_str(&l_burning_tx_hash, l_burning_tx_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE); + char *l_take_tx_hash_str; + dap_get_data_hash_str_static(a_tx_in, dap_chain_datum_tx_get_size(a_tx_in), l_take_tx_hash_str); + log_it(L_ERROR, "[Legacy] Can't find burning tx with hash %s, obtained from the receipt of take tx %s", + l_burning_tx_hash_str, l_take_tx_hash_str); + return false; + } } else l_burning_tx = a_tx_in; -- GitLab