Skip to content

Commit

Permalink
add ability to specify scan height backwards from tip (#325)
Browse files Browse the repository at this point in the history
  • Loading branch information
yeastplume authored Feb 7, 2020
1 parent 40a0dbd commit 3571ff8
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 5 deletions.
13 changes: 11 additions & 2 deletions controller/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -894,6 +894,7 @@ where
pub struct CheckArgs {
pub delete_unconfirmed: bool,
pub start_height: Option<u64>,
pub backwards_from_tip: Option<u64>,
}

pub fn scan<L, C, K>(
Expand All @@ -907,8 +908,16 @@ where
K: keychain::Keychain + 'static,
{
controller::owner_single_use(None, keychain_mask, Some(owner_api), |api, m| {
warn!("Starting output scan ...",);
let result = api.scan(m, args.start_height, args.delete_unconfirmed);
let tip_height = api.node_height(m)?.height;
let start_height = match args.backwards_from_tip {
Some(b) => tip_height.saturating_sub(b),
None => match args.start_height {
Some(s) => s,
None => 1,
},
};
warn!("Starting output scan from height {} ...", start_height);
let result = api.scan(m, Some(start_height), args.delete_unconfirmed);
match result {
Ok(_) => {
warn!("Wallet check complete",);
Expand Down
6 changes: 5 additions & 1 deletion src/bin/grin-wallet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,11 @@ subcommands:
help: If given, the first block from which to start the scan (default 1)
short: h
long: start_height
default_value: "1"
takes_value: true
- backwards_from_tip:
help: If given, start scan b blocks back from the tip
short: b
long: backwards_from_tip,
takes_value: true
- export_proof:
about: Export a payment proof from a completed transaction
Expand Down
10 changes: 8 additions & 2 deletions src/cmd/wallet_args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -705,9 +705,15 @@ pub fn parse_info_args(args: &ArgMatches) -> Result<command::InfoArgs, ParseErro
pub fn parse_check_args(args: &ArgMatches) -> Result<command::CheckArgs, ParseError> {
let delete_unconfirmed = args.is_present("delete_unconfirmed");
let start_height = parse_u64_or_none(args.value_of("start_height"));
let backwards_from_tip = parse_u64_or_none(args.value_of("backwards_from_tip"));
if backwards_from_tip.is_some() && start_height.is_some() {
let msg = format!("backwards_from tip and start_height cannot both be present");
return Err(ParseError::ArgumentError(msg));
}
Ok(command::CheckArgs {
start_height: start_height,
delete_unconfirmed: delete_unconfirmed,
start_height,
backwards_from_tip,
delete_unconfirmed,
})
}

Expand Down

0 comments on commit 3571ff8

Please sign in to comment.