X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fonchaintx.rs;h=02dc2ebc50b69644db51374219def8137151d3ec;hb=16fba9fd664522ac8d24111547b41dd4ff94812b;hp=8323a58fb5cb231196d707197ebd389d46cfc2e9;hpb=1dbda4faedc33506e63176e6a45687b5d756fe10;p=rust-lightning diff --git a/lightning/src/ln/onchaintx.rs b/lightning/src/ln/onchaintx.rs index 8323a58f..02dc2ebc 100644 --- a/lightning/src/ln/onchaintx.rs +++ b/lightning/src/ln/onchaintx.rs @@ -17,6 +17,7 @@ use ln::msgs::DecodeError; use ln::channelmonitor::{ANTI_REORG_DELAY, CLTV_SHARED_CLAIM_BUFFER, InputMaterial, ClaimRequest}; use ln::chan_utils::HTLCType; use chain::chaininterface::{FeeEstimator, BroadcasterInterface, ConfirmationTarget, MIN_RELAY_FEE_SAT_PER_1000_WEIGHT}; +use chain::keysinterface::ChannelKeys; use util::logger::Logger; use util::ser::{ReadableArgs, Readable, Writer, Writeable}; use util::byte_utils; @@ -138,10 +139,11 @@ macro_rules! subtract_high_prio_fee { /// OnchainTxHandler receives claiming requests, aggregates them if it's sound, broadcast and /// do RBF bumping if possible. -#[derive(Clone)] -pub struct OnchainTxHandler { +pub struct OnchainTxHandler { destination_script: Script, + key_storage: ChanSigner, + // Used to track claiming requests. If claim tx doesn't confirm before height timer expiration we need to bump // it (RBF or CPFP). If an input has been part of an aggregate tx at first claim try, we need to keep it within // another bumped aggregate tx to comply with RBF rules. We may have multiple claiming txn in the flight for the @@ -175,10 +177,12 @@ pub struct OnchainTxHandler { logger: Arc } -impl Writeable for OnchainTxHandler { - fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> { +impl OnchainTxHandler { + pub(crate) fn write(&self, writer: &mut W) -> Result<(), ::std::io::Error> { self.destination_script.write(writer)?; + self.key_storage.write(writer)?; + writer.write_all(&byte_utils::be64_to_array(self.pending_claim_requests.len() as u64))?; for (ref ancestor_claim_txid, claim_tx_data) in self.pending_claim_requests.iter() { ancestor_claim_txid.write(writer)?; @@ -214,10 +218,12 @@ impl Writeable for OnchainTxHandler { } } -impl ReadableArgs> for OnchainTxHandler { +impl ReadableArgs> for OnchainTxHandler { fn read(reader: &mut R, logger: Arc) -> Result { let destination_script = Readable::read(reader)?; + let key_storage = Readable::read(reader)?; + let pending_claim_requests_len: u64 = Readable::read(reader)?; let mut pending_claim_requests = HashMap::with_capacity(cmp::min(pending_claim_requests_len as usize, MAX_ALLOC_SIZE / 128)); for _ in 0..pending_claim_requests_len { @@ -263,6 +269,7 @@ impl ReadableArgs> for OnchainTxHandler { Ok(OnchainTxHandler { destination_script, + key_storage, claimable_outpoints, pending_claim_requests, onchain_events_waiting_threshold_conf, @@ -272,10 +279,14 @@ impl ReadableArgs> for OnchainTxHandler { } } -impl OnchainTxHandler { - pub(super) fn new(destination_script: Script, logger: Arc) -> Self { +impl OnchainTxHandler { + pub(super) fn new(destination_script: Script, keys: ChanSigner, logger: Arc) -> Self { + + let key_storage = keys; + OnchainTxHandler { destination_script, + key_storage, pending_claim_requests: HashMap::new(), claimable_outpoints: HashMap::new(), onchain_events_waiting_threshold_conf: HashMap::new(),