Track funding amount in HolderFundingOutput

This will be useful later on when determining the appropriate fee rate
to use on the anchor transaction to bump its commitment transaction.
This commit is contained in:
Wilmer Paulino 2022-07-27 14:58:43 -07:00
parent 492b24059e
commit ccf318e597
No known key found for this signature in database
GPG key ID: 6DF57B9F9514972F
2 changed files with 14 additions and 8 deletions

View file

@ -2884,7 +2884,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
let should_broadcast = self.should_broadcast_holder_commitment_txn(logger);
if should_broadcast {
let funding_outp = HolderFundingOutput::build(self.funding_redeemscript.clone(), self.onchain_tx_handler.opt_anchors());
let funding_outp = HolderFundingOutput::build(self.funding_redeemscript.clone(), self.channel_value_satoshis, self.onchain_tx_handler.opt_anchors());
let commitment_package = PackageTemplate::build_package(self.funding_info.0.txid.clone(), self.funding_info.0.index as u32, PackageSolvingData::HolderFundingOutput(funding_outp), self.best_block.height(), false, self.best_block.height());
claimable_outpoints.push(commitment_package);
self.pending_monitor_events.push(MonitorEvent::CommitmentTxConfirmed(self.funding_info.0));

View file

@ -286,14 +286,16 @@ impl_writeable_tlv_based!(HolderHTLCOutput, {
#[derive(Clone, PartialEq, Eq)]
pub(crate) struct HolderFundingOutput {
funding_redeemscript: Script,
funding_amount: Option<u64>,
opt_anchors: Option<()>,
}
impl HolderFundingOutput {
pub(crate) fn build(funding_redeemscript: Script, opt_anchors: bool) -> Self {
pub(crate) fn build(funding_redeemscript: Script, funding_amount: u64, opt_anchors: bool) -> Self {
HolderFundingOutput {
funding_redeemscript,
funding_amount: Some(funding_amount),
opt_anchors: if opt_anchors { Some(()) } else { None },
}
}
@ -306,6 +308,7 @@ impl HolderFundingOutput {
impl_writeable_tlv_based!(HolderFundingOutput, {
(0, funding_redeemscript, required),
(1, opt_anchors, option),
(3, funding_amount, option),
});
/// A wrapper encapsulating all in-protocol differing outputs types.
@ -325,15 +328,18 @@ pub(crate) enum PackageSolvingData {
impl PackageSolvingData {
fn amount(&self) -> u64 {
let amt = match self {
PackageSolvingData::RevokedOutput(ref outp) => { outp.amount },
PackageSolvingData::RevokedHTLCOutput(ref outp) => { outp.amount },
PackageSolvingData::CounterpartyOfferedHTLCOutput(ref outp) => { outp.htlc.amount_msat / 1000 },
PackageSolvingData::CounterpartyReceivedHTLCOutput(ref outp) => { outp.htlc.amount_msat / 1000 },
PackageSolvingData::RevokedOutput(ref outp) => outp.amount,
PackageSolvingData::RevokedHTLCOutput(ref outp) => outp.amount,
PackageSolvingData::CounterpartyOfferedHTLCOutput(ref outp) => outp.htlc.amount_msat / 1000,
PackageSolvingData::CounterpartyReceivedHTLCOutput(ref outp) => outp.htlc.amount_msat / 1000,
// Note: Currently, amounts of holder outputs spending witnesses aren't used
// as we can't malleate spending package to increase their feerate. This
// should change with the remaining anchor output patchset.
PackageSolvingData::HolderHTLCOutput(..) => { unreachable!() },
PackageSolvingData::HolderFundingOutput(..) => { unreachable!() },
PackageSolvingData::HolderHTLCOutput(..) => unreachable!(),
PackageSolvingData::HolderFundingOutput(ref outp) => {
debug_assert!(outp.opt_anchors());
outp.funding_amount.unwrap()
}
};
amt
}