@@ -1560,6 +1560,41 @@ fn test_chan_reserve_dust_inbound_htlcs_outbound_chan() {
1560
1560
assert_eq!( err, "Cannot send value that would put counterparty balance under holder-announced channel reserve value" ) ) ;
1561
1561
}
1562
1562
1563
+ #[ test]
1564
+ fn test_chan_init_feerate_unaffordability ( ) {
1565
+ // Test that we will reject channel opens which do not leave enough to pay for any HTLCs due to
1566
+ // channel reserve and feerate requirements.
1567
+ let mut chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
1568
+ let feerate_per_kw = * chanmon_cfgs[ 0 ] . fee_estimator . sat_per_kw . lock ( ) . unwrap ( ) ;
1569
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
1570
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1571
+ let mut nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1572
+
1573
+ // Set the push_msat amount such that nodes[0] will not be able to afford to add even a single
1574
+ // HTLC.
1575
+ let mut push_amt = 100_000_000 ;
1576
+ push_amt -= commit_tx_fee_msat ( feerate_per_kw, MIN_AFFORDABLE_HTLC_COUNT as u64 ) ;
1577
+ assert_eq ! ( nodes[ 0 ] . node. create_channel( nodes[ 1 ] . node. get_our_node_id( ) , 100_000 , push_amt + 1 , 42 , None ) . unwrap_err( ) ,
1578
+ APIError :: APIMisuseError { err: "Funding amount (356) can't even pay fee for initial commitment transaction fee of 357." . to_string( ) } ) ;
1579
+
1580
+ // During open, we don't have a "counterparty channel reserve" to check against, so that
1581
+ // requirement only comes into play on the open_channel handling side.
1582
+ push_amt -= Channel :: < EnforcingSigner > :: get_holder_selected_channel_reserve_satoshis ( 100_000 ) * 1000 ;
1583
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100_000 , push_amt, 42 , None ) . unwrap ( ) ;
1584
+ let mut open_channel_msg = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1585
+ open_channel_msg. push_msat += 1 ;
1586
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & open_channel_msg) ;
1587
+
1588
+ let msg_events = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
1589
+ assert_eq ! ( msg_events. len( ) , 1 ) ;
1590
+ match msg_events[ 0 ] {
1591
+ MessageSendEvent :: HandleError { action : ErrorAction :: SendErrorMessage { ref msg } , node_id : _ } => {
1592
+ assert_eq ! ( msg. data, "Insufficient funding amount for initial reserve" ) ;
1593
+ } ,
1594
+ _ => panic ! ( "Unexpected event" ) ,
1595
+ }
1596
+ }
1597
+
1563
1598
#[ test]
1564
1599
fn test_chan_reserve_dust_inbound_htlcs_inbound_chan ( ) {
1565
1600
// Test that if we receive many dust HTLCs over an inbound channel, they don't count when
0 commit comments