@@ -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