From 71533e2874a59731ee9c248bb7477f13363c76f7 Mon Sep 17 00:00:00 2001 From: "P. Constantin" <papizh.konstantin@demlabs.net> Date: Thu, 20 Feb 2025 21:34:17 +0700 Subject: [PATCH 1/3] ... --- modules/net/dap_chain_ledger.c | 49 ++++++++++++++-------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index fefa910dec..dd80d57293 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -3464,7 +3464,6 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, if(a_tag) dap_ledger_deduct_tx_tag(a_ledger, a_tx, NULL, a_tag, a_action); bool l_tax_check = false; - // find all previous transactions for (dap_list_t *it = l_list_in; it; it = it->next) { dap_ledger_tx_bound_t *l_bound_item = DAP_NEW_Z(dap_ledger_tx_bound_t); @@ -3981,26 +3980,12 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, switch ( HASH_COUNT(l_values_from_prev_tx) ) { case 1: - l_value_cur = DAP_NEW_Z(dap_ledger_tokenizer_t); - if ( !l_value_cur ) { - log_it(L_CRITICAL, "%s", c_error_memory_alloc); - if ( l_list_bound_items ) - dap_list_free_full(l_list_bound_items, NULL); - HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) { - HASH_DEL(l_values_from_prev_tx, l_value_cur); - DAP_DELETE(l_value_cur); - } - return DAP_LEDGER_CHECK_NOT_ENOUGH_MEMORY; - } - dap_stpcpy(l_value_cur->token_ticker, l_token); - HASH_ADD_STR(l_values_from_cur_tx, token_ticker, l_value_cur); if (!l_main_ticker) l_main_ticker = l_value_cur->token_ticker; break; case 2: - case 3: - if (l_main_ticker) - break; + if (l_main_ticker) + break; HASH_FIND_STR(l_values_from_prev_tx, a_ledger->net->pub.native_ticker, l_value_cur); if (l_value_cur) { l_value_cur = l_value_cur->hh.next ? l_value_cur->hh.next : l_value_cur->hh.prev; @@ -4008,6 +3993,7 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, } break; default: + if (!l_main_ticker) { dap_list_free_full(l_list_bound_items, NULL); HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) { HASH_DEL(l_values_from_prev_tx, l_value_cur); @@ -4015,6 +4001,7 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, } return DAP_LEDGER_TX_CHECK_NO_MAIN_TICKER; } + } dap_chain_net_srv_stake_item_t *l_key_item = NULL; if (l_tax_check) { @@ -4136,19 +4123,23 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, // Check for transaction consistency (sum(ins) == sum(outs)) if ( !l_err_num && !s_check_hal(a_ledger, a_tx_hash) ) { - HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) { - HASH_FIND_STR(l_values_from_cur_tx, l_value_cur->token_ticker, l_res); - if (!l_res || !EQUAL_256(l_res->sum, l_value_cur->sum) ) { - if (s_debug_more) { - char *l_balance = dap_chain_balance_to_coins(l_res ? l_res->sum : uint256_0); - char *l_balance_cur = dap_chain_balance_to_coins(l_value_cur->sum); - log_it(L_ERROR, "Sum of values of out items from current tx (%s) is not equal outs from previous txs (%s) for token %s", - l_balance, l_balance_cur, l_value_cur->token_ticker); - DAP_DELETE(l_balance); - DAP_DELETE(l_balance_cur); + if (HASH_COUNT(l_values_from_prev_tx) != HASH_COUNT(l_values_from_cur_tx) ) { + l_err_num = DAP_LEDGER_TX_CHECK_SUM_INS_NOT_EQUAL_SUM_OUTS; + } else { + HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) { + HASH_FIND_STR(l_values_from_cur_tx, l_value_cur->token_ticker, l_res); + if (!l_res || !EQUAL_256(l_res->sum, l_value_cur->sum) ) { + if (s_debug_more) { + char *l_balance = dap_chain_balance_to_coins(l_res ? l_res->sum : uint256_0); + char *l_balance_cur = dap_chain_balance_to_coins(l_value_cur->sum); + log_it(L_ERROR, "Sum of values of out items from current tx (%s) is not equal outs from previous txs (%s) for token %s", + l_balance, l_balance_cur, l_value_cur->token_ticker); + DAP_DELETE(l_balance); + DAP_DELETE(l_balance_cur); + } + l_err_num = DAP_LEDGER_TX_CHECK_SUM_INS_NOT_EQUAL_SUM_OUTS; + break; } - l_err_num = DAP_LEDGER_TX_CHECK_SUM_INS_NOT_EQUAL_SUM_OUTS; - break; } } } -- GitLab From c37b96f5616d5189ca0a00f898039dba44837b3d Mon Sep 17 00:00:00 2001 From: "P. Constantin" <papizh.konstantin@demlabs.net> Date: Thu, 20 Feb 2025 23:04:42 +0700 Subject: [PATCH 2/3] ... --- modules/net/dap_chain_ledger.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index dd80d57293..d7c46592ba 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -3984,8 +3984,8 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, l_main_ticker = l_value_cur->token_ticker; break; case 2: - if (l_main_ticker) - break; + if (l_main_ticker) + break; HASH_FIND_STR(l_values_from_prev_tx, a_ledger->net->pub.native_ticker, l_value_cur); if (l_value_cur) { l_value_cur = l_value_cur->hh.next ? l_value_cur->hh.next : l_value_cur->hh.prev; @@ -3993,14 +3993,14 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, } break; default: - if (!l_main_ticker) { - dap_list_free_full(l_list_bound_items, NULL); - HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) { - HASH_DEL(l_values_from_prev_tx, l_value_cur); - DAP_DELETE(l_value_cur); + if (!l_main_ticker) { + dap_list_free_full(l_list_bound_items, NULL); + HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) { + HASH_DEL(l_values_from_prev_tx, l_value_cur); + DAP_DELETE(l_value_cur); + } + return DAP_LEDGER_TX_CHECK_NO_MAIN_TICKER; } - return DAP_LEDGER_TX_CHECK_NO_MAIN_TICKER; - } } dap_chain_net_srv_stake_item_t *l_key_item = NULL; -- GitLab From f73ae7b909e548de1d3a82c1af481ee2c9f48aeb Mon Sep 17 00:00:00 2001 From: "P. Constantin" <papizh.konstantin@demlabs.net> Date: Thu, 20 Feb 2025 23:10:32 +0700 Subject: [PATCH 3/3] ... --- modules/net/dap_chain_ledger.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index d7c46592ba..1a883dd8dd 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -4123,7 +4123,9 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, // Check for transaction consistency (sum(ins) == sum(outs)) if ( !l_err_num && !s_check_hal(a_ledger, a_tx_hash) ) { - if (HASH_COUNT(l_values_from_prev_tx) != HASH_COUNT(l_values_from_cur_tx) ) { + if ( HASH_COUNT(l_values_from_prev_tx) != HASH_COUNT(l_values_from_cur_tx) ) { + log_it(L_ERROR, "Token tickers IN and OUT mismatch: %u != %u", + HASH_COUNT(l_values_from_prev_tx), HASH_COUNT(l_values_from_cur_tx)); l_err_num = DAP_LEDGER_TX_CHECK_SUM_INS_NOT_EQUAL_SUM_OUTS; } else { HASH_ITER(hh, l_values_from_prev_tx, l_value_cur, l_tmp) { -- GitLab