@@ -5927,6 +5927,31 @@ fn bolt2_open_channel_sending_node_checks_part2() {
59275927 assert ! ( PublicKey :: from_slice( & node0_to_1_send_open_channel. delayed_payment_basepoint. serialize( ) ) . is_ok( ) ) ;
59285928}
59295929
5930+ #[ test]
5931+ fn bolt2_open_channel_sane_dust_limit ( ) {
5932+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
5933+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
5934+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
5935+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
5936+
5937+ let channel_value_satoshis=1000000 ;
5938+ let push_msat=10001 ;
5939+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , channel_value_satoshis, push_msat, 42 , None ) . unwrap ( ) ;
5940+ let mut node0_to_1_send_open_channel = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
5941+ node0_to_1_send_open_channel. dust_limit_satoshis = 661 ;
5942+ node0_to_1_send_open_channel. channel_reserve_satoshis = 100001 ;
5943+
5944+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & node0_to_1_send_open_channel) ;
5945+ let events = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
5946+ let err_msg = match events[ 0 ] {
5947+ MessageSendEvent :: HandleError { action : ErrorAction :: SendErrorMessage { ref msg } , node_id : _ } => {
5948+ msg. clone ( )
5949+ } ,
5950+ _ => panic ! ( "Unexpected event" ) ,
5951+ } ;
5952+ assert_eq ! ( err_msg. data, "dust_limit_satoshis (661) is greater than the implementation limit (660)" ) ;
5953+ }
5954+
59305955// Test that if we fail to send an HTLC that is being freed from the holding cell, and the HTLC
59315956// originated from our node, its failure is surfaced to the user. We trigger this failure to
59325957// free the HTLC by increasing our fee while the HTLC is in the holding cell such that the HTLC
0 commit comments