Fix transaction logging

This commit is contained in:
Greg Fitzgerald 2018-03-29 13:50:32 -06:00
parent 2f1e585446
commit b8cf5f9427
2 changed files with 19 additions and 14 deletions

View File

@ -94,12 +94,8 @@ impl Accountant {
}
}
/// Verify and process the given Transaction.
pub fn process_transaction(self: &mut Self, tr: Transaction) -> Result<()> {
if !tr.verify() {
return Err(AccountingError::InvalidTransfer);
}
/// Process and log the given Transaction.
pub fn log_verified_transaction(&mut self, tr: Transaction) -> Result<()> {
if self.get_balance(&tr.from).unwrap_or(0) < tr.tokens {
return Err(AccountingError::InsufficientFunds);
}
@ -115,8 +111,17 @@ impl Accountant {
Ok(())
}
/// Verify and process the given Transaction.
pub fn log_transaction(&mut self, tr: Transaction) -> Result<()> {
if !tr.verify() {
return Err(AccountingError::InvalidTransfer);
}
self.log_verified_transaction(tr)
}
/// Process a Transaction that has already been verified.
pub fn process_verified_transaction(
fn process_verified_transaction(
self: &mut Self,
tr: &Transaction,
allow_deposits: bool,
@ -209,7 +214,7 @@ impl Accountant {
) -> Result<Signature> {
let tr = Transaction::new(keypair, to, n, last_id);
let sig = tr.sig;
self.process_transaction(tr).map(|_| sig)
self.log_transaction(tr).map(|_| sig)
}
/// Create, sign, and process a postdated Transaction from `keypair`
@ -225,7 +230,7 @@ impl Accountant {
) -> Result<Signature> {
let tr = Transaction::new_on_date(keypair, to, dt, n, last_id);
let sig = tr.sig;
self.process_transaction(tr).map(|_| sig)
self.log_transaction(tr).map(|_| sig)
}
pub fn get_balance(self: &Self, pubkey: &PublicKey) -> Option<i64> {
@ -292,7 +297,7 @@ mod tests {
payment.tokens = 2; // <-- attack!
}
assert_eq!(
acc.process_transaction(tr.clone()),
acc.log_transaction(tr.clone()),
Err(AccountingError::InvalidTransfer)
);
@ -301,7 +306,7 @@ mod tests {
payment.tokens = 0; // <-- whoops!
}
assert_eq!(
acc.process_transaction(tr.clone()),
acc.log_transaction(tr.clone()),
Err(AccountingError::InvalidTransfer)
);
}

View File

@ -78,10 +78,10 @@ impl<W: Write + Send + 'static> AccountantSkel<W> {
}
/// Process Request items sent by clients.
pub fn process_verified_request(self: &mut Self, msg: Request) -> Option<Response> {
pub fn log_verified_request(&mut self, msg: Request) -> Option<Response> {
match msg {
Request::Transaction(tr) => {
if let Err(err) = self.acc.process_verified_transaction(&tr, false) {
if let Err(err) = self.acc.log_verified_transaction(tr) {
eprintln!("Transaction error: {:?}", err);
}
None
@ -126,7 +126,7 @@ impl<W: Write + Send + 'static> AccountantSkel<W> {
let mut num = 0;
let mut ursps = rsps.write().unwrap();
for (req, rsp_addr) in reqs {
if let Some(resp) = obj.lock().unwrap().process_verified_request(req) {
if let Some(resp) = obj.lock().unwrap().log_verified_request(req) {
if ursps.responses.len() <= num {
ursps
.responses