From 3e029e7f0aabee24d39023832f0688596f985fc2 Mon Sep 17 00:00:00 2001
From: "alexey.stratulat" <alexey.stratulat@demlabs.net>
Date: Mon, 3 Jul 2023 12:48:25 +0000
Subject: [PATCH] Bugfix 9022

---
 .../stake/dap_chain_net_srv_stake_pos_delegate.c     | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 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 31f9fa3556..1e1794db2e 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
@@ -1730,11 +1730,10 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
 
             dap_hash_fast_t *l_final_tx_hash = NULL;
             if (l_tx_hash_str) {
-                dap_hash_fast_t l_tx_hash = {};
-                dap_chain_hash_fast_from_str(l_tx_hash_str, &l_tx_hash);
-                l_final_tx_hash = dap_chain_ledger_get_final_chain_tx_hash(l_net->pub.ledger, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE, &l_tx_hash);
-                if (!l_final_tx_hash) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s is not found or already used", l_tx_hash_str);
+                l_final_tx_hash = DAP_NEW(dap_hash_fast_t);
+                dap_chain_hash_fast_from_str(l_tx_hash_str, l_final_tx_hash);
+                if(!dap_chain_ledger_tx_find_by_hash(l_net->pub.ledger, l_final_tx_hash)) {
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s is not found.", l_tx_hash_str);
                     return -20;
                 }
             } else {
@@ -1773,6 +1772,9 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
                     return -18;
                 }
                 dap_chain_datum_tx_t *l_tx = s_stake_tx_invalidate(l_net, l_final_tx_hash, l_fee, dap_chain_wallet_get_key(l_wallet, 0));
+                if (l_tx_hash_str) {
+                    DAP_DELETE(l_final_tx_hash);
+                }
                 dap_chain_wallet_close(l_wallet);
                 char *l_decree_hash_str = NULL;
                 if (l_tx && (l_decree_hash_str = s_stake_tx_put(l_tx, l_net))) {
-- 
GitLab