X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Futil%2Ftransaction_utils.rs;h=b81d3d9d00c06409e4b9e8a84e745256580a0aca;hb=d990f72f9a4cf4bc6f7f32f8b3dc9dd616c5bd33;hp=74ea81adbf76e8824cba3af5532033330a4f7e2d;hpb=35853a607d53b8987ebe4d4c7b7119fc188e1e32;p=rust-lightning diff --git a/src/util/transaction_utils.rs b/src/util/transaction_utils.rs index 74ea81ad..b81d3d9d 100644 --- a/src/util/transaction_utils.rs +++ b/src/util/transaction_utils.rs @@ -3,11 +3,13 @@ use bitcoin_hashes::sha256d::Hash as Sha256dHash; use std::cmp::Ordering; -pub fn sort_outputs(outputs: &mut Vec<(TxOut, T)>) { +pub fn sort_outputs Ordering>(outputs: &mut Vec<(TxOut, T)>, tie_breaker: C) { outputs.sort_unstable_by(|a, b| { - a.0.value.cmp(&b.0.value).then( - a.0.script_pubkey[..].cmp(&b.0.script_pubkey[..]) - ) + a.0.value.cmp(&b.0.value).then_with(|| { + a.0.script_pubkey[..].cmp(&b.0.script_pubkey[..]).then_with(|| { + tie_breaker(&a.1, &b.1) + }) + }) }); } @@ -58,7 +60,7 @@ mod tests { let txout2_ = txout2.clone(); let mut outputs = vec![(txout1, "ignore"), (txout2, "ignore")]; - sort_outputs(&mut outputs); + sort_outputs(&mut outputs, |_, _| { unreachable!(); }); assert_eq!( &outputs, @@ -81,7 +83,7 @@ mod tests { let txout2_ = txout2.clone(); let mut outputs = vec![(txout1, "ignore"), (txout2, "ignore")]; - sort_outputs(&mut outputs); + sort_outputs(&mut outputs, |_, _| { unreachable!(); }); assert_eq!( &outputs, @@ -105,7 +107,7 @@ mod tests { let txout2_ = txout2.clone(); let mut outputs = vec![(txout1, "ignore"), (txout2, "ignore")]; - sort_outputs(&mut outputs); + sort_outputs(&mut outputs, |_, _| { unreachable!(); }); assert_eq!(&outputs, &vec![(txout1_, "ignore"), (txout2_, "ignore")]); } @@ -131,7 +133,7 @@ mod tests { outputs.reverse(); // prep it // actually do the work! - sort_outputs(&mut outputs); + sort_outputs(&mut outputs, |_, _| { unreachable!(); }); assert_eq!(outputs, expected); }