@@ -565,80 +565,87 @@ fn test_scid_alias_returned() {
565
565
. blamed_chan_closed( false ) . expected_htlc_error_data( 0x1000 |12 , & err_data) ) ;
566
566
}
567
567
568
- #[ test]
569
- fn test_simple_0conf_channel ( ) {
570
- // If our peer tells us they will accept our channel with 0 confs, and we funded the channel,
571
- // we should trust the funding won't be double-spent (assuming `trust_own_funding_0conf` is
572
- // set)!
573
- // Further, if we `accept_inbound_channel_from_trusted_peer_0conf`, funding locked messages
574
- // should fly immediately and the channel should be available for use as soon as they are
575
- // received.
568
+ // Receiver must have been initialized with manually_accept_inbound_channels set to true.
569
+ fn open_zero_conf_channel < ' a , ' b , ' c , ' d > ( initiator : & ' a Node < ' b , ' c , ' d > , receiver : & ' a Node < ' b , ' c , ' d > , initiator_config : Option < UserConfig > ) -> bitcoin:: Transaction {
570
+ initiator. node . create_channel ( receiver. node . get_our_node_id ( ) , 100_000 , 10_001 , 42 , initiator_config) . unwrap ( ) ;
571
+ let open_channel = get_event_msg ! ( initiator, MessageSendEvent :: SendOpenChannel , receiver. node. get_our_node_id( ) ) ;
576
572
577
- let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
578
- let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
579
- let mut chan_config = test_default_channel_config ( ) ;
580
- chan_config. manually_accept_inbound_channels = true ;
581
-
582
- let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( chan_config) ] ) ;
583
- let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
584
-
585
- nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , None ) . unwrap ( ) ;
586
- let open_channel = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
587
-
588
- nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & open_channel) ;
589
- let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
573
+ receiver. node . handle_open_channel ( & initiator. node . get_our_node_id ( ) , InitFeatures :: known ( ) , & open_channel) ;
574
+ let events = receiver. node . get_and_clear_pending_events ( ) ;
590
575
assert_eq ! ( events. len( ) , 1 ) ;
591
576
match events[ 0 ] {
592
577
Event :: OpenChannelRequest { temporary_channel_id, .. } => {
593
- nodes [ 1 ] . node . accept_inbound_channel_from_trusted_peer_0conf ( & temporary_channel_id, & nodes [ 0 ] . node . get_our_node_id ( ) , 0 ) . unwrap ( ) ;
578
+ receiver . node . accept_inbound_channel_from_trusted_peer_0conf ( & temporary_channel_id, & initiator . node . get_our_node_id ( ) , 0 ) . unwrap ( ) ;
594
579
} ,
595
580
_ => panic ! ( "Unexpected event" ) ,
596
581
} ;
597
582
598
- let mut accept_channel = get_event_msg ! ( nodes [ 1 ] , MessageSendEvent :: SendAcceptChannel , nodes [ 0 ] . node. get_our_node_id( ) ) ;
583
+ let mut accept_channel = get_event_msg ! ( receiver , MessageSendEvent :: SendAcceptChannel , initiator . node. get_our_node_id( ) ) ;
599
584
assert_eq ! ( accept_channel. minimum_depth, 0 ) ;
600
- nodes [ 0 ] . node . handle_accept_channel ( & nodes [ 1 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & accept_channel) ;
585
+ initiator . node . handle_accept_channel ( & receiver . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & accept_channel) ;
601
586
602
- let ( temporary_channel_id, tx, _) = create_funding_transaction ( & nodes [ 0 ] , & nodes [ 1 ] . node . get_our_node_id ( ) , 100000 , 42 ) ;
603
- nodes [ 0 ] . node . funding_transaction_generated ( & temporary_channel_id, & nodes [ 1 ] . node . get_our_node_id ( ) , tx. clone ( ) ) . unwrap ( ) ;
604
- let funding_created = get_event_msg ! ( nodes [ 0 ] , MessageSendEvent :: SendFundingCreated , nodes [ 1 ] . node. get_our_node_id( ) ) ;
587
+ let ( temporary_channel_id, tx, _) = create_funding_transaction ( & initiator , & receiver . node . get_our_node_id ( ) , 100_000 , 42 ) ;
588
+ initiator . node . funding_transaction_generated ( & temporary_channel_id, & receiver . node . get_our_node_id ( ) , tx. clone ( ) ) . unwrap ( ) ;
589
+ let funding_created = get_event_msg ! ( initiator , MessageSendEvent :: SendFundingCreated , receiver . node. get_our_node_id( ) ) ;
605
590
606
- nodes [ 1 ] . node . handle_funding_created ( & nodes [ 0 ] . node . get_our_node_id ( ) , & funding_created) ;
607
- check_added_monitors ! ( nodes [ 1 ] , 1 ) ;
608
- let bs_signed_locked = nodes [ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
591
+ receiver . node . handle_funding_created ( & initiator . node . get_our_node_id ( ) , & funding_created) ;
592
+ check_added_monitors ! ( receiver , 1 ) ;
593
+ let bs_signed_locked = receiver . node . get_and_clear_pending_msg_events ( ) ;
609
594
assert_eq ! ( bs_signed_locked. len( ) , 2 ) ;
610
595
let as_funding_locked;
611
596
match & bs_signed_locked[ 0 ] {
612
597
MessageSendEvent :: SendFundingSigned { node_id, msg } => {
613
- assert_eq ! ( * node_id, nodes [ 0 ] . node. get_our_node_id( ) ) ;
614
- nodes [ 0 ] . node . handle_funding_signed ( & nodes [ 1 ] . node . get_our_node_id ( ) , & msg) ;
615
- check_added_monitors ! ( nodes [ 0 ] , 1 ) ;
598
+ assert_eq ! ( * node_id, initiator . node. get_our_node_id( ) ) ;
599
+ initiator . node . handle_funding_signed ( & receiver . node . get_our_node_id ( ) , & msg) ;
600
+ check_added_monitors ! ( initiator , 1 ) ;
616
601
617
- assert_eq ! ( nodes [ 0 ] . tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) . len( ) , 1 ) ;
618
- assert_eq ! ( nodes [ 0 ] . tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) . split_off( 0 ) [ 0 ] , tx) ;
602
+ assert_eq ! ( initiator . tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) . len( ) , 1 ) ;
603
+ assert_eq ! ( initiator . tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) . split_off( 0 ) [ 0 ] , tx) ;
619
604
620
- as_funding_locked = get_event_msg ! ( nodes [ 0 ] , MessageSendEvent :: SendFundingLocked , nodes [ 1 ] . node. get_our_node_id( ) ) ;
605
+ as_funding_locked = get_event_msg ! ( initiator , MessageSendEvent :: SendFundingLocked , receiver . node. get_our_node_id( ) ) ;
621
606
}
622
607
_ => panic ! ( "Unexpected event" ) ,
623
608
}
624
609
match & bs_signed_locked[ 1 ] {
625
610
MessageSendEvent :: SendFundingLocked { node_id, msg } => {
626
- assert_eq ! ( * node_id, nodes [ 0 ] . node. get_our_node_id( ) ) ;
627
- nodes [ 0 ] . node . handle_funding_locked ( & nodes [ 1 ] . node . get_our_node_id ( ) , & msg) ;
611
+ assert_eq ! ( * node_id, initiator . node. get_our_node_id( ) ) ;
612
+ initiator . node . handle_funding_locked ( & receiver . node . get_our_node_id ( ) , & msg) ;
628
613
}
629
614
_ => panic ! ( "Unexpected event" ) ,
630
615
}
631
616
632
- nodes [ 1 ] . node . handle_funding_locked ( & nodes [ 0 ] . node . get_our_node_id ( ) , & as_funding_locked) ;
617
+ receiver . node . handle_funding_locked ( & initiator . node . get_our_node_id ( ) , & as_funding_locked) ;
633
618
634
- let as_channel_update = get_event_msg ! ( nodes [ 0 ] , MessageSendEvent :: SendChannelUpdate , nodes [ 1 ] . node. get_our_node_id( ) ) ;
635
- let bs_channel_update = get_event_msg ! ( nodes [ 1 ] , MessageSendEvent :: SendChannelUpdate , nodes [ 0 ] . node. get_our_node_id( ) ) ;
619
+ let as_channel_update = get_event_msg ! ( initiator , MessageSendEvent :: SendChannelUpdate , receiver . node. get_our_node_id( ) ) ;
620
+ let bs_channel_update = get_event_msg ! ( receiver , MessageSendEvent :: SendChannelUpdate , initiator . node. get_our_node_id( ) ) ;
636
621
637
- nodes [ 0 ] . node . handle_channel_update ( & nodes [ 1 ] . node . get_our_node_id ( ) , & bs_channel_update) ;
638
- nodes [ 1 ] . node . handle_channel_update ( & nodes [ 0 ] . node . get_our_node_id ( ) , & as_channel_update) ;
622
+ initiator . node . handle_channel_update ( & receiver . node . get_our_node_id ( ) , & bs_channel_update) ;
623
+ receiver . node . handle_channel_update ( & initiator . node . get_our_node_id ( ) , & as_channel_update) ;
639
624
640
- assert_eq ! ( nodes[ 0 ] . node. list_usable_channels( ) . len( ) , 1 ) ;
641
- assert_eq ! ( nodes[ 1 ] . node. list_usable_channels( ) . len( ) , 1 ) ;
625
+ assert_eq ! ( initiator. node. list_usable_channels( ) . len( ) , 1 ) ;
626
+ assert_eq ! ( receiver. node. list_usable_channels( ) . len( ) , 1 ) ;
627
+
628
+ tx
629
+ }
630
+
631
+ #[ test]
632
+ fn test_simple_0conf_channel ( ) {
633
+ // If our peer tells us they will accept our channel with 0 confs, and we funded the channel,
634
+ // we should trust the funding won't be double-spent (assuming `trust_own_funding_0conf` is
635
+ // set)!
636
+ // Further, if we `accept_inbound_channel_from_trusted_peer_0conf`, funding locked messages
637
+ // should fly immediately and the channel should be available for use as soon as they are
638
+ // received.
639
+
640
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
641
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
642
+ let mut chan_config = test_default_channel_config ( ) ;
643
+ chan_config. manually_accept_inbound_channels = true ;
644
+
645
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( chan_config) ] ) ;
646
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
647
+
648
+ open_zero_conf_channel ( & nodes[ 0 ] , & nodes[ 1 ] , None ) ;
642
649
643
650
send_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 100_000 ) ;
644
651
}
@@ -790,3 +797,54 @@ fn test_0conf_channel_with_async_monitor() {
790
797
791
798
send_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 100_000 ) ;
792
799
}
800
+
801
+ #[ test]
802
+ fn test_public_0conf_channel ( ) {
803
+ // Tests that we will announce a public channel (after confirmation) even if its 0conf.
804
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
805
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
806
+ let mut chan_config = test_default_channel_config ( ) ;
807
+ chan_config. manually_accept_inbound_channels = true ;
808
+
809
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( chan_config) ] ) ;
810
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
811
+
812
+ // This is the default but we force it on anyway
813
+ chan_config. channel_options . announced_channel = true ;
814
+ let tx = open_zero_conf_channel ( & nodes[ 0 ] , & nodes[ 1 ] , Some ( chan_config) ) ;
815
+
816
+ // We can use the channel immediately, but we can't announce it until we get 6+ confirmations
817
+ send_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 100_000 ) ;
818
+
819
+ let scid = confirm_transaction ( & nodes[ 0 ] , & tx) ;
820
+ let as_announcement_sigs = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendAnnouncementSignatures , nodes[ 1 ] . node. get_our_node_id( ) ) ;
821
+ assert_eq ! ( confirm_transaction( & nodes[ 1 ] , & tx) , scid) ;
822
+ let bs_announcement_sigs = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAnnouncementSignatures , nodes[ 0 ] . node. get_our_node_id( ) ) ;
823
+
824
+ nodes[ 1 ] . node . handle_announcement_signatures ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_announcement_sigs) ;
825
+ nodes[ 0 ] . node . handle_announcement_signatures ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_announcement_sigs) ;
826
+
827
+ let bs_announcement = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
828
+ assert_eq ! ( bs_announcement. len( ) , 1 ) ;
829
+ let announcement;
830
+ let bs_update;
831
+ match bs_announcement[ 0 ] {
832
+ MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
833
+ announcement = msg. clone ( ) ;
834
+ bs_update = update_msg. clone ( ) ;
835
+ } ,
836
+ _ => panic ! ( "Unexpected event" ) ,
837
+ } ;
838
+
839
+ let as_announcement = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
840
+ assert_eq ! ( as_announcement. len( ) , 1 ) ;
841
+ match as_announcement[ 0 ] {
842
+ MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
843
+ assert ! ( announcement == * msg) ;
844
+ assert_eq ! ( update_msg. contents. short_channel_id, scid) ;
845
+ assert_eq ! ( update_msg. contents. short_channel_id, announcement. contents. short_channel_id) ;
846
+ assert_eq ! ( update_msg. contents. short_channel_id, bs_update. contents. short_channel_id) ;
847
+ } ,
848
+ _ => panic ! ( "Unexpected event" ) ,
849
+ } ;
850
+ }
0 commit comments