@@ -118,14 +118,15 @@ enum TrustModel {
118
118
}
119
119
120
120
impl TrustModel {
121
- fn should_broadcast ( & self ) -> bool {
121
+ fn should_manually_broadcast ( & self ) -> bool {
122
122
match self {
123
123
TrustModel :: ClientTrustsLsp {
124
124
funding_tx_broadcast_safe,
125
125
payment_claimed,
126
126
funding_tx,
127
127
} => * funding_tx_broadcast_safe && * payment_claimed && funding_tx. is_some ( ) ,
128
- TrustModel :: LspTrustsClient => true ,
128
+ // in lsp-trusts-client, the broadcast is automatic, so we never need to manually broadcast.
129
+ TrustModel :: LspTrustsClient => false ,
129
130
}
130
131
}
131
132
@@ -180,6 +181,13 @@ impl TrustModel {
180
181
TrustModel :: LspTrustsClient => None ,
181
182
}
182
183
}
184
+
185
+ fn is_client_trusts_lsp ( & self ) -> bool {
186
+ match self {
187
+ TrustModel :: ClientTrustsLsp { .. } => true ,
188
+ TrustModel :: LspTrustsClient => false ,
189
+ }
190
+ }
183
191
}
184
192
185
193
/// The different states a requested JIT channel can be in.
@@ -459,8 +467,7 @@ struct OutboundJITChannel {
459
467
user_channel_id : u128 ,
460
468
opening_fee_params : LSPS2OpeningFeeParams ,
461
469
payment_size_msat : Option < u64 > ,
462
- client_trusts_lsp : bool ,
463
- trust_model : Option < TrustModel > ,
470
+ trust_model : TrustModel ,
464
471
}
465
472
466
473
impl OutboundJITChannel {
@@ -473,23 +480,15 @@ impl OutboundJITChannel {
473
480
state : OutboundJITChannelState :: new ( ) ,
474
481
opening_fee_params,
475
482
payment_size_msat,
476
- client_trusts_lsp,
477
- trust_model : None ,
483
+ trust_model : TrustModel :: new ( client_trusts_lsp) ,
478
484
}
479
485
}
480
486
481
487
fn htlc_intercepted (
482
488
& mut self , htlc : InterceptedHTLC ,
483
489
) -> Result < Option < HTLCInterceptedAction > , LightningError > {
484
- let was_initial =
485
- matches ! ( self . state, OutboundJITChannelState :: PendingInitialPayment { .. } ) ;
486
490
let action =
487
491
self . state . htlc_intercepted ( & self . opening_fee_params , & self . payment_size_msat , htlc) ?;
488
- if was_initial && self . trust_model . is_none ( ) {
489
- if !matches ! ( self . state, OutboundJITChannelState :: PendingInitialPayment { .. } ) {
490
- self . trust_model = Some ( TrustModel :: new ( self . client_trusts_lsp ) ) ;
491
- }
492
- }
493
492
Ok ( action)
494
493
}
495
494
@@ -508,9 +507,7 @@ impl OutboundJITChannel {
508
507
fn payment_forwarded ( & mut self ) -> Result < Option < ForwardHTLCsAction > , LightningError > {
509
508
let action = self . state . payment_forwarded ( ) ?;
510
509
if action. is_some ( ) {
511
- if let Some ( tm) = & mut self . trust_model {
512
- tm. set_payment_claimed ( true ) ;
513
- }
510
+ self . trust_model . set_payment_claimed ( true ) ;
514
511
}
515
512
Ok ( action)
516
513
}
@@ -526,43 +523,24 @@ impl OutboundJITChannel {
526
523
self . is_pending_initial_payment ( ) && is_expired
527
524
}
528
525
529
- fn set_funding_tx ( & mut self , funding_tx : Transaction ) -> Result < ( ) , LightningError > {
530
- if let Some ( tm) = & mut self . trust_model {
531
- tm. set_funding_tx ( funding_tx) ;
532
- Ok ( ( ) )
533
- } else {
534
- Err ( LightningError :: from ( ChannelStateError (
535
- "Store funding transaction when JIT Channel was in invalid state" . to_string ( ) ,
536
- ) ) )
537
- }
526
+ fn set_funding_tx ( & mut self , funding_tx : Transaction ) {
527
+ self . trust_model . set_funding_tx ( funding_tx) ;
538
528
}
539
529
540
- fn set_funding_tx_broadcast_safe (
541
- & mut self , funding_tx_broadcast_safe : bool ,
542
- ) -> Result < ( ) , LightningError > {
543
- if let Some ( tm) = & mut self . trust_model {
544
- tm. set_funding_tx_broadcast_safe ( funding_tx_broadcast_safe) ;
545
- Ok ( ( ) )
546
- } else {
547
- Err ( LightningError :: from ( ChannelStateError (
548
- "Store funding transaction broadcast safe when JIT Channel was in invalid state"
549
- . to_string ( ) ,
550
- ) ) )
551
- }
530
+ fn set_funding_tx_broadcast_safe ( & mut self , funding_tx_broadcast_safe : bool ) {
531
+ self . trust_model . set_funding_tx_broadcast_safe ( funding_tx_broadcast_safe) ;
552
532
}
553
533
554
534
fn should_broadcast_funding_transaction ( & self ) -> bool {
555
- self . trust_model . as_ref ( ) . map_or ( false , |tm| tm . should_broadcast ( ) )
535
+ self . trust_model . should_manually_broadcast ( )
556
536
}
557
537
558
538
fn get_funding_tx ( & self ) -> Option < Transaction > {
559
- self . trust_model . as_ref ( ) . and_then ( |tm| tm . get_funding_tx ( ) )
539
+ self . trust_model . get_funding_tx ( )
560
540
}
561
541
562
542
fn client_trusts_lsp ( & self ) -> bool {
563
- self . trust_model
564
- . as_ref ( )
565
- . map_or ( false , |tm| matches ! ( tm, TrustModel :: ClientTrustsLsp { .. } ) )
543
+ self . trust_model . is_client_trusts_lsp ( )
566
544
}
567
545
}
568
546
@@ -1065,7 +1043,10 @@ where
1065
1043
} ,
1066
1044
}
1067
1045
1068
- self . broadcast_transaction_if_applies ( & jit_channel) ;
1046
+ self . emit_broadcast_funding_transaction_event_if_applies (
1047
+ jit_channel,
1048
+ counterparty_node_id,
1049
+ ) ;
1069
1050
}
1070
1051
} else {
1071
1052
return Err ( APIError :: APIMisuseError {
@@ -1616,11 +1597,9 @@ where
1616
1597
) ,
1617
1598
} ) ?;
1618
1599
1619
- jit_channel
1620
- . set_funding_tx ( funding_tx)
1621
- . map_err ( |e| APIError :: APIMisuseError { err : e. err . to_string ( ) } ) ?;
1600
+ jit_channel. set_funding_tx ( funding_tx) ;
1622
1601
1623
- self . broadcast_transaction_if_applies ( jit_channel) ;
1602
+ self . emit_broadcast_funding_transaction_event_if_applies ( jit_channel, counterparty_node_id ) ;
1624
1603
Ok ( ( ) )
1625
1604
}
1626
1605
@@ -1654,20 +1633,26 @@ where
1654
1633
) ,
1655
1634
} ) ?;
1656
1635
1657
- jit_channel
1658
- . set_funding_tx_broadcast_safe ( true )
1659
- . map_err ( |e| APIError :: APIMisuseError { err : e. err . to_string ( ) } ) ?;
1636
+ jit_channel. set_funding_tx_broadcast_safe ( true ) ;
1660
1637
1661
- self . broadcast_transaction_if_applies ( jit_channel) ;
1638
+ self . emit_broadcast_funding_transaction_event_if_applies ( jit_channel, counterparty_node_id ) ;
1662
1639
Ok ( ( ) )
1663
1640
}
1664
1641
1665
- fn broadcast_transaction_if_applies ( & self , jit_channel : & OutboundJITChannel ) {
1642
+ fn emit_broadcast_funding_transaction_event_if_applies (
1643
+ & self , jit_channel : & OutboundJITChannel , counterparty_node_id : & PublicKey ,
1644
+ ) {
1666
1645
if jit_channel. should_broadcast_funding_transaction ( ) {
1667
1646
let funding_tx = jit_channel. get_funding_tx ( ) ;
1668
1647
1669
1648
if let Some ( funding_tx) = funding_tx {
1670
- self . channel_manager . get_cm ( ) . broadcast_transaction ( & funding_tx) ;
1649
+ let event_queue_notifier = self . pending_events . notifier ( ) ;
1650
+ let event = LSPS2ServiceEvent :: BroadcastFundingTransaction {
1651
+ counterparty_node_id : * counterparty_node_id,
1652
+ user_channel_id : jit_channel. user_channel_id ,
1653
+ funding_tx,
1654
+ } ;
1655
+ event_queue_notifier. enqueue ( event) ;
1671
1656
}
1672
1657
}
1673
1658
}
0 commit comments