@@ -767,3 +767,109 @@ fn test_0_conf_channel_with_async_monitor() {
767
767
768
768
send_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 100_000 ) ;
769
769
}
770
+
771
+ #[ test]
772
+ fn test_public_0_conf_channel ( ) {
773
+ // Tests that we will announce a public channel (after confirmation) even if its 0conf.
774
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
775
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
776
+ let mut chan_config = test_default_channel_config ( ) ;
777
+ chan_config. manually_accept_inbound_channels = true ;
778
+ chan_config. channel_options . announced_channel = true ;
779
+
780
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( chan_config) ] ) ;
781
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
782
+
783
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , None ) . unwrap ( ) ;
784
+ let open_channel = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
785
+
786
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & open_channel) ;
787
+ let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
788
+ assert_eq ! ( events. len( ) , 1 ) ;
789
+ match events[ 0 ] {
790
+ Event :: OpenChannelRequest { temporary_channel_id, .. } => {
791
+ nodes[ 1 ] . node . accept_inbound_channel_from_trusted_peer_0conf ( & temporary_channel_id, 0 ) . unwrap ( ) ;
792
+ } ,
793
+ _ => panic ! ( "Unexpected event" ) ,
794
+ } ;
795
+
796
+ let mut accept_channel = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAcceptChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
797
+ assert_eq ! ( accept_channel. minimum_depth, 0 ) ;
798
+ nodes[ 0 ] . node . handle_accept_channel ( & nodes[ 1 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & accept_channel) ;
799
+
800
+ let ( temporary_channel_id, tx, _) = create_funding_transaction ( & nodes[ 0 ] , 100000 , 42 ) ;
801
+ nodes[ 0 ] . node . funding_transaction_generated ( & temporary_channel_id, tx. clone ( ) ) . unwrap ( ) ;
802
+ let funding_created = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendFundingCreated , nodes[ 1 ] . node. get_our_node_id( ) ) ;
803
+
804
+ nodes[ 1 ] . node . handle_funding_created ( & nodes[ 0 ] . node . get_our_node_id ( ) , & funding_created) ;
805
+ check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
806
+ let bs_signed_locked = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
807
+ assert_eq ! ( bs_signed_locked. len( ) , 2 ) ;
808
+ let as_funding_locked;
809
+ match & bs_signed_locked[ 0 ] {
810
+ MessageSendEvent :: SendFundingSigned { node_id, msg } => {
811
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
812
+ nodes[ 0 ] . node . handle_funding_signed ( & nodes[ 1 ] . node . get_our_node_id ( ) , & msg) ;
813
+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
814
+
815
+ assert_eq ! ( nodes[ 0 ] . tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) . len( ) , 1 ) ;
816
+ assert_eq ! ( nodes[ 0 ] . tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) . split_off( 0 ) [ 0 ] , tx) ;
817
+
818
+ as_funding_locked = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendFundingLocked , nodes[ 1 ] . node. get_our_node_id( ) ) ;
819
+ }
820
+ _ => panic ! ( "Unexpected event" ) ,
821
+ }
822
+ match & bs_signed_locked[ 1 ] {
823
+ MessageSendEvent :: SendFundingLocked { node_id, msg } => {
824
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
825
+ nodes[ 0 ] . node . handle_funding_locked ( & nodes[ 1 ] . node . get_our_node_id ( ) , & msg) ;
826
+ }
827
+ _ => panic ! ( "Unexpected event" ) ,
828
+ }
829
+
830
+ nodes[ 1 ] . node . handle_funding_locked ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_funding_locked) ;
831
+
832
+ let as_channel_update = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendChannelUpdate , nodes[ 1 ] . node. get_our_node_id( ) ) ;
833
+ let bs_channel_update = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendChannelUpdate , nodes[ 0 ] . node. get_our_node_id( ) ) ;
834
+
835
+ nodes[ 0 ] . node . handle_channel_update ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_channel_update) ;
836
+ nodes[ 1 ] . node . handle_channel_update ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_channel_update) ;
837
+
838
+ assert_eq ! ( nodes[ 0 ] . node. list_usable_channels( ) . len( ) , 1 ) ;
839
+ assert_eq ! ( nodes[ 1 ] . node. list_usable_channels( ) . len( ) , 1 ) ;
840
+
841
+ // We can use the channel immediately, but we can't announce it until we get 6+ confirmations
842
+ send_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 100_000 ) ;
843
+
844
+ confirm_transaction ( & nodes[ 0 ] , & tx) ;
845
+ let as_announcement_sigs = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendAnnouncementSignatures , nodes[ 1 ] . node. get_our_node_id( ) ) ;
846
+ confirm_transaction ( & nodes[ 1 ] , & tx) ;
847
+ let bs_announcement_sigs = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAnnouncementSignatures , nodes[ 0 ] . node. get_our_node_id( ) ) ;
848
+
849
+ nodes[ 1 ] . node . handle_announcement_signatures ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_announcement_sigs) ;
850
+ nodes[ 0 ] . node . handle_announcement_signatures ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_announcement_sigs) ;
851
+
852
+ let bs_announcement = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
853
+ assert_eq ! ( bs_announcement. len( ) , 1 ) ;
854
+ let announcement;
855
+ let bs_update;
856
+ match bs_announcement[ 0 ] {
857
+ MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
858
+ announcement = msg. clone ( ) ;
859
+ bs_update = update_msg. clone ( ) ;
860
+ } ,
861
+ _ => panic ! ( "Unexpected event" ) ,
862
+ } ;
863
+
864
+ let as_announcement = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
865
+ assert_eq ! ( as_announcement. len( ) , 1 ) ;
866
+ match as_announcement[ 0 ] {
867
+ MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
868
+ assert ! ( announcement == * msg) ;
869
+ assert_eq ! ( update_msg. contents. short_channel_id, announcement. contents. short_channel_id) ;
870
+ assert_eq ! ( update_msg. contents. short_channel_id, bs_update. contents. short_channel_id) ;
871
+ } ,
872
+ _ => panic ! ( "Unexpected event" ) ,
873
+ } ;
874
+
875
+ }
0 commit comments