From 5bb7ba5b7d7f81977705f0ed5652c9924c7a1d56 Mon Sep 17 00:00:00 2001 From: Elichai Turkel Date: Fri, 23 Aug 2019 19:12:55 -0400 Subject: [PATCH] Cast weights to u64 to support the new rust-bitcoin api --- src/ln/chan_utils.rs | 4 ++-- src/ln/channel.rs | 2 +- src/ln/channelmonitor.rs | 18 +++++++++--------- src/ln/functional_test_utils.rs | 13 +++++++------ src/ln/functional_tests.rs | 15 ++++++++++----- 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/ln/chan_utils.rs b/src/ln/chan_utils.rs index eab80a54..1d8dd307 100644 --- a/src/ln/chan_utils.rs +++ b/src/ln/chan_utils.rs @@ -133,7 +133,7 @@ pub fn get_revokeable_redeemscript(revocation_key: &PublicKey, to_self_delay: u1 .push_slice(&revocation_key.serialize()) .push_opcode(opcodes::all::OP_ELSE) .push_int(to_self_delay as i64) - .push_opcode(opcodes::OP_CSV) + .push_opcode(opcodes::all::OP_CSV) .push_opcode(opcodes::all::OP_DROP) .push_slice(&delayed_payment_key.serialize()) .push_opcode(opcodes::all::OP_ENDIF) @@ -206,7 +206,7 @@ pub fn get_htlc_redeemscript_with_explicit_keys(htlc: &HTLCOutputInCommitment, a .push_opcode(opcodes::all::OP_ELSE) .push_opcode(opcodes::all::OP_DROP) .push_int(htlc.cltv_expiry as i64) - .push_opcode(opcodes::OP_CLTV) + .push_opcode(opcodes::all::OP_CLTV) .push_opcode(opcodes::all::OP_DROP) .push_opcode(opcodes::all::OP_CHECKSIG) .push_opcode(opcodes::all::OP_ENDIF) diff --git a/src/ln/channel.rs b/src/ln/channel.rs index 04a65b36..c1eaad02 100644 --- a/src/ln/channel.rs +++ b/src/ln/channel.rs @@ -2784,7 +2784,7 @@ impl Channel { } } - let proposed_sat_per_kw = msg.fee_satoshis * 1000 / closing_tx.get_weight(); + let proposed_sat_per_kw = msg.fee_satoshis * 1000 / closing_tx.get_weight() as u64; if self.channel_outbound { let our_max_feerate = fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::Normal); if proposed_sat_per_kw > our_max_feerate { diff --git a/src/ln/channelmonitor.rs b/src/ln/channelmonitor.rs index 4d54b641..5bcd74f7 100644 --- a/src/ln/channelmonitor.rs +++ b/src/ln/channelmonitor.rs @@ -488,13 +488,13 @@ macro_rules! subtract_high_prio_fee { ($self: ident, $fee_estimator: expr, $value: expr, $predicted_weight: expr, $spent_txid: expr, $used_feerate: expr) => { { $used_feerate = $fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::HighPriority); - let mut fee = $used_feerate * $predicted_weight / 1000; + let mut fee = $used_feerate * ($predicted_weight as u64) / 1000; if $value <= fee { $used_feerate = $fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::Normal); - fee = $used_feerate * $predicted_weight / 1000; + fee = $used_feerate * ($predicted_weight as u64) / 1000; if $value <= fee { $used_feerate = $fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::Background); - fee = $used_feerate * $predicted_weight / 1000; + fee = $used_feerate * ($predicted_weight as u64) / 1000; if $value <= fee { log_error!($self, "Failed to generate an on-chain punishment tx spending {} as even low priority fee ({} sat) was more than the entire claim balance ({} sat)", $spent_txid, fee, $value); @@ -602,7 +602,7 @@ impl ChannelMonitor { } } - fn get_witnesses_weight(inputs: &[InputDescriptors]) -> u64 { + fn get_witnesses_weight(inputs: &[InputDescriptors]) -> usize { let mut tx_weight = 2; // count segwit flags for inp in inputs { // We use expected weight (and not actual) as signatures and time lock delays may vary @@ -3307,7 +3307,7 @@ mod tests { let secp_ctx = Secp256k1::new(); let privkey = SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap(); let pubkey = PublicKey::from_secret_key(&secp_ctx, &privkey); - let mut sum_actual_sigs: u64 = 0; + let mut sum_actual_sigs = 0; macro_rules! sign_input { ($sighash_parts: expr, $input: expr, $idx: expr, $amount: expr, $input_type: expr, $sum_actual_sigs: expr) => { @@ -3323,7 +3323,7 @@ mod tests { let sig = secp_ctx.sign(&sighash, &privkey); $input.witness.push(sig.serialize_der().to_vec()); $input.witness[0].push(SigHashType::All as u8); - sum_actual_sigs += $input.witness[0].len() as u64; + sum_actual_sigs += $input.witness[0].len(); if *$input_type == InputDescriptors::RevokedOutput { $input.witness.push(vec!(1)); } else if *$input_type == InputDescriptors::RevokedOfferedHTLC || *$input_type == InputDescriptors::RevokedReceivedHTLC { @@ -3366,7 +3366,7 @@ mod tests { for (idx, inp) in claim_tx.input.iter_mut().zip(inputs_des.iter()).enumerate() { sign_input!(sighash_parts, inp.0, idx as u32, 0, inp.1, sum_actual_sigs); } - assert_eq!(base_weight + ChannelMonitor::get_witnesses_weight(&inputs_des[..]), claim_tx.get_weight() + /* max_length_sig */ (73 * inputs_des.len() as u64 - sum_actual_sigs)); + assert_eq!(base_weight + ChannelMonitor::get_witnesses_weight(&inputs_des[..]), claim_tx.get_weight() + /* max_length_sig */ (73 * inputs_des.len() - sum_actual_sigs)); // Claim tx with 1 offered HTLCs, 3 received HTLCs claim_tx.input.clear(); @@ -3388,7 +3388,7 @@ mod tests { for (idx, inp) in claim_tx.input.iter_mut().zip(inputs_des.iter()).enumerate() { sign_input!(sighash_parts, inp.0, idx as u32, 0, inp.1, sum_actual_sigs); } - assert_eq!(base_weight + ChannelMonitor::get_witnesses_weight(&inputs_des[..]), claim_tx.get_weight() + /* max_length_sig */ (73 * inputs_des.len() as u64 - sum_actual_sigs)); + assert_eq!(base_weight + ChannelMonitor::get_witnesses_weight(&inputs_des[..]), claim_tx.get_weight() + /* max_length_sig */ (73 * inputs_des.len() - sum_actual_sigs)); // Justice tx with 1 revoked HTLC-Success tx output claim_tx.input.clear(); @@ -3408,7 +3408,7 @@ mod tests { for (idx, inp) in claim_tx.input.iter_mut().zip(inputs_des.iter()).enumerate() { sign_input!(sighash_parts, inp.0, idx as u32, 0, inp.1, sum_actual_sigs); } - assert_eq!(base_weight + ChannelMonitor::get_witnesses_weight(&inputs_des[..]), claim_tx.get_weight() + /* max_length_isg */ (73 * inputs_des.len() as u64 - sum_actual_sigs)); + assert_eq!(base_weight + ChannelMonitor::get_witnesses_weight(&inputs_des[..]), claim_tx.get_weight() + /* max_length_isg */ (73 * inputs_des.len() - sum_actual_sigs)); } // Further testing is done in the ChannelManager integration tests. diff --git a/src/ln/functional_test_utils.rs b/src/ln/functional_test_utils.rs index fe32a1ef..3c84cff5 100644 --- a/src/ln/functional_test_utils.rs +++ b/src/ln/functional_test_utils.rs @@ -29,8 +29,6 @@ use secp256k1::key::PublicKey; use rand::{thread_rng,Rng}; use std::cell::RefCell; -use std::collections::HashMap; -use std::default::Default; use std::rc::Rc; use std::sync::{Arc, Mutex}; use std::mem; @@ -307,10 +305,13 @@ pub fn create_announced_chan_between_nodes_with_value(nodes: &Vec, a: usiz macro_rules! check_spends { ($tx: expr, $spends_tx: expr) => { { - let mut funding_tx_map = HashMap::new(); - let spends_tx = $spends_tx; - funding_tx_map.insert(spends_tx.txid(), spends_tx); - $tx.verify(&funding_tx_map).unwrap(); + $tx.verify(|out_point| { + if out_point.txid == $spends_tx.txid() { + $spends_tx.output.get(out_point.vout as usize).cloned() + } else { + None + } + }).unwrap(); } } } diff --git a/src/ln/functional_tests.rs b/src/ln/functional_tests.rs index 819fc23b..e37b63cc 100644 --- a/src/ln/functional_tests.rs +++ b/src/ln/functional_tests.rs @@ -2030,11 +2030,16 @@ fn claim_htlc_outputs_single_tx() { assert_eq!(node_txn[1].input.len(), 1); assert_eq!(node_txn[2].input.len(), 1); - let mut revoked_tx_map = HashMap::new(); - revoked_tx_map.insert(revoked_local_txn[0].txid(), revoked_local_txn[0].clone()); - node_txn[0].verify(&revoked_tx_map).unwrap(); - node_txn[1].verify(&revoked_tx_map).unwrap(); - node_txn[2].verify(&revoked_tx_map).unwrap(); + fn get_txout(out_point: &BitcoinOutPoint, tx: &Transaction) -> Option { + if out_point.txid == tx.txid() { + tx.output.get(out_point.vout as usize).cloned() + } else { + None + } + } + node_txn[0].verify(|out|get_txout(out, &revoked_local_txn[0])).unwrap(); + node_txn[1].verify(|out|get_txout(out, &revoked_local_txn[0])).unwrap(); + node_txn[2].verify(|out|get_txout(out, &revoked_local_txn[0])).unwrap(); let mut witness_lens = BTreeSet::new(); witness_lens.insert(node_txn[0].input[0].witness.last().unwrap().len()); -- 2.30.2