diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index fefa910dec10c9a7fefe4ade5859c6dd3c4cf4cb..1a883dd8dd234777d93cd68e95586b140b31d11d 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,24 +3980,10 @@ 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;
         HASH_FIND_STR(l_values_from_prev_tx, a_ledger->net->pub.native_ticker, l_value_cur);
@@ -4008,12 +3993,14 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger,
         }
         break;
     default:
-        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;
@@ -4136,19 +4123,25 @@ 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) ) {
+            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) {
+                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;
             }
         }
     }