From 5dbcb43abd6139ff1284ccdc91b2fbe593bcd865 Mon Sep 17 00:00:00 2001 From: Rob Walker Date: Fri, 10 Aug 2018 19:34:39 -0700 Subject: [PATCH] more enhancements --- src/bank.rs | 2 +- src/bin/ledger-tool.rs | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/bank.rs b/src/bank.rs index f3f107debc..5aa4e18df9 100644 --- a/src/bank.rs +++ b/src/bank.rs @@ -363,7 +363,7 @@ impl Bank { res } - fn process_entry(&self, entry: Entry) -> Result<()> { + pub fn process_entry(&self, entry: Entry) -> Result<()> { if !entry.transactions.is_empty() { for result in self.process_transactions(entry.transactions) { result?; diff --git a/src/bin/ledger-tool.rs b/src/bin/ledger-tool.rs index 238970cfaa..1fb7155002 100644 --- a/src/bin/ledger-tool.rs +++ b/src/bin/ledger-tool.rs @@ -93,13 +93,40 @@ fn main() { stdout().write_all(b"\n]}\n").expect("close array"); } ("verify", _) => { + if head < 2 { + eprintln!("verify requires at least 2 entries to run"); + exit(1); + } let bank = Bank::default(); - if head != ::max_value() { - let entries = entries.map(|entry| entry.unwrap()).take(head); - bank.process_ledger(entries).expect("process_ledger"); - } else { - let entries = entries.map(|entry| entry.unwrap()); - bank.process_ledger(entries).expect("process_ledger"); + + { + let genesis = match read_ledger(ledger_path, true) { + Ok(entries) => entries, + Err(err) => { + eprintln!("Failed to open ledger at {}: {}", ledger_path, err); + exit(1); + } + }; + + let genesis = genesis.take(2).map(|e| e.unwrap()); + + if let Err(e) = bank.process_ledger(genesis) { + eprintln!("verify failed at genesis err: {:?}", e); + exit(1); + } + } + let entries = entries.map(|e| e.unwrap()); + + for (i, entry) in entries.enumerate() { + if i >= head { + break; + } + if i >= 2 { + if let Err(e) = bank.process_entry(entry) { + eprintln!("verify failed at entry[{}], err: {:?}", i, e); + exit(1); + } + } } } ("", _) => {