@@ -3077,12 +3077,18 @@ impl<SP: Deref> ChannelContext<SP> where SP::Target: SignerProvider {
3077
3077
debug_assert!(!channel_type.supports_any_optional_bits());
3078
3078
debug_assert!(!channel_type.requires_unknown_bits_from(&channelmanager::provided_channel_type_features(&config)));
3079
3079
3080
- let (commitment_conf_target, anchor_outputs_value_msat) = if channel_type.supports_anchors_zero_fee_htlc_tx() {
3081
- (ConfirmationTarget::AnchorChannelFee, ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000)
3082
- } else {
3083
- (ConfirmationTarget::NonAnchorChannelFee, 0)
3084
- };
3085
- let commitment_feerate = fee_estimator.bounded_sat_per_1000_weight(commitment_conf_target);
3080
+ let (commitment_feerate, anchor_outputs_value_msat) =
3081
+ if channel_type.supports_anchor_zero_fee_commitments() {
3082
+ (0, 0)
3083
+ } else if channel_type.supports_anchors_zero_fee_htlc_tx() {
3084
+ let feerate = fee_estimator
3085
+ .bounded_sat_per_1000_weight(ConfirmationTarget::AnchorChannelFee);
3086
+ (feerate, ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000)
3087
+ } else {
3088
+ let feerate = fee_estimator
3089
+ .bounded_sat_per_1000_weight(ConfirmationTarget::NonAnchorChannelFee);
3090
+ (feerate, 0)
3091
+ };
3086
3092
3087
3093
let value_to_self_msat = channel_value_satoshis * 1000 - push_msat;
3088
3094
let commitment_tx_fee = commit_tx_fee_sat(commitment_feerate, MIN_AFFORDABLE_HTLC_COUNT, &channel_type) * 1000;
@@ -5290,6 +5296,15 @@ impl<SP: Deref> FundedChannel<SP> where
5290
5296
feerate_per_kw: u32, cur_feerate_per_kw: Option<u32>, logger: &L
5291
5297
) -> Result<(), ChannelError> where F::Target: FeeEstimator, L::Target: Logger,
5292
5298
{
5299
+ if channel_type.supports_anchor_zero_fee_commitments() {
5300
+ if feerate_per_kw != 0 {
5301
+ let err = "Zero Fee Channels must never attempt to use a fee".to_owned();
5302
+ return Err(ChannelError::close(err));
5303
+ } else {
5304
+ return Ok(());
5305
+ }
5306
+ }
5307
+
5293
5308
let lower_limit_conf_target = if channel_type.supports_anchors_zero_fee_htlc_tx() {
5294
5309
ConfirmationTarget::MinAllowedAnchorChannelRemoteFee
5295
5310
} else {
@@ -13323,6 +13338,34 @@ mod tests {
13323
13338
do_test_supports_channel_type(config, expected_channel_type)
13324
13339
}
13325
13340
13341
+ #[test]
13342
+ fn test_supports_zero_fee_commitments() {
13343
+ // Tests that if both sides support and negotiate `anchors_zero_fee_commitments`, it is
13344
+ // the resulting `channel_type`.
13345
+ let mut config = UserConfig::default();
13346
+ config.channel_handshake_config.negotiate_anchor_zero_fee_commitments = true;
13347
+
13348
+ let mut expected_channel_type = ChannelTypeFeatures::empty();
13349
+ expected_channel_type.set_anchor_zero_fee_commitments_required();
13350
+
13351
+ do_test_supports_channel_type(config, expected_channel_type)
13352
+ }
13353
+
13354
+ #[test]
13355
+ fn test_supports_zero_fee_commitments_and_htlc_tx_fee() {
13356
+ // Tests that if both sides support and negotiate `anchors_zero_fee_commitments` and
13357
+ // `anchors_zero_fee_htlc_tx`, the resulting `channel_type` is
13358
+ // `anchors_zero_fee_commitments`.
13359
+ let mut config = UserConfig::default();
13360
+ config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
13361
+ config.channel_handshake_config.negotiate_anchor_zero_fee_commitments = true;
13362
+
13363
+ let mut expected_channel_type = ChannelTypeFeatures::empty();
13364
+ expected_channel_type.set_anchor_zero_fee_commitments_required();
13365
+
13366
+ do_test_supports_channel_type(config, expected_channel_type)
13367
+ }
13368
+
13326
13369
fn do_test_supports_channel_type(config: UserConfig, expected_channel_type: ChannelTypeFeatures) {
13327
13370
let secp_ctx = Secp256k1::new();
13328
13371
let fee_estimator = LowerBoundedFeeEstimator::new(&TestFeeEstimator{fee_est: 15000});
@@ -13356,6 +13399,14 @@ mod tests {
13356
13399
13357
13400
assert_eq!(channel_a.funding.get_channel_type(), &expected_channel_type);
13358
13401
assert_eq!(channel_b.funding.get_channel_type(), &expected_channel_type);
13402
+
13403
+ if expected_channel_type.supports_anchor_zero_fee_commitments() {
13404
+ assert_eq!(channel_a.context.feerate_per_kw, 0);
13405
+ assert_eq!(channel_b.context.feerate_per_kw, 0);
13406
+ } else {
13407
+ assert_ne!(channel_a.context.feerate_per_kw, 0);
13408
+ assert_ne!(channel_b.context.feerate_per_kw, 0);
13409
+ }
13359
13410
}
13360
13411
13361
13412
#[test]
0 commit comments