diff --git a/servers/tests/framework/mod.rs b/servers/tests/framework/mod.rs
index f38fa3639..470f0097d 100644
--- a/servers/tests/framework/mod.rs
+++ b/servers/tests/framework/mod.rs
@@ -314,7 +314,7 @@ impl LocalServerContainer {
wallet.keychain = Some(keychain);
let parent_id = keychain::ExtKeychain::derive_key_id(2, 0, 0, 0, 0);
let _ = wallet::libwallet::internal::updater::refresh_outputs(&mut wallet, &parent_id);
- wallet::libwallet::internal::updater::retrieve_info(&mut wallet, &parent_id).unwrap()
+ wallet::libwallet::internal::updater::retrieve_info(&mut wallet, &parent_id, 1).unwrap()
}
pub fn send_amount_to(
diff --git a/servers/tests/simulnet.rs b/servers/tests/simulnet.rs
index 6406d5ebe..785a16a93 100644
--- a/servers/tests/simulnet.rs
+++ b/servers/tests/simulnet.rs
@@ -984,7 +984,7 @@ fn replicate_tx_fluff_failure() {
let wallet2 = create_wallet("target/tmp/tx_fluff/wallet2", client2.clone());
wallet::controller::owner_single_use(wallet2, |api| {
- let res = api.retrieve_summary_info(true).unwrap();
+ let res = api.retrieve_summary_info(true, 1).unwrap();
assert_eq!(res.1.amount_currently_spendable, amount);
Ok(())
}).unwrap();
diff --git a/src/bin/cmd/wallet.rs b/src/bin/cmd/wallet.rs
index 0d3fc1849..9696ecee0 100644
--- a/src/bin/cmd/wallet.rs
+++ b/src/bin/cmd/wallet.rs
@@ -15,7 +15,6 @@
use clap::ArgMatches;
use std::collections::HashMap;
use std::path::{Path, PathBuf};
-/// Wallet commands processing
use std::thread;
use std::time::Duration;
@@ -433,13 +432,27 @@ pub fn wallet_command(wallet_args: &ArgMatches, config: GlobalWalletConfig) -> i
});
Ok(())
}
- ("info", Some(_)) => {
- let (validated, wallet_info) = api.retrieve_summary_info(true).map_err(|e| {
- ErrorKind::GenericError(format!(
- "Error getting wallet info: {:?} Config: {:?}",
- e, wallet_config
- ))
- })?;
+ ("info", Some(args)) => {
+ let minimum_confirmations: u64 = args
+ .value_of("minimum_confirmations")
+ .ok_or_else(|| {
+ ErrorKind::GenericError("Minimum confirmations required".to_string())
+ }).and_then(|v| {
+ v.parse().map_err(|e| {
+ ErrorKind::GenericError(format!(
+ "Could not parse minimum_confirmations as a whole number. e={:?}",
+ e
+ ))
+ })
+ })?;
+ let (validated, wallet_info) = api
+ .retrieve_summary_info(true, minimum_confirmations)
+ .map_err(|e| {
+ ErrorKind::GenericError(format!(
+ "Error getting wallet info: {:?} Config: {:?}",
+ e, wallet_config
+ ))
+ })?;
display::info(
account,
&wallet_info,
diff --git a/src/bin/grin.rs b/src/bin/grin.rs
index 704fda17d..cbc39a082 100644
--- a/src/bin/grin.rs
+++ b/src/bin/grin.rs
@@ -216,7 +216,7 @@ fn real_main() -> i32 {
.help("Minimum number of confirmations required for an output to be spendable.")
.short("c")
.long("min_conf")
- .default_value("1")
+ .default_value("10")
.takes_value(true))
.arg(Arg::with_name("selection_strategy")
.help("Coin/Output selection strategy.")
@@ -284,7 +284,7 @@ fn real_main() -> i32 {
.help("Minimum number of confirmations required for an output to be spendable.")
.short("c")
.long("min_conf")
- .default_value("1")
+ .default_value("10")
.takes_value(true)))
.subcommand(SubCommand::with_name("outputs")
@@ -329,7 +329,13 @@ fn real_main() -> i32 {
.takes_value(true)))
.subcommand(SubCommand::with_name("info")
- .about("basic wallet contents summary"))
+ .about("basic wallet contents summary")
+ .arg(Arg::with_name("minimum_confirmations")
+ .help("Minimum number of confirmations required for an output to be spendable.")
+ .short("c")
+ .long("min_conf")
+ .default_value("10")
+ .takes_value(true)))
.subcommand(SubCommand::with_name("init")
.about("Initialize a new wallet seed file and database.")
diff --git a/wallet/src/controller.rs b/wallet/src/controller.rs
index 30e53a400..5c783e052 100644
--- a/wallet/src/controller.rs
+++ b/wallet/src/controller.rs
@@ -188,8 +188,8 @@ where
show_spent = true;
}
if let Some(ids) = params.get("tx_id") {
- for i in ids {
- id = Some(i.parse().unwrap());
+ if let Some(x) = ids.first() {
+ id = Some(x.parse().unwrap());
}
}
api.retrieve_outputs(show_spent, update_from_node, id)
@@ -210,13 +210,13 @@ where
update_from_node = true;
}
if let Some(ids) = params.get("id") {
- for i in ids {
- tx_id = Some(i.parse().unwrap());
+ if let Some(x) = ids.first() {
+ tx_id = Some(x.parse().unwrap());
}
}
if let Some(tx_slate_ids) = params.get("tx_id") {
- for i in tx_slate_ids {
- tx_slate_id = Some(i.parse().unwrap());
+ if let Some(x) = tx_slate_ids.first() {
+ tx_slate_id = Some(x.parse().unwrap());
}
}
api.retrieve_txs(update_from_node, tx_id, tx_slate_id)
@@ -256,8 +256,17 @@ where
req: &Request
,
mut api: APIOwner,
) -> Result<(bool, WalletInfo), Error> {
- let update_from_node = param_exists(req, "refresh");
- api.retrieve_summary_info(update_from_node)
+ let mut minimum_confirmations = 1; // TODO - default needed here
+ let params = parse_params(req);
+ let update_from_node = params.get("refresh").is_some();
+
+ if let Some(confs) = params.get("minimum_confirmations") {
+ if let Some(x) = confs.first() {
+ minimum_confirmations = x.parse().unwrap();
+ }
+ }
+
+ api.retrieve_summary_info(update_from_node, minimum_confirmations)
}
fn node_height(
@@ -660,10 +669,6 @@ fn parse_params(req: &Request) -> HashMap> {
}
}
-fn param_exists(req: &Request, param: &str) -> bool {
- parse_params(req).get(param).is_some()
-}
-
fn parse_body(req: Request) -> Box + Send>
where
for<'de> T: Deserialize<'de> + Send + 'static,
diff --git a/wallet/src/display.rs b/wallet/src/display.rs
index 1f7c52dfc..63f2bf5ff 100644
--- a/wallet/src/display.rs
+++ b/wallet/src/display.rs
@@ -13,6 +13,7 @@
// limitations under the License.
use core::core::{self, amount_to_hr_string};
+use core::global;
use libwallet::types::{AcctPathMapping, OutputData, OutputStatus, TxLogEntry, WalletInfo};
use libwallet::Error;
use prettytable;
@@ -255,26 +256,69 @@ pub fn info(
) {
println!(
"\n____ Wallet Summary Info - Account '{}' as of height {} ____\n",
- account, wallet_info.last_confirmed_height
+ account, wallet_info.last_confirmed_height,
);
- let mut table = if dark_background_color_scheme {
- table!(
- [bFG->"Total", FG->amount_to_hr_string(wallet_info.total, false)],
- [bFY->"Awaiting Confirmation", FY->amount_to_hr_string(wallet_info.amount_awaiting_confirmation, false)],
- [bFY->"Immature Coinbase", FY->amount_to_hr_string(wallet_info.amount_immature, false)],
- [bFG->"Currently Spendable", FG->amount_to_hr_string(wallet_info.amount_currently_spendable, false)],
- [Fw->"--------------------------------", Fw->"-------------"],
- [Fr->"(Locked by previous transaction)", Fr->amount_to_hr_string(wallet_info.amount_locked, false)]
- )
+
+ let mut table = table!();
+
+ if dark_background_color_scheme {
+ table.add_row(row![
+ bFG->"Total",
+ FG->amount_to_hr_string(wallet_info.total, false)
+ ]);
+ // Only dispay "Immature Coinbase" if we have related outputs in the wallet.
+ // This row just introduces confusion if the wallet does not receive coinbase rewards.
+ if wallet_info.amount_immature > 0 {
+ table.add_row(row![
+ bFY->format!("Immature Coinbase (< {})", global::coinbase_maturity()),
+ FY->amount_to_hr_string(wallet_info.amount_immature, false)
+ ]);
+ }
+ table.add_row(row![
+ bFY->format!("Awaiting Confirmation (< {})", wallet_info.minimum_confirmations),
+ FY->amount_to_hr_string(wallet_info.amount_awaiting_confirmation, false)
+ ]);
+ table.add_row(row![
+ Fr->"Locked by previous transaction",
+ Fr->amount_to_hr_string(wallet_info.amount_locked, false)
+ ]);
+ table.add_row(row![
+ Fw->"--------------------------------",
+ Fw->"-------------"
+ ]);
+ table.add_row(row![
+ bFG->"Currently Spendable",
+ FG->amount_to_hr_string(wallet_info.amount_currently_spendable, false)
+ ]);
} else {
- table!(
- [bFG->"Total", FG->amount_to_hr_string(wallet_info.total, false)],
- [bFB->"Awaiting Confirmation", FB->amount_to_hr_string(wallet_info.amount_awaiting_confirmation, false)],
- [bFB->"Immature Coinbase", FB->amount_to_hr_string(wallet_info.amount_immature, false)],
- [bFG->"Currently Spendable", FG->amount_to_hr_string(wallet_info.amount_currently_spendable, false)],
- [Fw->"--------------------------------", Fw->"-------------"],
- [Fr->"(Locked by previous transaction)", Fr->amount_to_hr_string(wallet_info.amount_locked, false)]
- )
+ table.add_row(row![
+ bFG->"Total",
+ FG->amount_to_hr_string(wallet_info.total, false)
+ ]);
+ // Only dispay "Immature Coinbase" if we have related outputs in the wallet.
+ // This row just introduces confusion if the wallet does not receive coinbase rewards.
+ if wallet_info.amount_immature > 0 {
+ table.add_row(row![
+ bFB->format!("Immature Coinbase (< {})", global::coinbase_maturity()),
+ FB->amount_to_hr_string(wallet_info.amount_immature, false)
+ ]);
+ }
+ table.add_row(row![
+ bFB->format!("Awaiting Confirmation (< {})", wallet_info.minimum_confirmations),
+ FB->amount_to_hr_string(wallet_info.amount_awaiting_confirmation, false)
+ ]);
+ table.add_row(row![
+ Fr->"Locked by previous transaction",
+ Fr->amount_to_hr_string(wallet_info.amount_locked, false)
+ ]);
+ table.add_row(row![
+ Fw->"--------------------------------",
+ Fw->"-------------"
+ ]);
+ table.add_row(row![
+ bFG->"Currently Spendable",
+ FG->amount_to_hr_string(wallet_info.amount_currently_spendable, false)
+ ]);
};
table.set_format(*prettytable::format::consts::FORMAT_NO_BORDER_LINE_SEPARATOR);
table.printstd();
diff --git a/wallet/src/libwallet/api.rs b/wallet/src/libwallet/api.rs
index faf27f626..72d220d6c 100644
--- a/wallet/src/libwallet/api.rs
+++ b/wallet/src/libwallet/api.rs
@@ -127,6 +127,7 @@ where
pub fn retrieve_summary_info(
&mut self,
refresh_from_node: bool,
+ minimum_confirmations: u64,
) -> Result<(bool, WalletInfo), Error> {
let mut w = self.wallet.lock();
w.open_with_credentials()?;
@@ -137,7 +138,7 @@ where
validated = self.update_outputs(&mut w);
}
- let wallet_info = updater::retrieve_info(&mut *w, &parent_key_id)?;
+ let wallet_info = updater::retrieve_info(&mut *w, &parent_key_id, minimum_confirmations)?;
let res = Ok((validated, wallet_info));
w.close()?;
diff --git a/wallet/src/libwallet/internal/updater.rs b/wallet/src/libwallet/internal/updater.rs
index 2e08d26ca..756361b09 100644
--- a/wallet/src/libwallet/internal/updater.rs
+++ b/wallet/src/libwallet/internal/updater.rs
@@ -323,6 +323,7 @@ where
pub fn retrieve_info(
wallet: &mut T,
parent_key_id: &Identifier,
+ minimum_confirmations: u64,
) -> Result
where
T: WalletBackend,
@@ -338,23 +339,39 @@ where
let mut immature_total = 0;
let mut unconfirmed_total = 0;
let mut locked_total = 0;
+
for out in outputs {
- if out.status == OutputStatus::Unspent && out.lock_height <= current_height {
- unspent_total += out.value;
- }
- if out.status == OutputStatus::Unspent && out.lock_height > current_height {
- immature_total += out.value;
- }
- if out.status == OutputStatus::Unconfirmed && !out.is_coinbase {
- unconfirmed_total += out.value;
- }
- if out.status == OutputStatus::Locked {
- locked_total += out.value;
+ match out.status {
+ OutputStatus::Unspent => {
+ if out.is_coinbase && out.lock_height > current_height {
+ immature_total += out.value;
+ } else if out.num_confirmations(current_height) < minimum_confirmations {
+ // Treat anything less than minimum confirmations as "unconfirmed".
+ unconfirmed_total += out.value;
+ } else {
+ unspent_total += out.value;
+ }
+ }
+ OutputStatus::Unconfirmed => {
+ // We ignore unconfirmed coinbase outputs completely.
+ if !out.is_coinbase {
+ if minimum_confirmations == 0 {
+ unspent_total += out.value;
+ } else {
+ unconfirmed_total += out.value;
+ }
+ }
+ }
+ OutputStatus::Locked => {
+ locked_total += out.value;
+ }
+ OutputStatus::Spent => {}
}
}
Ok(WalletInfo {
last_confirmed_height: current_height,
+ minimum_confirmations,
total: unspent_total + unconfirmed_total + immature_total,
amount_awaiting_confirmation: unconfirmed_total,
amount_immature: immature_total,
diff --git a/wallet/src/libwallet/types.rs b/wallet/src/libwallet/types.rs
index af5d23fee..4696df6a9 100644
--- a/wallet/src/libwallet/types.rs
+++ b/wallet/src/libwallet/types.rs
@@ -31,7 +31,6 @@ use core::ser;
use keychain::{Identifier, Keychain};
use libtx::aggsig;
-use libtx::slate::Slate;
use libwallet::error::{Error, ErrorKind};
use util::secp::key::{PublicKey, SecretKey};
@@ -519,6 +518,8 @@ pub struct CbData {
pub struct WalletInfo {
/// height from which info was taken
pub last_confirmed_height: u64,
+ /// Minimum number of confirmations for an output to be treated as "spendable".
+ pub minimum_confirmations: u64,
/// total amount in the wallet
pub total: u64,
/// amount awaiting confirmation
diff --git a/wallet/tests/accounts.rs b/wallet/tests/accounts.rs
index 1681eb9f4..5348b9636 100644
--- a/wallet/tests/accounts.rs
+++ b/wallet/tests/accounts.rs
@@ -128,7 +128,7 @@ fn accounts_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
// Should have 5 in account1 (5 spendable), 5 in account (2 spendable)
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, 12);
assert_eq!(wallet1_info.total, 5 * reward);
@@ -145,9 +145,9 @@ fn accounts_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
}
wallet::controller::owner_single_use(wallet1.clone(), |api| {
// check last confirmed height on this account is different from above (should be 0)
- let (_, wallet1_info) = api.retrieve_summary_info(false)?;
+ let (_, wallet1_info) = api.retrieve_summary_info(false, 1)?;
assert_eq!(wallet1_info.last_confirmed_height, 0);
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, 12);
assert_eq!(wallet1_info.total, 7 * reward);
@@ -164,9 +164,9 @@ fn accounts_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
w.set_parent_key_id_by_name("default")?;
}
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (_, wallet1_info) = api.retrieve_summary_info(false)?;
+ let (_, wallet1_info) = api.retrieve_summary_info(false, 1)?;
assert_eq!(wallet1_info.last_confirmed_height, 0);
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, 12);
assert_eq!(wallet1_info.total, 0,);
@@ -199,7 +199,7 @@ fn accounts_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
})?;
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, 13);
let (_, txs) = api.retrieve_txs(true, None, None)?;
@@ -213,9 +213,9 @@ fn accounts_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
w.set_parent_key_id_by_name("account2")?;
}
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (_, wallet1_info) = api.retrieve_summary_info(false)?;
+ let (_, wallet1_info) = api.retrieve_summary_info(false, 1)?;
assert_eq!(wallet1_info.last_confirmed_height, 12);
- let (_, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (_, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert_eq!(wallet1_info.last_confirmed_height, 13);
let (_, txs) = api.retrieve_txs(true, None, None)?;
println!("{:?}", txs);
@@ -225,7 +225,7 @@ fn accounts_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
// wallet 2 should only have this tx on the listener account
wallet::controller::owner_single_use(wallet2.clone(), |api| {
- let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true)?;
+ let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet2_refreshed);
assert_eq!(wallet2_info.last_confirmed_height, 13);
let (_, txs) = api.retrieve_txs(true, None, None)?;
@@ -238,9 +238,9 @@ fn accounts_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
w.set_parent_key_id_by_name("default")?;
}
wallet::controller::owner_single_use(wallet2.clone(), |api| {
- let (_, wallet2_info) = api.retrieve_summary_info(false)?;
+ let (_, wallet2_info) = api.retrieve_summary_info(false, 1)?;
assert_eq!(wallet2_info.last_confirmed_height, 0);
- let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true)?;
+ let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet2_refreshed);
assert_eq!(wallet2_info.last_confirmed_height, 13);
assert_eq!(wallet2_info.total, 0,);
diff --git a/wallet/tests/file.rs b/wallet/tests/file.rs
index 4be06400b..7d16d7bc8 100644
--- a/wallet/tests/file.rs
+++ b/wallet/tests/file.rs
@@ -99,7 +99,7 @@ fn file_exchange_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
// Should have 5 in account1 (5 spendable), 5 in account (2 spendable)
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, bh);
assert_eq!(wallet1_info.total, bh * reward);
@@ -151,7 +151,7 @@ fn file_exchange_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
// Check total in mining account
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, bh);
assert_eq!(wallet1_info.total, bh * reward - reward * 2);
@@ -160,7 +160,7 @@ fn file_exchange_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
// Check total in 'wallet 2' account
wallet::controller::owner_single_use(wallet2.clone(), |api| {
- let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true)?;
+ let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet2_refreshed);
assert_eq!(wallet2_info.last_confirmed_height, bh);
assert_eq!(wallet2_info.total, 2 * reward);
diff --git a/wallet/tests/restore.rs b/wallet/tests/restore.rs
index 2089271de..693dafd5b 100644
--- a/wallet/tests/restore.rs
+++ b/wallet/tests/restore.rs
@@ -73,7 +73,7 @@ fn restore_wallet(base_dir: &str, wallet_dir: &str) -> Result<(), libwallet::Err
// perform the restore and update wallet info
wallet::controller::owner_single_use(wallet.clone(), |api| {
let _ = api.restore()?;
- let _ = api.retrieve_summary_info(true)?;
+ let _ = api.retrieve_summary_info(true, 1)?;
Ok(())
})?;
@@ -135,14 +135,14 @@ fn compare_wallet_restore(
// Overall wallet info should be the same
wallet::controller::owner_single_use(wallet_source.clone(), |api| {
- src_info = Some(api.retrieve_summary_info(true)?.1);
+ src_info = Some(api.retrieve_summary_info(true, 1)?.1);
src_txs = Some(api.retrieve_txs(true, None, None)?.1);
src_accts = Some(api.accounts()?);
Ok(())
})?;
wallet::controller::owner_single_use(wallet_dest.clone(), |api| {
- dest_info = Some(api.retrieve_summary_info(true)?.1);
+ dest_info = Some(api.retrieve_summary_info(true, 1)?.1);
dest_txs = Some(api.retrieve_txs(true, None, None)?.1);
dest_accts = Some(api.accounts()?);
Ok(())
@@ -318,15 +318,15 @@ fn setup_restore(test_dir: &str) -> Result<(), libwallet::Error> {
// update everyone
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let _ = api.retrieve_summary_info(true)?;
+ let _ = api.retrieve_summary_info(true, 1)?;
Ok(())
})?;
wallet::controller::owner_single_use(wallet2.clone(), |api| {
- let _ = api.retrieve_summary_info(true)?;
+ let _ = api.retrieve_summary_info(true, 1)?;
Ok(())
})?;
wallet::controller::owner_single_use(wallet3.clone(), |api| {
- let _ = api.retrieve_summary_info(true)?;
+ let _ = api.retrieve_summary_info(true, 1)?;
Ok(())
})?;
diff --git a/wallet/tests/self_send.rs b/wallet/tests/self_send.rs
index 3df70e52a..5b4f09745 100644
--- a/wallet/tests/self_send.rs
+++ b/wallet/tests/self_send.rs
@@ -87,7 +87,7 @@ fn self_send_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
// Should have 5 in account1 (5 spendable), 5 in account (2 spendable)
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, bh);
assert_eq!(wallet1_info.total, bh * reward);
@@ -119,7 +119,7 @@ fn self_send_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
// Check total in mining account
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, bh);
assert_eq!(wallet1_info.total, bh * reward - reward * 2);
@@ -132,7 +132,7 @@ fn self_send_test_impl(test_dir: &str) -> Result<(), libwallet::Error> {
w.set_parent_key_id_by_name("listener")?;
}
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet1_refreshed);
assert_eq!(wallet1_info.last_confirmed_height, bh);
assert_eq!(wallet1_info.total, 2 * reward);
diff --git a/wallet/tests/transaction.rs b/wallet/tests/transaction.rs
index 1e3981198..a54e0fe8e 100644
--- a/wallet/tests/transaction.rs
+++ b/wallet/tests/transaction.rs
@@ -84,7 +84,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
// Check wallet 1 contents are as expected
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
debug!(
"Wallet 1 Info Pre-Transaction, after {} blocks: {:?}",
wallet1_info.last_confirmed_height, wallet1_info
@@ -119,7 +119,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
// Check transaction log for wallet 1
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (_, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (_, wallet1_info) = api.retrieve_summary_info(true, 1)?;
let (refreshed, txs) = api.retrieve_txs(true, None, None)?;
assert!(refreshed);
let fee = wallet::libtx::tx_fee(
@@ -163,7 +163,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
// Check wallet 1 contents are as expected
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
debug!(
"Wallet 1 Info Post Transaction, after {} blocks: {:?}",
wallet1_info.last_confirmed_height, wallet1_info
@@ -203,7 +203,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
// refresh wallets and retrieve info/tests for each wallet after maturity
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (wallet1_refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
debug!("Wallet 1 Info: {:?}", wallet1_info);
assert!(wallet1_refreshed);
assert_eq!(
@@ -218,7 +218,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
})?;
wallet::controller::owner_single_use(wallet2.clone(), |api| {
- let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true)?;
+ let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet2_refreshed);
assert_eq!(wallet2_info.amount_currently_spendable, amount);
@@ -252,7 +252,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
})?;
wallet::controller::owner_single_use(wallet1.clone(), |sender_api| {
- let (refreshed, _wallet1_info) = sender_api.retrieve_summary_info(true)?;
+ let (refreshed, _wallet1_info) = sender_api.retrieve_summary_info(true, 1)?;
assert!(refreshed);
let (_, txs) = sender_api.retrieve_txs(true, None, None)?;
@@ -262,7 +262,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
.find(|t| t.tx_slate_id == Some(slate.id))
.unwrap();
sender_api.post_stored_tx(tx.id, false)?;
- let (_, wallet1_info) = sender_api.retrieve_summary_info(true)?;
+ let (_, wallet1_info) = sender_api.retrieve_summary_info(true, 1)?;
// should be mined now
assert_eq!(
wallet1_info.total,
@@ -276,7 +276,7 @@ fn basic_transaction_api(test_dir: &str) -> Result<(), libwallet::Error> {
// check wallet2 has stored transaction
wallet::controller::owner_single_use(wallet2.clone(), |api| {
- let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true)?;
+ let (wallet2_refreshed, wallet2_info) = api.retrieve_summary_info(true, 1)?;
assert!(wallet2_refreshed);
assert_eq!(wallet2_info.amount_currently_spendable, amount * 3);
@@ -347,7 +347,7 @@ fn tx_rollback(test_dir: &str) -> Result<(), libwallet::Error> {
// Check transaction log for wallet 1
wallet::controller::owner_single_use(wallet1.clone(), |api| {
- let (refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
println!(
"last confirmed height: {}",
wallet1_info.last_confirmed_height
@@ -392,7 +392,7 @@ fn tx_rollback(test_dir: &str) -> Result<(), libwallet::Error> {
}
assert_eq!(outputs.len(), 1);
assert_eq!(unconfirmed_count, 1);
- let (refreshed, wallet2_info) = api.retrieve_summary_info(true)?;
+ let (refreshed, wallet2_info) = api.retrieve_summary_info(true, 1)?;
assert!(refreshed);
assert_eq!(wallet2_info.amount_currently_spendable, 0,);
assert_eq!(wallet2_info.total, amount);
@@ -413,7 +413,7 @@ fn tx_rollback(test_dir: &str) -> Result<(), libwallet::Error> {
.find(|t| t.tx_slate_id == Some(slate.id))
.unwrap();
api.cancel_tx(Some(tx.id), None)?;
- let (refreshed, wallet1_info) = api.retrieve_summary_info(true)?;
+ let (refreshed, wallet1_info) = api.retrieve_summary_info(true, 1)?;
assert!(refreshed);
println!(
"last confirmed height: {}",
@@ -440,7 +440,7 @@ fn tx_rollback(test_dir: &str) -> Result<(), libwallet::Error> {
.find(|t| t.tx_slate_id == Some(slate.id))
.unwrap();
api.cancel_tx(Some(tx.id), None)?;
- let (refreshed, wallet2_info) = api.retrieve_summary_info(true)?;
+ let (refreshed, wallet2_info) = api.retrieve_summary_info(true, 1)?;
assert!(refreshed);
// check all eligible inputs should be now be spendable
assert_eq!(wallet2_info.amount_currently_spendable, 0,);