@@ -22,6 +22,7 @@ use bitcoin::opcodes;
2222use bitcoin:: script:: { Builder , ScriptBuf } ;
2323use bitcoin:: transaction:: Version ;
2424use bitcoin:: transaction:: { Transaction , TxIn , TxOut } ;
25+ use bitcoin:: FeeRate ;
2526
2627use bitcoin:: hash_types:: { BlockHash , Txid } ;
2728use bitcoin:: hashes:: sha256:: Hash as Sha256 ;
@@ -30,8 +31,6 @@ use bitcoin::hashes::Hash as _;
3031use bitcoin:: hex:: FromHex ;
3132use bitcoin:: WPubkeyHash ;
3233
33- use lightning:: ln:: funding:: { FundingTxInput , SpliceContribution } ;
34-
3534use lightning:: blinded_path:: message:: { BlindedMessagePath , MessageContext , MessageForwardNode } ;
3635use lightning:: blinded_path:: payment:: { BlindedPaymentPath , ReceiveTlvs } ;
3736use lightning:: chain;
@@ -41,7 +40,7 @@ use lightning::chain::chaininterface::{
4140use lightning:: chain:: chainmonitor;
4241use lightning:: chain:: transaction:: OutPoint ;
4342use lightning:: chain:: { BestBlock , ChannelMonitorUpdateStatus , Confirm , Listen } ;
44- use lightning:: events:: bump_transaction:: sync:: WalletSourceSync ;
43+ use lightning:: events:: bump_transaction:: sync:: { WalletSourceSync , WalletSync } ;
4544use lightning:: events:: Event ;
4645use lightning:: ln:: channel_state:: ChannelDetails ;
4746use lightning:: ln:: channelmanager:: { ChainParameters , ChannelManager , InterceptId , PaymentId } ;
@@ -65,6 +64,7 @@ use lightning::sign::{
6564 SignerProvider ,
6665} ;
6766use lightning:: types:: payment:: { PaymentHash , PaymentPreimage , PaymentSecret } ;
67+ use lightning:: util:: async_poll:: { MaybeSend , MaybeSync } ;
6868use lightning:: util:: config:: { ChannelConfig , UserConfig } ;
6969use lightning:: util:: hash_tables:: * ;
7070use lightning:: util:: logger:: Logger ;
@@ -227,7 +227,7 @@ type ChannelMan<'a> = ChannelManager<
227227 Arc < dyn chain:: Filter > ,
228228 Arc < TestBroadcaster > ,
229229 Arc < FuzzEstimator > ,
230- Arc < dyn Logger > ,
230+ Arc < dyn Logger + MaybeSend + MaybeSync > ,
231231 Arc < TestPersister > ,
232232 Arc < KeyProvider > ,
233233 > ,
@@ -239,14 +239,20 @@ type ChannelMan<'a> = ChannelManager<
239239 Arc < FuzzEstimator > ,
240240 & ' a FuzzRouter ,
241241 & ' a FuzzRouter ,
242- Arc < dyn Logger > ,
242+ Arc < dyn Logger + MaybeSend + MaybeSync > ,
243243> ;
244244type PeerMan < ' a > = PeerManager <
245245 Peer < ' a > ,
246246 Arc < ChannelMan < ' a > > ,
247- Arc < P2PGossipSync < Arc < NetworkGraph < Arc < dyn Logger > > > , Arc < dyn UtxoLookup > , Arc < dyn Logger > > > ,
247+ Arc <
248+ P2PGossipSync <
249+ Arc < NetworkGraph < Arc < dyn Logger + MaybeSend + MaybeSync > > > ,
250+ Arc < dyn UtxoLookup > ,
251+ Arc < dyn Logger + MaybeSend + MaybeSync > ,
252+ > ,
253+ > ,
248254 IgnoringMessageHandler ,
249- Arc < dyn Logger > ,
255+ Arc < dyn Logger + MaybeSend + MaybeSync > ,
250256 IgnoringMessageHandler ,
251257 Arc < KeyProvider > ,
252258 IgnoringMessageHandler ,
@@ -260,7 +266,7 @@ struct MoneyLossDetector<'a> {
260266 Arc < dyn chain:: Filter > ,
261267 Arc < TestBroadcaster > ,
262268 Arc < FuzzEstimator > ,
263- Arc < dyn Logger > ,
269+ Arc < dyn Logger + MaybeSend + MaybeSync > ,
264270 Arc < TestPersister > ,
265271 Arc < KeyProvider > ,
266272 > ,
@@ -285,7 +291,7 @@ impl<'a> MoneyLossDetector<'a> {
285291 Arc < dyn chain:: Filter > ,
286292 Arc < TestBroadcaster > ,
287293 Arc < FuzzEstimator > ,
288- Arc < dyn Logger > ,
294+ Arc < dyn Logger + MaybeSend + MaybeSync > ,
289295 Arc < TestPersister > ,
290296 Arc < KeyProvider > ,
291297 > ,
@@ -520,7 +526,7 @@ impl SignerProvider for KeyProvider {
520526}
521527
522528#[ inline]
523- pub fn do_test ( mut data : & [ u8 ] , logger : & Arc < dyn Logger > ) {
529+ pub fn do_test ( mut data : & [ u8 ] , logger : & Arc < dyn Logger + MaybeSend + MaybeSync > ) {
524530 if data. len ( ) < 32 {
525531 return ;
526532 }
@@ -1024,20 +1030,27 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
10241030 if splice_in_sats == 0 {
10251031 continue ;
10261032 }
1027- // Create a funding input from the coinbase transaction
1028- if let Ok ( input) = FundingTxInput :: new_p2wpkh ( coinbase_tx. clone ( ) , 0 ) {
1029- let contribution = SpliceContribution :: splice_in (
1030- Amount :: from_sat ( splice_in_sats. min ( 900_000 ) ) , // Cap at available funds minus fees
1031- vec ! [ input] ,
1032- Some ( wallet. get_change_script ( ) . unwrap ( ) ) ,
1033- ) ;
1034- let _ = channelmanager. splice_channel (
1035- & chan. channel_id ,
1036- & chan. counterparty . node_id ,
1037- contribution,
1038- 253 , // funding_feerate_per_kw
1033+ let chan_id = chan. channel_id ;
1034+ let counterparty = chan. counterparty . node_id ;
1035+ if let Ok ( funding_template) = channelmanager. splice_channel (
1036+ & chan_id,
1037+ & counterparty,
1038+ None ,
1039+ FeeRate :: from_sat_per_kwu ( 253 ) ,
1040+ ) {
1041+ let wallet_sync = WalletSync :: new ( & wallet, Arc :: clone ( & logger) ) ;
1042+ if let Ok ( contribution) = funding_template. splice_in_sync (
10391043 None ,
1040- ) ;
1044+ Amount :: from_sat ( splice_in_sats. min ( 900_000 ) ) ,
1045+ & wallet_sync,
1046+ ) {
1047+ let _ = channelmanager. funding_contributed (
1048+ & chan_id,
1049+ & counterparty,
1050+ contribution,
1051+ None ,
1052+ ) ;
1053+ }
10411054 }
10421055 } ,
10431056 // Splice-out: remove funds from a channel
@@ -1060,17 +1073,28 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
10601073 // Cap splice-out at a reasonable portion of channel capacity
10611074 let max_splice_out = chan. channel_value_satoshis / 4 ;
10621075 let splice_out_sats = splice_out_sats. min ( max_splice_out) . max ( 546 ) ; // At least dust limit
1063- let contribution = SpliceContribution :: splice_out ( vec ! [ TxOut {
1064- value: Amount :: from_sat( splice_out_sats) ,
1065- script_pubkey: wallet. get_change_script( ) . unwrap( ) ,
1066- } ] ) ;
1067- let _ = channelmanager. splice_channel (
1068- & chan. channel_id ,
1069- & chan. counterparty . node_id ,
1070- contribution,
1071- 253 , // funding_feerate_per_kw
1076+ let chan_id = chan. channel_id ;
1077+ let counterparty = chan. counterparty . node_id ;
1078+ if let Ok ( funding_template) = channelmanager. splice_channel (
1079+ & chan_id,
1080+ & counterparty,
10721081 None ,
1073- ) ;
1082+ FeeRate :: from_sat_per_kwu ( 253 ) ,
1083+ ) {
1084+ let outputs = vec ! [ TxOut {
1085+ value: Amount :: from_sat( splice_out_sats) ,
1086+ script_pubkey: wallet. get_change_script( ) . unwrap( ) ,
1087+ } ] ;
1088+ let wallet_sync = WalletSync :: new ( & wallet, Arc :: clone ( & logger) ) ;
1089+ if let Ok ( contribution) = funding_template. splice_out_sync ( outputs, & wallet_sync) {
1090+ let _ = channelmanager. funding_contributed (
1091+ & chan_id,
1092+ & counterparty,
1093+ contribution,
1094+ None ,
1095+ ) ;
1096+ }
1097+ }
10741098 } ,
10751099 _ => return ,
10761100 }
@@ -1137,14 +1161,15 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
11371161 }
11381162}
11391163
1140- pub fn full_stack_test < Out : test_logger:: Output > ( data : & [ u8 ] , out : Out ) {
1141- let logger: Arc < dyn Logger > = Arc :: new ( test_logger:: TestLogger :: new ( "" . to_owned ( ) , out) ) ;
1164+ pub fn full_stack_test < Out : test_logger:: Output + MaybeSend + MaybeSync > ( data : & [ u8 ] , out : Out ) {
1165+ let logger: Arc < dyn Logger + MaybeSend + MaybeSync > =
1166+ Arc :: new ( test_logger:: TestLogger :: new ( "" . to_owned ( ) , out) ) ;
11421167 do_test ( data, & logger) ;
11431168}
11441169
11451170#[ no_mangle]
11461171pub extern "C" fn full_stack_run ( data : * const u8 , datalen : usize ) {
1147- let logger: Arc < dyn Logger > =
1172+ let logger: Arc < dyn Logger + MaybeSend + MaybeSync > =
11481173 Arc :: new ( test_logger:: TestLogger :: new ( "" . to_owned ( ) , test_logger:: DevNull { } ) ) ;
11491174 do_test ( unsafe { std:: slice:: from_raw_parts ( data, datalen) } , & logger) ;
11501175}
@@ -1930,6 +1955,7 @@ pub fn write_fst_seeds(path: &str) {
19301955
19311956#[ cfg( test) ]
19321957mod tests {
1958+ use lightning:: util:: async_poll:: { MaybeSend , MaybeSync } ;
19331959 use lightning:: util:: logger:: { Logger , Record } ;
19341960 use std:: collections:: HashMap ;
19351961 use std:: sync:: { Arc , Mutex } ;
@@ -1961,7 +1987,7 @@ mod tests {
19611987 let test = super :: two_peer_forwarding_seed ( ) ;
19621988
19631989 let logger = Arc :: new ( TrackingLogger { lines : Mutex :: new ( HashMap :: new ( ) ) } ) ;
1964- super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger > ) ) ;
1990+ super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger + MaybeSend + MaybeSync > ) ) ;
19651991
19661992 let log_entries = logger. lines . lock ( ) . unwrap ( ) ;
19671993 // 1
@@ -1996,7 +2022,7 @@ mod tests {
19962022 let test = super :: gossip_exchange_seed ( ) ;
19972023
19982024 let logger = Arc :: new ( TrackingLogger { lines : Mutex :: new ( HashMap :: new ( ) ) } ) ;
1999- super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger > ) ) ;
2025+ super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger + MaybeSend + MaybeSync > ) ) ;
20002026
20012027 let log_entries = logger. lines . lock ( ) . unwrap ( ) ;
20022028 assert_eq ! ( log_entries. get( & ( "lightning::ln::peer_handler" . to_string( ) , "Sending message to all peers except Some(PublicKey(0000000000000000000000000000000000000000000000000000000000000002ff00000000000000000000000000000000000000000000000000000000000002)) or the announced channel's counterparties: ChannelAnnouncement { node_signature_1: 3026020200b202200303030303030303030303030303030303030303030303030303030303030303, node_signature_2: 3026020200b202200202020202020202020202020202020202020202020202020202020202020202, bitcoin_signature_1: 3026020200b202200303030303030303030303030303030303030303030303030303030303030303, bitcoin_signature_2: 3026020200b202200202020202020202020202020202020202020202020202020202020202020202, contents: UnsignedChannelAnnouncement { features: [], chain_hash: 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000, short_channel_id: 42, node_id_1: NodeId(030303030303030303030303030303030303030303030303030303030303030303), node_id_2: NodeId(020202020202020202020202020202020202020202020202020202020202020202), bitcoin_key_1: NodeId(030303030303030303030303030303030303030303030303030303030303030303), bitcoin_key_2: NodeId(020202020202020202020202020202020202020202020202020202020202020202), excess_data: [] } }" . to_string( ) ) ) , Some ( & 1 ) ) ;
@@ -2009,7 +2035,7 @@ mod tests {
20092035 let test = super :: splice_seed ( ) ;
20102036
20112037 let logger = Arc :: new ( TrackingLogger { lines : Mutex :: new ( HashMap :: new ( ) ) } ) ;
2012- super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger > ) ) ;
2038+ super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger + MaybeSend + MaybeSync > ) ) ;
20132039
20142040 let log_entries = logger. lines . lock ( ) . unwrap ( ) ;
20152041
0 commit comments