pub fn into_tx_graph(
self,
client: &Client,
- seen_at: Option<u64>,
missing: Vec<Txid>,
) -> Result<TxGraph<ConfirmationHeightAnchor>, Error> {
let new_txs = client.batch_transaction_get(&missing)?;
let mut graph = TxGraph::<ConfirmationHeightAnchor>::new(new_txs);
for (txid, anchors) in self.0 {
- if let Some(seen_at) = seen_at {
- let _ = graph.insert_seen_at(txid, seen_at);
- }
for anchor in anchors {
let _ = graph.insert_anchor(txid, anchor);
}
pub fn into_confirmation_time_tx_graph(
self,
client: &Client,
- seen_at: Option<u64>,
missing: Vec<Txid>,
) -> Result<TxGraph<ConfirmationTimeHeightAnchor>, Error> {
- let graph = self.into_tx_graph(client, seen_at, missing)?;
+ let graph = self.into_tx_graph(client, missing)?;
let relevant_heights = {
let mut visited_heights = HashSet::new();
} = client.sync(recv_chain.tip(), [spk_to_track], None, None, 5)?;
let missing = relevant_txids.missing_full_txs(recv_graph.graph());
- let graph_update = relevant_txids.into_confirmation_time_tx_graph(&client, None, missing)?;
+ let graph_update = relevant_txids.into_confirmation_time_tx_graph(&client, missing)?;
let _ = recv_chain
.apply_update(chain_update)
.map_err(|err| anyhow::anyhow!("LocalChain update error: {:?}", err))?;
} = client.sync(recv_chain.tip(), [spk_to_track.clone()], None, None, 5)?;
let missing = relevant_txids.missing_full_txs(recv_graph.graph());
- let graph_update = relevant_txids.into_confirmation_time_tx_graph(&client, None, missing)?;
+ let graph_update = relevant_txids.into_confirmation_time_tx_graph(&client, missing)?;
let _ = recv_chain
.apply_update(chain_update)
.map_err(|err| anyhow::anyhow!("LocalChain update error: {:?}", err))?;
} = client.sync(recv_chain.tip(), [spk_to_track.clone()], None, None, 5)?;
let missing = relevant_txids.missing_full_txs(recv_graph.graph());
- let graph_update =
- relevant_txids.into_confirmation_time_tx_graph(&client, None, missing)?;
+ let graph_update = relevant_txids.into_confirmation_time_tx_graph(&client, missing)?;
let _ = recv_chain
.apply_update(chain_update)
.map_err(|err| anyhow::anyhow!("LocalChain update error: {:?}", err))?;
relevant_txids.missing_full_txs(graph.graph())
};
+ let mut graph_update = relevant_txids.into_tx_graph(&client, missing_txids)?;
let now = std::time::UNIX_EPOCH
.elapsed()
.expect("must get time")
.as_secs();
-
- let graph_update = relevant_txids.into_tx_graph(&client, Some(now), missing_txids)?;
+ let _ = graph_update.update_last_seen_unconfirmed(now);
let db_changeset = {
let mut chain = chain.lock().unwrap();
// is reached. It returns a `TxGraph` update (`graph_update`) and a structure that
// represents the last active spk derivation indices of keychains
// (`keychain_indices_update`).
- let (graph_update, last_active_indices) = client
+ let (mut graph_update, last_active_indices) = client
.full_scan(keychain_spks, *stop_gap, scan_options.parallel_requests)
.context("scanning for transactions")?;
+ // We want to keep track of the latest time a transaction was seen unconfirmed.
+ let now = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs();
+ let _ = graph_update.update_last_seen_unconfirmed(now);
+
let mut graph = graph.lock().expect("mutex must not be poisoned");
// Because we did a stop gap based scan we are likely to have some updates to our
// deriviation indices. Usually before a scan you are on a fresh wallet with no
}
}
- let graph_update =
+ let mut graph_update =
client.sync(spks, txids, outpoints, scan_options.parallel_requests)?;
+ // Update last seen unconfirmed
+ let now = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs();
+ let _ = graph_update.update_last_seen_unconfirmed(now);
+
graph.lock().unwrap().apply_update(graph_update)
}
};
println!();
let missing = relevant_txids.missing_full_txs(wallet.as_ref());
- let graph_update = relevant_txids.into_confirmation_time_tx_graph(&client, None, missing)?;
+ let mut graph_update = relevant_txids.into_confirmation_time_tx_graph(&client, missing)?;
+ let now = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs();
+ let _ = graph_update.update_last_seen_unconfirmed(now);
let wallet_update = Update {
last_active_indices: keychain_update,
(k, k_spks)
})
.collect();
- let (update_graph, last_active_indices) = client
+ let (mut update_graph, last_active_indices) = client
.full_scan(keychain_spks, STOP_GAP, PARALLEL_REQUESTS)
.await?;
+
+ let now = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs();
+ let _ = update_graph.update_last_seen_unconfirmed(now);
let missing_heights = update_graph.missing_heights(wallet.local_chain());
let chain_update = client.update_local_chain(prev_tip, missing_heights).await?;
let update = Update {
})
.collect();
- let (update_graph, last_active_indices) =
+ let (mut update_graph, last_active_indices) =
client.full_scan(keychain_spks, STOP_GAP, PARALLEL_REQUESTS)?;
+
+ let now = std::time::UNIX_EPOCH.elapsed().unwrap().as_secs();
+ let _ = update_graph.update_last_seen_unconfirmed(now);
let missing_heights = update_graph.missing_heights(wallet.local_chain());
let chain_update = client.update_local_chain(prev_tip, missing_heights)?;
let update = Update {