zcash_client_sqlite: Ensure we will query for status of unmined transactions in `store_decrypted_tx`

This commit is contained in:
Kris Nuttycombe 2024-08-16 14:24:15 -06:00
parent 3089e3b29d
commit 4059bfeca2
1 changed files with 14 additions and 21 deletions

View File

@ -1202,14 +1202,6 @@ impl<P: consensus::Parameters> WalletWrite for WalletDb<rusqlite::Connection, P>
#[cfg(feature = "transparent-inputs")] #[cfg(feature = "transparent-inputs")]
let mut tx_has_wallet_outputs = false; let mut tx_has_wallet_outputs = false;
#[cfg(feature = "transparent-inputs")]
let detectable_via_scanning = d_tx.tx().sapling_bundle().is_some();
#[cfg(all(feature = "transparent-inputs", feature = "orchard"))]
let detectable_via_scanning = detectable_via_scanning | d_tx.tx().orchard_bundle().is_some();
#[cfg(feature = "transparent-inputs")]
let mut queue_status_retrieval = false;
for output in d_tx.sapling_outputs() { for output in d_tx.sapling_outputs() {
#[cfg(feature = "transparent-inputs")] #[cfg(feature = "transparent-inputs")]
{ {
@ -1507,13 +1499,6 @@ impl<P: consensus::Parameters> WalletWrite for WalletDb<rusqlite::Connection, P>
{ {
tx_has_wallet_outputs = true; tx_has_wallet_outputs = true;
} }
// If the decrypted transaction is unmined and has no shielded
// components, add it to the queue for status retrieval.
#[cfg(feature = "transparent-inputs")]
if d_tx.mined_height().is_none() && !detectable_via_scanning {
queue_status_retrieval = true;
}
} }
} else { } else {
warn!( warn!(
@ -1543,14 +1528,22 @@ impl<P: consensus::Parameters> WalletWrite for WalletDb<rusqlite::Connection, P>
notify_tx_retrieved(wdb.conn.0, d_tx.tx().txid())?; notify_tx_retrieved(wdb.conn.0, d_tx.tx().txid())?;
// If the decrypted transaction is unmined and has no shielded components, add it to
// the queue for status retrieval.
#[cfg(feature = "transparent-inputs")] #[cfg(feature = "transparent-inputs")]
if queue_status_retrieval { {
let detectable_via_scanning = d_tx.tx().sapling_bundle().is_some();
#[cfg(feature = "orchard")]
let detectable_via_scanning = detectable_via_scanning | d_tx.tx().orchard_bundle().is_some();
if d_tx.mined_height().is_none() && !detectable_via_scanning {
wallet::queue_tx_retrieval( wallet::queue_tx_retrieval(
wdb.conn.0, wdb.conn.0,
std::iter::once(d_tx.tx().txid()), std::iter::once(d_tx.tx().txid()),
None None
)?; )?;
} }
}
Ok(()) Ok(())
}) })