X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fonchaintx.rs;h=a593c2c76ef8cfd69631851da5d4d89b49e11017;hb=0ea7dd8bfccf0369af8d8e7011997ced6df06c7a;hp=16bb646ed1837c61297d3aa17693875f0ea1c14f;hpb=499d84c165426b6f05bb414f5a49a7423eb9e0c5;p=rust-lightning diff --git a/lightning/src/ln/onchaintx.rs b/lightning/src/ln/onchaintx.rs index 16bb646e..a593c2c7 100644 --- a/lightning/src/ln/onchaintx.rs +++ b/lightning/src/ln/onchaintx.rs @@ -25,6 +25,8 @@ use ln::msgs::DecodeError; use ln::PaymentPreimage; use ln::chan_utils; use ln::chan_utils::{TxCreationKeys, ChannelTransactionParameters, HolderCommitmentTransaction}; +use ln::package::InputDescriptors; +use ln::package; use chain::chaininterface::{FeeEstimator, BroadcasterInterface, ConfirmationTarget, MIN_RELAY_FEE_SAT_PER_1000_WEIGHT}; use chain::channelmonitor::{ANTI_REORG_DELAY, CLTV_SHARED_CLAIM_BUFFER, InputMaterial, ClaimRequest}; use chain::keysinterface::{Sign, KeysInterface}; @@ -123,62 +125,6 @@ impl Readable for ClaimTxBumpMaterial { } } -#[derive(PartialEq, Clone, Copy)] -pub(crate) enum InputDescriptors { - RevokedOfferedHTLC, - RevokedReceivedHTLC, - OfferedHTLC, - ReceivedHTLC, - RevokedOutput, // either a revoked to_holder output on commitment tx, a revoked HTLC-Timeout output or a revoked HTLC-Success output -} - -impl Writeable for InputDescriptors { - fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> { - match self { - &InputDescriptors::RevokedOfferedHTLC => { - writer.write_all(&[0; 1])?; - }, - &InputDescriptors::RevokedReceivedHTLC => { - writer.write_all(&[1; 1])?; - }, - &InputDescriptors::OfferedHTLC => { - writer.write_all(&[2; 1])?; - }, - &InputDescriptors::ReceivedHTLC => { - writer.write_all(&[3; 1])?; - } - &InputDescriptors::RevokedOutput => { - writer.write_all(&[4; 1])?; - } - } - Ok(()) - } -} - -impl Readable for InputDescriptors { - fn read(reader: &mut R) -> Result { - let input_descriptor = match ::read(reader)? { - 0 => { - InputDescriptors::RevokedOfferedHTLC - }, - 1 => { - InputDescriptors::RevokedReceivedHTLC - }, - 2 => { - InputDescriptors::OfferedHTLC - }, - 3 => { - InputDescriptors::ReceivedHTLC - }, - 4 => { - InputDescriptors::RevokedOutput - } - _ => return Err(DecodeError::InvalidValue), - }; - Ok(input_descriptor) - } -} - macro_rules! subtract_high_prio_fee { ($logger: ident, $fee_estimator: expr, $value: expr, $predicted_weight: expr, $used_feerate: expr) => { { @@ -271,7 +217,7 @@ pub struct OnchainTxHandler { prev_holder_commitment: Option, prev_holder_htlc_sigs: Option>>, - signer: ChannelSigner, + pub(super) signer: ChannelSigner, pub(crate) channel_transaction_parameters: ChannelTransactionParameters, // Used to track claiming requests. If claim tx doesn't confirm before height timer expiration we need to bump @@ -305,7 +251,7 @@ pub struct OnchainTxHandler { latest_height: u32, - secp_ctx: Secp256k1, + pub(super) secp_ctx: Secp256k1, } const SERIALIZATION_VERSION: u8 = 1; @@ -471,36 +417,6 @@ impl OnchainTxHandler { } } - pub(crate) 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 - tx_weight += match inp { - // number_of_witness_elements + sig_length + revocation_sig + pubkey_length + revocationpubkey + witness_script_length + witness_script - &InputDescriptors::RevokedOfferedHTLC => { - 1 + 1 + 73 + 1 + 33 + 1 + 133 - }, - // number_of_witness_elements + sig_length + revocation_sig + pubkey_length + revocationpubkey + witness_script_length + witness_script - &InputDescriptors::RevokedReceivedHTLC => { - 1 + 1 + 73 + 1 + 33 + 1 + 139 - }, - // number_of_witness_elements + sig_length + counterpartyhtlc_sig + preimage_length + preimage + witness_script_length + witness_script - &InputDescriptors::OfferedHTLC => { - 1 + 1 + 73 + 1 + 32 + 1 + 133 - }, - // number_of_witness_elements + sig_length + revocation_sig + pubkey_length + revocationpubkey + witness_script_length + witness_script - &InputDescriptors::ReceivedHTLC => { - 1 + 1 + 73 + 1 + 1 + 1 + 139 - }, - // number_of_witness_elements + sig_length + revocation_sig + true_length + op_true + witness_script_length + witness_script - &InputDescriptors::RevokedOutput => { - 1 + 1 + 73 + 1 + 1 + 1 + 77 - }, - }; - } - tx_weight - } - /// In LN, output claimed are time-sensitive, which means we have to spend them before reaching some timelock expiration. At in-channel /// output detection, we generate a first version of a claim tx and associate to it a height timer. A height timer is an absolute block /// height than once reached we should generate a new bumped "version" of the claim tx to be sure than we safely claim outputs before @@ -592,11 +508,11 @@ impl OnchainTxHandler { for per_outp_material in cached_claim_datas.per_input_material.values() { match per_outp_material { &InputMaterial::Revoked { ref input_descriptor, ref amount, .. } => { - inputs_witnesses_weight += Self::get_witnesses_weight(&[*input_descriptor]); + inputs_witnesses_weight += package::get_witnesses_weight(&[*input_descriptor]); amt += *amount; }, &InputMaterial::CounterpartyHTLC { ref preimage, ref htlc, .. } => { - inputs_witnesses_weight += Self::get_witnesses_weight(if preimage.is_some() { &[InputDescriptors::OfferedHTLC] } else { &[InputDescriptors::ReceivedHTLC] }); + inputs_witnesses_weight += package::get_witnesses_weight(if preimage.is_some() { &[InputDescriptors::OfferedHTLC] } else { &[InputDescriptors::ReceivedHTLC] }); amt += htlc.amount_msat / 1000; }, &InputMaterial::HolderHTLC { .. } => {