@@ -1560,6 +1560,41 @@ fn test_chan_reserve_dust_inbound_htlcs_outbound_chan() {
15601560 assert_eq!( err, "Cannot send value that would put counterparty balance under holder-announced channel reserve value" ) ) ;
15611561}
15621562
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+
15631598#[ test]
15641599fn test_chan_reserve_dust_inbound_htlcs_inbound_chan ( ) {
15651600 // Test that if we receive many dust HTLCs over an inbound channel, they don't count when
0 commit comments