From 48b0ab2d3d026be77f9724358361f546071ca21d Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Mon, 15 Jan 2024 15:30:55 +0300 Subject: [PATCH] [+] Extended verificator errors logging --- .../dap_chain_net_srv_stake_pos_delegate.c | 47 ++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c index 389afd5aa3..260693dac4 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c @@ -169,28 +169,46 @@ static bool s_stake_verificator_callback(dap_ledger_t UNUSED_ARG *a_ledger, dap_ return true; int l_out_idx = 0; dap_chain_tx_out_cond_t *l_tx_out_cond = dap_chain_datum_tx_out_cond_get(a_tx_in, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE, &l_out_idx); - if (!l_tx_out_cond) + if (!l_tx_out_cond) { + log_it(L_ERROR, "Condition not found in conditional tx"); return false; - if (compare256(l_tx_out_cond->header.value, a_cond->header.value)) + } + if (compare256(l_tx_out_cond->header.value, a_cond->header.value)) { + char *l_in_value = dap_chain_balance_to_coins(l_tx_out_cond->header.value); + char *l_out_value = dap_chain_balance_to_coins(a_cond->header.value); + log_it(L_WARNING, "In value %s is not eqal to out value %s", l_in_value, l_out_value); + DAP_DELETE(l_in_value); + DAP_DELETE(l_out_value); return false; + } if (l_tx_out_cond->tsd_size != a_cond->tsd_size || - memcmp(l_tx_out_cond->tsd, a_cond->tsd, a_cond->tsd_size)) + memcmp(l_tx_out_cond->tsd, a_cond->tsd, a_cond->tsd_size)) { + log_it(L_WARNING, "Conditional out and conditional in have different TSD sections"); return false; + } if (dap_chain_addr_is_blank(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr) || - l_tx_out_cond->subtype.srv_stake_pos_delegate.signer_node_addr.uint64 == 0) + l_tx_out_cond->subtype.srv_stake_pos_delegate.signer_node_addr.uint64 == 0) { + log_it(L_WARNING, "Not blank address or key fields in order conditional tx"); return false; + } return true; } // It's a delegation conitional TX dap_chain_tx_in_cond_t *l_tx_in_cond = (dap_chain_tx_in_cond_t *)dap_chain_datum_tx_item_get(a_tx_in, 0, TX_ITEM_TYPE_IN_COND, 0); - if (!l_tx_in_cond) + if (!l_tx_in_cond) { + log_it(L_ERROR, "Conditional in item not found in checkimg tx"); return false; + } dap_hash_fast_t *l_prev_hash = &l_tx_in_cond->header.tx_prev_hash; - if (dap_hash_fast_is_blank(l_prev_hash)) + if (dap_hash_fast_is_blank(l_prev_hash)) { + log_it(L_ERROR, "Blank hash of prev tx in tx_in_cond"); return false; + } dap_chain_datum_tx_t *l_prev_tx = dap_ledger_tx_find_by_hash(a_ledger, l_prev_hash); - if (!l_prev_tx) + if (!l_prev_tx) { + log_it(L_ERROR, "Previous tx not found for now but is found in ledger before"); return false; + } bool l_owner = false; dap_chain_tx_in_cond_t *l_tx_prev_in_cond = (dap_chain_tx_in_cond_t *)dap_chain_datum_tx_item_get(l_prev_tx, 0, TX_ITEM_TYPE_IN_COND, 0); if (!l_tx_prev_in_cond) @@ -199,21 +217,28 @@ static bool s_stake_verificator_callback(dap_ledger_t UNUSED_ARG *a_ledger, dap_ dap_hash_fast_t *l_owner_tx_hash = &l_tx_prev_in_cond->header.tx_prev_hash; dap_chain_datum_tx_t *l_owner_tx = dap_ledger_tx_find_by_hash(a_ledger, l_owner_tx_hash); dap_sign_t *l_owner_sign = dap_chain_datum_tx_get_sign(l_owner_tx, 0); - if (!l_owner_sign) + if (!l_owner_sign) { + log_it(L_ERROR, "Can't get owner sign"); return false; + } dap_sign_t *l_taker_sign = dap_chain_datum_tx_get_sign(a_tx_in, 0); - if (!l_taker_sign) + if (!l_taker_sign) { + log_it(L_ERROR, "Can't get taker sign"); return false; l_owner = dap_sign_compare_pkeys(l_taker_sign, l_owner_sign); } - if (!l_owner) + if (!l_owner) { + log_it(L_WARNING, "Trying to spend conditional tx not by owner"); return false; + } if (a_tx_in->header.ts_created < 1705104000) // Jan 13 2024 00:00:00 GMT, old policy rules return true; dap_chain_net_srv_stake_item_t *l_stake; HASH_FIND(hh, s_srv_stake->tx_itemlist, l_prev_hash, sizeof(dap_hash_t), l_stake); - if (l_stake) // Key is active with delegation decree, need to revoke it first + if (l_stake) { + log_it(L_WARNING, "Key is active with delegation decree, need to revoke it first"); return false; + } return true; } -- GitLab