@@ -2056,7 +2056,7 @@ pub(super) struct ChannelContext<SP: Deref> where SP::Target: SignerProvider {
2056
2056
holding_cell_update_fee: Option<u32>,
2057
2057
next_holder_htlc_id: u64,
2058
2058
pub(super) next_counterparty_htlc_id: u64,
2059
- feerate_per_kw: u32,
2059
+ pub(super) feerate_per_kw: u32,
2060
2060
2061
2061
/// The timestamp set on our latest `channel_update` message for this channel. It is updated
2062
2062
/// when the channel is updated in ways which may impact the `channel_update` message or when a
@@ -11844,10 +11844,11 @@ mod tests {
11844
11844
use crate::types::payment::{PaymentHash, PaymentPreimage};
11845
11845
use crate::ln::channel_keys::{RevocationKey, RevocationBasepoint};
11846
11846
use crate::ln::channelmanager::{self, HTLCSource, PaymentId};
11847
- use crate::ln::channel::InitFeatures;
11848
11847
use crate::ln::channel::{AwaitingChannelReadyFlags, ChannelState, FundedChannel, InboundHTLCOutput, OutboundV1Channel, InboundV1Channel, OutboundHTLCOutput, InboundHTLCState, OutboundHTLCState, HTLCCandidate, HTLCInitiator, HTLCUpdateAwaitingACK, commit_tx_fee_sat};
11849
11848
use crate::ln::channel::{MAX_FUNDING_SATOSHIS_NO_WUMBO, TOTAL_BITCOIN_SUPPLY_SATOSHIS, MIN_THEIR_CHAN_RESERVE_SATOSHIS};
11850
- use crate::types::features::{ChannelFeatures, ChannelTypeFeatures, NodeFeatures};
11849
+ use crate::types::features::{ChannelFeatures, NodeFeatures};
11850
+ #[cfg(ldk_test_vectors)]
11851
+ use crate::types::features::ChannelTypeFeatures;
11851
11852
use crate::ln::msgs;
11852
11853
use crate::ln::msgs::{ChannelUpdate, UnsignedChannelUpdate, MAX_VALUE_MSAT};
11853
11854
use crate::ln::script::ShutdownScript;
@@ -13299,231 +13300,6 @@ mod tests {
13299
13300
SecretKey::from_slice(&<Vec<u8>>::from_hex("d09ffff62ddb2297ab000cc85bcb4283fdeb6aa052affbc9dddcf33b61078110").unwrap()[..]).unwrap());
13300
13301
}
13301
13302
13302
- #[test]
13303
- fn test_zero_conf_channel_type_support() {
13304
- let test_est = TestFeeEstimator::new(15000);
13305
- let feeest = LowerBoundedFeeEstimator::new(&test_est);
13306
- let secp_ctx = Secp256k1::new();
13307
- let seed = [42; 32];
13308
- let network = Network::Testnet;
13309
- let keys_provider = TestKeysInterface::new(&seed, network);
13310
- let logger = TestLogger::new();
13311
-
13312
- let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
13313
- let config = UserConfig::default();
13314
- let mut node_a_chan = OutboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
13315
- node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42, None, &logger).unwrap();
13316
-
13317
- let mut channel_type_features = ChannelTypeFeatures::only_static_remote_key();
13318
- channel_type_features.set_zero_conf_required();
13319
-
13320
- let mut open_channel_msg = node_a_chan.get_open_channel(ChainHash::using_genesis_block(network), &&logger).unwrap();
13321
- open_channel_msg.common_fields.channel_type = Some(channel_type_features);
13322
- let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
13323
- let res = InboundV1Channel::<&TestKeysInterface>::new(&feeest, &&keys_provider, &&keys_provider,
13324
- node_b_node_id, &channelmanager::provided_channel_type_features(&config),
13325
- &channelmanager::provided_init_features(&config), &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false);
13326
- assert!(res.is_ok());
13327
- }
13328
-
13329
- #[test]
13330
- fn test_supports_anchors_zero_htlc_tx_fee() {
13331
- // Tests that if both sides support and negotiate `anchors_zero_fee_htlc_tx`, it is the
13332
- // resulting `channel_type`.
13333
- let mut config = UserConfig::default();
13334
- config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
13335
-
13336
- let mut expected_channel_type = ChannelTypeFeatures::empty();
13337
- expected_channel_type.set_static_remote_key_required();
13338
- expected_channel_type.set_anchors_zero_fee_htlc_tx_required();
13339
-
13340
- do_test_supports_channel_type(config, expected_channel_type)
13341
- }
13342
-
13343
- #[test]
13344
- fn test_supports_zero_fee_commitments() {
13345
- // Tests that if both sides support and negotiate `anchors_zero_fee_commitments`, it is
13346
- // the resulting `channel_type`.
13347
- let mut config = UserConfig::default();
13348
- config.channel_handshake_config.negotiate_anchor_zero_fee_commitments = true;
13349
-
13350
- let mut expected_channel_type = ChannelTypeFeatures::empty();
13351
- expected_channel_type.set_anchor_zero_fee_commitments_required();
13352
-
13353
- do_test_supports_channel_type(config, expected_channel_type)
13354
- }
13355
-
13356
- #[test]
13357
- fn test_supports_zero_fee_commitments_and_htlc_tx_fee() {
13358
- // Tests that if both sides support and negotiate `anchors_zero_fee_commitments` and
13359
- // `anchors_zero_fee_htlc_tx`, the resulting `channel_type` is
13360
- // `anchors_zero_fee_commitments`.
13361
- let mut config = UserConfig::default();
13362
- config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
13363
- config.channel_handshake_config.negotiate_anchor_zero_fee_commitments = true;
13364
-
13365
- let mut expected_channel_type = ChannelTypeFeatures::empty();
13366
- expected_channel_type.set_anchor_zero_fee_commitments_required();
13367
-
13368
- do_test_supports_channel_type(config, expected_channel_type)
13369
- }
13370
-
13371
- fn do_test_supports_channel_type(config: UserConfig, expected_channel_type: ChannelTypeFeatures) {
13372
- let secp_ctx = Secp256k1::new();
13373
- let test_est = TestFeeEstimator::new(15000);
13374
- let fee_estimator = LowerBoundedFeeEstimator::new(&test_est);
13375
- let network = Network::Testnet;
13376
- let keys_provider = TestKeysInterface::new(&[42; 32], network);
13377
- let logger = TestLogger::new();
13378
-
13379
- let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
13380
- let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
13381
-
13382
- // Assert that we get `static_remotekey` when no custom config is negotiated.
13383
- let channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
13384
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
13385
- &channelmanager::provided_init_features(&UserConfig::default()), 10000000, 100000, 42,
13386
- &config, 0, 42, None, &logger
13387
- ).unwrap();
13388
- assert_eq!(channel_a.funding.get_channel_type(), &ChannelTypeFeatures::only_static_remote_key());
13389
-
13390
- let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
13391
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
13392
- &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
13393
- None, &logger
13394
- ).unwrap();
13395
-
13396
- let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network), &&logger).unwrap();
13397
- let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
13398
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
13399
- &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
13400
- &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
13401
- ).unwrap();
13402
-
13403
- assert_eq!(channel_a.funding.get_channel_type(), &expected_channel_type);
13404
- assert_eq!(channel_b.funding.get_channel_type(), &expected_channel_type);
13405
-
13406
- if expected_channel_type.supports_anchor_zero_fee_commitments() {
13407
- assert_eq!(channel_a.context.feerate_per_kw, 0);
13408
- assert_eq!(channel_b.context.feerate_per_kw, 0);
13409
- } else {
13410
- assert_ne!(channel_a.context.feerate_per_kw, 0);
13411
- assert_ne!(channel_b.context.feerate_per_kw, 0);
13412
- }
13413
- }
13414
-
13415
- #[test]
13416
- fn test_rejects_implicit_simple_anchors() {
13417
- // Tests that if `option_anchors` is being negotiated implicitly through the intersection of
13418
- // each side's `InitFeatures`, it is rejected.
13419
- let secp_ctx = Secp256k1::new();
13420
- let test_est = TestFeeEstimator::new(15000);
13421
- let fee_estimator = LowerBoundedFeeEstimator::new(&test_est);
13422
- let network = Network::Testnet;
13423
- let keys_provider = TestKeysInterface::new(&[42; 32], network);
13424
- let logger = TestLogger::new();
13425
-
13426
- let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
13427
- let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
13428
-
13429
- let config = UserConfig::default();
13430
-
13431
- // See feature bit assignments: https://github.com/lightning/bolts/blob/master/09-features.md
13432
- let static_remote_key_required: u64 = 1 << 12;
13433
- let simple_anchors_required: u64 = 1 << 20;
13434
- let raw_init_features = static_remote_key_required | simple_anchors_required;
13435
- let init_features_with_simple_anchors = InitFeatures::from_le_bytes(raw_init_features.to_le_bytes().to_vec());
13436
-
13437
- let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
13438
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
13439
- &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
13440
- None, &logger
13441
- ).unwrap();
13442
-
13443
- // Set `channel_type` to `None` to force the implicit feature negotiation.
13444
- let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network), &&logger).unwrap();
13445
- open_channel_msg.common_fields.channel_type = None;
13446
-
13447
- // Since A supports both `static_remote_key` and `option_anchors`, but B only accepts
13448
- // `static_remote_key`, it will fail the channel.
13449
- let channel_b = InboundV1Channel::<&TestKeysInterface>::new(
13450
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
13451
- &channelmanager::provided_channel_type_features(&config), &init_features_with_simple_anchors,
13452
- &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
13453
- );
13454
- assert!(channel_b.is_err());
13455
- }
13456
-
13457
- #[test]
13458
- fn test_rejects_simple_anchors_channel_type() {
13459
- // Tests that if `option_anchors` is being negotiated through the `channel_type` feature,
13460
- // it is rejected.
13461
- let secp_ctx = Secp256k1::new();
13462
- let test_est = TestFeeEstimator::new(15000);
13463
- let fee_estimator = LowerBoundedFeeEstimator::new(&test_est);
13464
- let network = Network::Testnet;
13465
- let keys_provider = TestKeysInterface::new(&[42; 32], network);
13466
- let logger = TestLogger::new();
13467
-
13468
- let node_id_a = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[1; 32]).unwrap());
13469
- let node_id_b = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[2; 32]).unwrap());
13470
-
13471
- let config = UserConfig::default();
13472
-
13473
- // See feature bit assignments: https://github.com/lightning/bolts/blob/master/09-features.md
13474
- let static_remote_key_required: u64 = 1 << 12;
13475
- let simple_anchors_required: u64 = 1 << 20;
13476
- let simple_anchors_raw_features = static_remote_key_required | simple_anchors_required;
13477
- let simple_anchors_init = InitFeatures::from_le_bytes(simple_anchors_raw_features.to_le_bytes().to_vec());
13478
- let simple_anchors_channel_type = ChannelTypeFeatures::from_le_bytes(simple_anchors_raw_features.to_le_bytes().to_vec());
13479
- assert!(!simple_anchors_init.requires_unknown_bits());
13480
- assert!(!simple_anchors_channel_type.requires_unknown_bits());
13481
-
13482
- // First, we'll try to open a channel between A and B where A requests a channel type for
13483
- // the original `option_anchors` feature (non zero fee htlc tx). This should be rejected by
13484
- // B as it's not supported by LDK.
13485
- let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
13486
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_b,
13487
- &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42,
13488
- None, &logger
13489
- ).unwrap();
13490
-
13491
- let mut open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network), &&logger).unwrap();
13492
- open_channel_msg.common_fields.channel_type = Some(simple_anchors_channel_type.clone());
13493
-
13494
- let res = InboundV1Channel::<&TestKeysInterface>::new(
13495
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
13496
- &channelmanager::provided_channel_type_features(&config), &simple_anchors_init,
13497
- &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
13498
- );
13499
- assert!(res.is_err());
13500
-
13501
- // Then, we'll try to open another channel where A requests a channel type for
13502
- // `anchors_zero_fee_htlc_tx`. B is malicious and tries to downgrade the channel type to the
13503
- // original `option_anchors` feature, which should be rejected by A as it's not supported by
13504
- // LDK.
13505
- let mut channel_a = OutboundV1Channel::<&TestKeysInterface>::new(
13506
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_b, &simple_anchors_init,
13507
- 10000000, 100000, 42, &config, 0, 42, None, &logger
13508
- ).unwrap();
13509
-
13510
- let open_channel_msg = channel_a.get_open_channel(ChainHash::using_genesis_block(network), &&logger).unwrap();
13511
-
13512
- let mut channel_b = InboundV1Channel::<&TestKeysInterface>::new(
13513
- &fee_estimator, &&keys_provider, &&keys_provider, node_id_a,
13514
- &channelmanager::provided_channel_type_features(&config), &channelmanager::provided_init_features(&config),
13515
- &open_channel_msg, 7, &config, 0, &&logger, /*is_0conf=*/false
13516
- ).unwrap();
13517
-
13518
- let mut accept_channel_msg = channel_b.get_accept_channel_message(&&logger).unwrap();
13519
- accept_channel_msg.common_fields.channel_type = Some(simple_anchors_channel_type.clone());
13520
-
13521
- let res = channel_a.accept_channel(
13522
- &accept_channel_msg, &config.channel_handshake_limits, &simple_anchors_init
13523
- );
13524
- assert!(res.is_err());
13525
- }
13526
-
13527
13303
#[test]
13528
13304
fn test_waiting_for_batch() {
13529
13305
let test_est = TestFeeEstimator::new(15000);
0 commit comments