X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fchain%2Fonchaintx.rs;h=039fb5ff13a04eb1fd843d061bbd992a0f394935;hb=56a01de61d0eab8c3d343b51e1a500098baa5aea;hp=b75349469f81bbd3df5a598a167be82ad5c86e44;hpb=60f3c0a206bfdc851400bce7753db688b01b094e;p=rust-lightning diff --git a/lightning/src/chain/onchaintx.rs b/lightning/src/chain/onchaintx.rs index b7534946..039fb5ff 100644 --- a/lightning/src/chain/onchaintx.rs +++ b/lightning/src/chain/onchaintx.rs @@ -21,7 +21,7 @@ use bitcoin::hash_types::{Txid, BlockHash}; use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature}; use bitcoin::secp256k1; -use crate::chain::keysinterface::BaseSign; +use crate::chain::keysinterface::{ChannelSigner, EntropySource, SignerProvider}; use crate::ln::msgs::DecodeError; use crate::ln::PaymentPreimage; #[cfg(anchors)] @@ -31,7 +31,7 @@ use crate::ln::chan_utils::{ChannelTransactionParameters, HolderCommitmentTransa use crate::chain::chaininterface::ConfirmationTarget; use crate::chain::chaininterface::{FeeEstimator, BroadcasterInterface, LowerBoundedFeeEstimator}; use crate::chain::channelmonitor::{ANTI_REORG_DELAY, CLTV_SHARED_CLAIM_BUFFER}; -use crate::chain::keysinterface::{Sign, KeysInterface}; +use crate::chain::keysinterface::WriteableEcdsaChannelSigner; #[cfg(anchors)] use crate::chain::package::PackageSolvingData; use crate::chain::package::PackageTemplate; @@ -219,7 +219,8 @@ type PackageID = [u8; 32]; /// OnchainTxHandler receives claiming requests, aggregates them if it's sound, broadcast and /// do RBF bumping if possible. -pub struct OnchainTxHandler { +#[derive(PartialEq)] +pub struct OnchainTxHandler { destination_script: Script, holder_commitment: HolderCommitmentTransaction, // holder_htlc_sigs and prev_holder_htlc_sigs are in the order as they appear in the commitment @@ -271,7 +272,7 @@ pub struct OnchainTxHandler { const SERIALIZATION_VERSION: u8 = 1; const MIN_SERIALIZATION_VERSION: u8 = 1; -impl OnchainTxHandler { +impl OnchainTxHandler { pub(crate) fn write(&self, writer: &mut W) -> Result<(), io::Error> { write_ver_prefix!(writer, SERIALIZATION_VERSION, MIN_SERIALIZATION_VERSION); @@ -322,11 +323,12 @@ impl OnchainTxHandler { } } -impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHandler { - fn read(reader: &mut R, args: (&'a K, u64, [u8; 32])) -> Result { - let keys_manager = args.0; - let channel_value_satoshis = args.1; - let channel_keys_id = args.2; +impl<'a, 'b, ES: EntropySource, SP: SignerProvider> ReadableArgs<(&'a ES, &'b SP, u64, [u8; 32])> for OnchainTxHandler { + fn read(reader: &mut R, args: (&'a ES, &'b SP, u64, [u8; 32])) -> Result { + let entropy_source = args.0; + let signer_provider = args.1; + let channel_value_satoshis = args.2; + let channel_keys_id = args.3; let _ver = read_ver_prefix!(reader, SERIALIZATION_VERSION); @@ -352,7 +354,7 @@ impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHan bytes_read += bytes_to_read; } - let mut signer = keys_manager.derive_channel_signer(channel_value_satoshis, channel_keys_id); + let mut signer = signer_provider.derive_channel_signer(channel_value_satoshis, channel_keys_id); signer.provide_channel_parameters(&channel_parameters); let pending_claim_requests_len: u64 = Readable::read(reader)?; @@ -393,7 +395,7 @@ impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHan read_tlv_fields!(reader, {}); let mut secp_ctx = Secp256k1::new(); - secp_ctx.seeded_randomize(&keys_manager.get_secure_random_bytes()); + secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes()); Ok(OnchainTxHandler { destination_script, @@ -414,7 +416,7 @@ impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHan } } -impl OnchainTxHandler { +impl OnchainTxHandler { pub(crate) fn new(destination_script: Script, signer: ChannelSigner, channel_parameters: ChannelTransactionParameters, holder_commitment: HolderCommitmentTransaction, secp_ctx: Secp256k1) -> Self { OnchainTxHandler { destination_script, @@ -475,8 +477,8 @@ impl OnchainTxHandler { // remove it once it reaches the confirmation threshold, or to generate a new claim if the // transaction is reorged out. let mut all_inputs_have_confirmed_spend = true; - for outpoint in &request_outpoints { - if let Some(first_claim_txid_height) = self.claimable_outpoints.get(outpoint) { + for outpoint in request_outpoints.iter() { + if let Some(first_claim_txid_height) = self.claimable_outpoints.get(*outpoint) { // We check for outpoint spends within claims individually rather than as a set // since requests can have outpoints split off. if !self.onchain_events_awaiting_threshold_conf.iter() @@ -810,7 +812,7 @@ impl OnchainTxHandler { for outpoint in request.outpoints() { log_debug!(logger, "Removing claim tracking for {} due to maturation of claim package {}.", outpoint, log_bytes!(package_id)); - self.claimable_outpoints.remove(&outpoint); + self.claimable_outpoints.remove(outpoint); #[cfg(anchors)] self.pending_claim_events.remove(&package_id); } @@ -819,7 +821,7 @@ impl OnchainTxHandler { OnchainEvent::ContentiousOutpoint { package } => { log_debug!(logger, "Removing claim tracking due to maturation of claim tx for outpoints:"); log_debug!(logger, " {:?}", package.outpoints()); - self.claimable_outpoints.remove(&package.outpoints()[0]); + self.claimable_outpoints.remove(package.outpoints()[0]); } } } else { @@ -897,7 +899,7 @@ impl OnchainTxHandler { //- resurect outpoint back in its claimable set and regenerate tx match entry.event { OnchainEvent::ContentiousOutpoint { package } => { - if let Some(ancestor_claimable_txid) = self.claimable_outpoints.get(&package.outpoints()[0]) { + if let Some(ancestor_claimable_txid) = self.claimable_outpoints.get(package.outpoints()[0]) { if let Some(request) = self.pending_claim_requests.get_mut(&ancestor_claimable_txid.0) { request.merge_package(package); // Using a HashMap guarantee us than if we have multiple outpoints getting @@ -1047,7 +1049,7 @@ impl OnchainTxHandler { #[cfg(anchors)] pub(crate) fn generate_external_htlc_claim( - &mut self, outp: &::bitcoin::OutPoint, preimage: &Option + &self, outp: &::bitcoin::OutPoint, preimage: &Option ) -> Option { let find_htlc = |holder_commitment: &HolderCommitmentTransaction| -> Option { let trusted_tx = holder_commitment.trust();