@@ -9458,3 +9458,81 @@ fn test_non_final_funding_tx() {
94589458 assert ! ( nodes[ 0 ] . node. funding_transaction_generated( & temp_channel_id, & nodes[ 1 ] . node. get_our_node_id( ) , tx. clone( ) ) . is_ok( ) ) ;
94599459 get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendFundingCreated , nodes[ 1 ] . node. get_our_node_id( ) ) ;
94609460}
9461+
9462+ #[ test]
9463+ fn accept_busted_but_better_fee ( ) {
9464+ // If a peer sends us a fee update that is too low, but higher than our previous channel
9465+ // feerate, we should accept it. In the future we may want to consider closing the channel
9466+ // later, but for now we only accept the update.
9467+ let mut chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
9468+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
9469+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
9470+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
9471+
9472+ create_chan_between_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , channelmanager:: provided_init_features ( ) , channelmanager:: provided_init_features ( ) ) ;
9473+
9474+ // Set nodes[1] to expect 5,000 sat/kW.
9475+ {
9476+ let mut feerate_lock = chanmon_cfgs[ 1 ] . fee_estimator . sat_per_kw . lock ( ) . unwrap ( ) ;
9477+ * feerate_lock = 5000 ;
9478+ }
9479+
9480+ // If nodes[0] increases their feerate, even if its not enough, nodes[1] should accept it.
9481+ {
9482+ let mut feerate_lock = chanmon_cfgs[ 0 ] . fee_estimator . sat_per_kw . lock ( ) . unwrap ( ) ;
9483+ * feerate_lock = 1000 ;
9484+ }
9485+ nodes[ 0 ] . node . timer_tick_occurred ( ) ;
9486+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
9487+
9488+ let events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
9489+ assert_eq ! ( events. len( ) , 1 ) ;
9490+ match events[ 0 ] {
9491+ MessageSendEvent :: UpdateHTLCs { updates : msgs:: CommitmentUpdate { ref update_fee, ref commitment_signed, .. } , .. } => {
9492+ nodes[ 1 ] . node . handle_update_fee ( & nodes[ 0 ] . node . get_our_node_id ( ) , update_fee. as_ref ( ) . unwrap ( ) ) ;
9493+ commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , commitment_signed, false ) ;
9494+ } ,
9495+ _ => panic ! ( "Unexpected event" ) ,
9496+ } ;
9497+
9498+ // If nodes[0] increases their feerate further, even if its not enough, nodes[1] should accept
9499+ // it.
9500+ {
9501+ let mut feerate_lock = chanmon_cfgs[ 0 ] . fee_estimator . sat_per_kw . lock ( ) . unwrap ( ) ;
9502+ * feerate_lock = 2000 ;
9503+ }
9504+ nodes[ 0 ] . node . timer_tick_occurred ( ) ;
9505+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
9506+
9507+ let events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
9508+ assert_eq ! ( events. len( ) , 1 ) ;
9509+ match events[ 0 ] {
9510+ MessageSendEvent :: UpdateHTLCs { updates : msgs:: CommitmentUpdate { ref update_fee, ref commitment_signed, .. } , .. } => {
9511+ nodes[ 1 ] . node . handle_update_fee ( & nodes[ 0 ] . node . get_our_node_id ( ) , update_fee. as_ref ( ) . unwrap ( ) ) ;
9512+ commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , commitment_signed, false ) ;
9513+ } ,
9514+ _ => panic ! ( "Unexpected event" ) ,
9515+ } ;
9516+
9517+ // However, if nodes[0] decreases their feerate, nodes[1] should reject it and close the
9518+ // channel.
9519+ {
9520+ let mut feerate_lock = chanmon_cfgs[ 0 ] . fee_estimator . sat_per_kw . lock ( ) . unwrap ( ) ;
9521+ * feerate_lock = 1000 ;
9522+ }
9523+ nodes[ 0 ] . node . timer_tick_occurred ( ) ;
9524+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
9525+
9526+ let events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
9527+ assert_eq ! ( events. len( ) , 1 ) ;
9528+ match events[ 0 ] {
9529+ MessageSendEvent :: UpdateHTLCs { updates : msgs:: CommitmentUpdate { ref update_fee, .. } , .. } => {
9530+ nodes[ 1 ] . node . handle_update_fee ( & nodes[ 0 ] . node . get_our_node_id ( ) , update_fee. as_ref ( ) . unwrap ( ) ) ;
9531+ check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: ProcessingError {
9532+ err: "Peer's feerate much too low. Actual: 1000. Our expected lower limit: 5000 (- 250)" . to_owned( ) } ) ;
9533+ check_closed_broadcast ! ( nodes[ 1 ] , true ) ;
9534+ check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
9535+ } ,
9536+ _ => panic ! ( "Unexpected event" ) ,
9537+ } ;
9538+ }
0 commit comments