@@ -660,7 +660,7 @@ pub fn make_funding_redeemscript(broadcaster: &PublicKey, countersignatory: &Pub
660660///
661661/// Panics if htlc.transaction_output_index.is_none() (as such HTLCs do not appear in the
662662/// commitment transaction).
663- pub fn build_htlc_transaction ( commitment_txid : & Txid , feerate_per_kw : u32 , contest_delay : u16 , htlc : & HTLCOutputInCommitment , opt_anchors : bool , broadcaster_delayed_payment_key : & PublicKey , revocation_key : & PublicKey ) -> Transaction {
663+ pub fn build_htlc_transaction ( commitment_txid : & Txid , feerate_per_kw : u32 , contest_delay : u16 , htlc : & HTLCOutputInCommitment , opt_anchors : bool , use_non_zero_fee_anchors : bool , broadcaster_delayed_payment_key : & PublicKey , revocation_key : & PublicKey ) -> Transaction {
664664 let mut txins: Vec < TxIn > = Vec :: new ( ) ;
665665 txins. push ( TxIn {
666666 previous_output : OutPoint {
@@ -677,7 +677,7 @@ pub fn build_htlc_transaction(commitment_txid: &Txid, feerate_per_kw: u32, conte
677677 } else {
678678 htlc_success_tx_weight ( opt_anchors)
679679 } ;
680- let output_value = if opt_anchors {
680+ let output_value = if opt_anchors && !use_non_zero_fee_anchors {
681681 htlc. amount_msat / 1000
682682 } else {
683683 let total_fee = feerate_per_kw as u64 * weight / 1000 ;
@@ -1160,6 +1160,8 @@ pub struct CommitmentTransaction {
11601160 htlcs : Vec < HTLCOutputInCommitment > ,
11611161 // A boolean that is serialization backwards-compatible
11621162 opt_anchors : Option < ( ) > ,
1163+ // Whether non-zero-fee anchors should be used
1164+ opt_non_zero_fee_anchors : Option < ( ) > ,
11631165 // A cache of the parties' pubkeys required to construct the transaction, see doc for trust()
11641166 keys : TxCreationKeys ,
11651167 // For access to the pre-built transaction, see doc for trust()
@@ -1193,6 +1195,7 @@ impl_writeable_tlv_based!(CommitmentTransaction, {
11931195 ( 10 , built, required) ,
11941196 ( 12 , htlcs, vec_type) ,
11951197 ( 14 , opt_anchors, option) ,
1198+ ( 16 , opt_non_zero_fee_anchors, option) ,
11961199} ) ;
11971200
11981201impl CommitmentTransaction {
@@ -1225,9 +1228,16 @@ impl CommitmentTransaction {
12251228 transaction,
12261229 txid
12271230 } ,
1231+ opt_non_zero_fee_anchors : None ,
12281232 }
12291233 }
12301234
1235+ /// use non-zero fee anchors
1236+ pub fn with_non_zero_fee_anchors ( mut self ) -> Self {
1237+ self . opt_non_zero_fee_anchors = Some ( ( ) ) ;
1238+ self
1239+ }
1240+
12311241 fn internal_rebuild_transaction ( & self , keys : & TxCreationKeys , channel_parameters : & DirectedChannelTransactionParameters , broadcaster_funding_key : & PublicKey , countersignatory_funding_key : & PublicKey ) -> Result < BuiltCommitmentTransaction , ( ) > {
12321242 let ( obscured_commitment_transaction_number, txins) = Self :: internal_build_inputs ( self . commitment_number , channel_parameters) ;
12331243
@@ -1492,7 +1502,7 @@ impl<'a> TrustedCommitmentTransaction<'a> {
14921502
14931503 for this_htlc in inner. htlcs . iter ( ) {
14941504 assert ! ( this_htlc. transaction_output_index. is_some( ) ) ;
1495- let htlc_tx = build_htlc_transaction ( & txid, inner. feerate_per_kw , channel_parameters. contest_delay ( ) , & this_htlc, self . opt_anchors ( ) , & keys. broadcaster_delayed_payment_key , & keys. revocation_key ) ;
1505+ let htlc_tx = build_htlc_transaction ( & txid, inner. feerate_per_kw , channel_parameters. contest_delay ( ) , & this_htlc, self . opt_anchors ( ) , self . opt_non_zero_fee_anchors . is_some ( ) , & keys. broadcaster_delayed_payment_key , & keys. revocation_key ) ;
14961506
14971507 let htlc_redeemscript = get_htlc_redeemscript_with_explicit_keys ( & this_htlc, self . opt_anchors ( ) , & keys. broadcaster_htlc_key , & keys. countersignatory_htlc_key , & keys. revocation_key ) ;
14981508
@@ -1514,7 +1524,7 @@ impl<'a> TrustedCommitmentTransaction<'a> {
15141524 // Further, we should never be provided the preimage for an HTLC-Timeout transaction.
15151525 if this_htlc. offered && preimage. is_some ( ) { unreachable ! ( ) ; }
15161526
1517- let mut htlc_tx = build_htlc_transaction ( & txid, inner. feerate_per_kw , channel_parameters. contest_delay ( ) , & this_htlc, self . opt_anchors ( ) , & keys. broadcaster_delayed_payment_key , & keys. revocation_key ) ;
1527+ let mut htlc_tx = build_htlc_transaction ( & txid, inner. feerate_per_kw , channel_parameters. contest_delay ( ) , & this_htlc, self . opt_anchors ( ) , self . opt_non_zero_fee_anchors . is_some ( ) , & keys. broadcaster_delayed_payment_key , & keys. revocation_key ) ;
15181528
15191529 let htlc_redeemscript = get_htlc_redeemscript_with_explicit_keys ( & this_htlc, self . opt_anchors ( ) , & keys. broadcaster_htlc_key , & keys. countersignatory_htlc_key , & keys. revocation_key ) ;
15201530
0 commit comments