From cb190e9260167e1ac7cf8b4ea4c5c852e7b7c2a9 Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Mon, 17 Mar 2025 13:14:11 +0300 Subject: [PATCH] [*] Hardfork bugfixes --- .../consensus/esbocs/dap_chain_cs_esbocs.c | 2 +- modules/ledger/dap_chain_ledger_tx.c | 10 ++- modules/net/dap_chain_node.c | 63 +++++++++---------- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 8c81fb4807..745ff1db67 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -896,7 +896,7 @@ static dap_list_t *s_get_validators_list(dap_chain_esbocs_t *a_esbocs, dap_hash_ dap_chain_esbocs_pvt_t *l_esbocs_pvt = PVT(a_esbocs); dap_list_t *l_ret = NULL; dap_list_t *l_validators = NULL; - if (!l_esbocs_pvt->poa_mode) { + if (l_esbocs_pvt->poa_mode) { // UNDO it after debug if (a_excluded_list_size) { l_validators = dap_chain_net_srv_stake_get_validators(a_esbocs->chain->net_id, false, NULL); uint16_t l_excluded_num = *a_excluded_list; diff --git a/modules/ledger/dap_chain_ledger_tx.c b/modules/ledger/dap_chain_ledger_tx.c index 9e4accc59b..bb83939cd3 100644 --- a/modules/ledger/dap_chain_ledger_tx.c +++ b/modules/ledger/dap_chain_ledger_tx.c @@ -266,6 +266,10 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, return DAP_LEDGER_TX_CHECK_FOR_REMOVING_CANT_FIND_TX; } } + + if (a_ledger->is_hardfork_state) + return DAP_LEDGER_CHECK_OK; + /* * Steps of checking for current transaction tx2 and every previous transaction tx1: * 1. valid(tx2.dap_chain_datum_tx_sig.pkey) @@ -294,7 +298,7 @@ static int s_tx_cache_check(dap_ledger_t *a_ledger, int l_prev_tx_count = 0; // 1. Verify signature in current transaction - if (!a_from_threshold && !a_ledger->is_hardfork_state && dap_chain_datum_tx_verify_sign(a_tx, 0)) + if (!a_from_threshold && dap_chain_datum_tx_verify_sign(a_tx, 0)) return DAP_LEDGER_CHECK_NOT_ENOUGH_VALID_SIGNS; // ---------------------------------------------------------------- @@ -1264,6 +1268,10 @@ int dap_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ha if (a_ledger->is_hardfork_state) { TX_ITEM_ITER_TX(l_item, l_tx_item_size, a_tx) { + if (*l_item == TX_ITEM_TYPE_OUT_EXT || *l_item == TX_ITEM_TYPE_OUT_COND) { + l_list_tx_out = dap_list_append(l_list_tx_out, l_item); + continue; + } if (*l_item != TX_ITEM_TYPE_TSD) continue; dap_tsd_t *l_tsd = (dap_tsd_t *)((dap_chain_tx_tsd_t *)l_item)->tsd; diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index 538969e9a5..baf3f110d7 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -551,6 +551,27 @@ int dap_chain_node_hardfork_prepare(dap_chain_t *a_chain, dap_time_t a_last_bloc return 0; } +static int s_tx_trackers_add(dap_chain_datum_tx_t **a_tx, dap_list_t *a_trackers) +{ + for (dap_list_t *it = a_trackers; it; it = it->next) { + dap_ledger_tracker_t *l_tracker = it->data; + dap_chain_tx_tsd_t *l_tracker_hash_tsd = dap_chain_datum_tx_item_tsd_create(&l_tracker->voting_hash, DAP_CHAIN_DATUM_TX_TSD_TYPE_HARDFORK_VOTING_HASH, sizeof(dap_hash_fast_t)); + if (!l_tracker_hash_tsd) + return -1; + if (dap_chain_datum_tx_add_item(a_tx, l_tracker_hash_tsd) != 1) + return -2; + for (dap_ledger_tracker_item_t *l_item = l_tracker->items; l_item; l_item = l_item->next) { + dap_ledger_hardfork_tracker_t l_hardfork_tracker = { .pkey_hash = l_item->pkey_hash, .coloured_value = l_item->coloured_value }; + dap_chain_tx_tsd_t *l_tracker_tsd = dap_chain_datum_tx_item_tsd_create(&l_hardfork_tracker, DAP_CHAIN_DATUM_TX_TSD_TYPE_HARDFORK_TRACKER, sizeof(dap_ledger_hardfork_tracker_t)); + if (!l_tracker_tsd) + return -3; + if (dap_chain_datum_tx_add_item(a_tx, l_tracker_tsd) != 1) + return -4; + } + } + return 0; +} + dap_chain_datum_t *s_datum_tx_create(dap_chain_addr_t *a_addr, const char *a_ticker, uint256_t a_value, dap_list_t *a_trackers) { dap_chain_datum_tx_t *l_tx = dap_chain_datum_tx_create(); @@ -560,17 +581,9 @@ dap_chain_datum_t *s_datum_tx_create(dap_chain_addr_t *a_addr, const char *a_tic dap_chain_datum_tx_delete(l_tx); return NULL; } - for (dap_list_t *it = a_trackers; it; it = it->next) { - dap_ledger_tracker_t *l_tracker = it->data; - dap_chain_tx_tsd_t *l_tracker_tsd = dap_chain_datum_tx_item_tsd_create(l_tracker, DAP_CHAIN_DATUM_TX_TSD_TYPE_HARDFORK_TRACKER, sizeof(dap_ledger_tracker_t)); - if (!l_tracker_tsd) { - dap_chain_datum_tx_delete(l_tx); - return NULL; - } - if (dap_chain_datum_tx_add_item(&l_tx, l_tracker_tsd) != 1) { - dap_chain_datum_tx_delete(l_tx); - return NULL; - } + if (s_tx_trackers_add(&l_tx, a_trackers)) { + dap_chain_datum_tx_delete(l_tx); + return NULL; } dap_chain_datum_t *l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, dap_chain_datum_tx_get_size(l_tx)); dap_chain_datum_tx_delete(l_tx); @@ -608,29 +621,9 @@ dap_chain_datum_t *s_cond_tx_create(dap_chain_tx_out_cond_t *a_cond, dap_chain_t dap_chain_datum_tx_delete(l_tx); return NULL; } - for (dap_list_t *it = a_trackers; it; it = it->next) { - dap_ledger_tracker_t *l_tracker = it->data; - dap_chain_tx_tsd_t *l_tracker_hash_tsd = dap_chain_datum_tx_item_tsd_create(&l_tracker->voting_hash, DAP_CHAIN_DATUM_TX_TSD_TYPE_HARDFORK_VOTING_HASH, sizeof(dap_hash_fast_t)); - if (!l_tracker_hash_tsd) { - dap_chain_datum_tx_delete(l_tx); - return NULL; - } - if (dap_chain_datum_tx_add_item(&l_tx, l_tracker_hash_tsd) != 1) { - dap_chain_datum_tx_delete(l_tx); - return NULL; - } - for (dap_ledger_tracker_item_t *l_item = l_tracker->items; l_item; l_item = l_item->next) { - dap_ledger_hardfork_tracker_t l_hardfork_tracker = { .pkey_hash = l_item->pkey_hash, .coloured_value = l_item->coloured_value }; - dap_chain_tx_tsd_t *l_tracker_tsd = dap_chain_datum_tx_item_tsd_create(&l_hardfork_tracker, DAP_CHAIN_DATUM_TX_TSD_TYPE_HARDFORK_TRACKER, sizeof(dap_ledger_hardfork_tracker_t)); - if (!l_tracker_tsd) { - dap_chain_datum_tx_delete(l_tx); - return NULL; - } - if (dap_chain_datum_tx_add_item(&l_tx, l_tracker_tsd) != 1) { - dap_chain_datum_tx_delete(l_tx); - return NULL; - } - } + if (s_tx_trackers_add(&l_tx, a_trackers)) { + dap_chain_datum_tx_delete(l_tx); + return NULL; } dap_chain_datum_t *l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, dap_chain_datum_tx_get_size(l_tx)); dap_chain_datum_tx_delete(l_tx); @@ -980,7 +973,7 @@ int s_hardfork_check(dap_chain_t *a_chain, dap_chain_datum_t *a_datum, size_t a_ } break; case DAP_CHAIN_DATUM_TX_TSD_TYPE_HARDFORK_TRACKER: { if (l_tsd->size != sizeof(dap_ledger_hardfork_tracker_t)) { - log_it(L_WARNING, "Illegal harfork datum tx TSD VOTING_HASH size %u", l_tsd->size); + log_it(L_WARNING, "Illegal harfork datum tx TSD TRACKER size %u", l_tsd->size); m_ret_clear(-8); } if (!l_tracker_current) { -- GitLab