aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet2.cpp
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-06-17 23:21:27 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-08-28 21:28:49 +0100
commitacbe06d8e931c2a35bd37e0a5d41159ce3ab5da9 (patch)
tree126fd9e6e4b266332ad71d790c2204927f103286 /src/wallet/wallet2.cpp
parentwallet: reset output spent status on blockchain reorg (diff)
downloadmonero-acbe06d8e931c2a35bd37e0a5d41159ce3ab5da9.tar.xz
wallet: update spent status when an accepted tx disappears
Diffstat (limited to 'src/wallet/wallet2.cpp')
-rw-r--r--src/wallet/wallet2.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 55106fa98..59472e648 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -884,6 +884,25 @@ void wallet2::update_pool_state()
{
LOG_PRINT_L1("Pending txid " << txid << " not in pool, marking as failed");
pit->second.m_state = wallet2::unconfirmed_transfer_details::failed;
+
+ // the inputs aren't spent anymore, since the tx failed
+ for (size_t vini = 0; vini < pit->second.m_tx.vin.size(); ++vini)
+ {
+ if (pit->second.m_tx.vin[vini].type() == typeid(txin_to_key))
+ {
+ txin_to_key &tx_in_to_key = boost::get<txin_to_key>(pit->second.m_tx.vin[vini]);
+ for (auto &td: m_transfers)
+ {
+ if (td.m_key_image == tx_in_to_key.k_image)
+ {
+ LOG_PRINT_L1("Resetting spent status for output " << vini << ": " << td.m_key_image);
+ td.m_spent = 0;
+ td.m_spent_height = 0;
+ break;
+ }
+ }
+ }
+ }
}
}
}