@@ -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,18 +31,16 @@ 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;
3837use lightning:: chain:: chaininterface:: {
39- TransactionType , BroadcasterInterface , ConfirmationTarget , FeeEstimator ,
38+ BroadcasterInterface , ConfirmationTarget , FeeEstimator , TransactionType ,
4039} ;
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 }
@@ -668,9 +674,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
668674 script_pubkey: wallet. get_change_script( ) . unwrap( ) ,
669675 } ] ,
670676 } ;
671- let coinbase_txid = coinbase_tx. compute_txid ( ) ;
672- wallet
673- . add_utxo ( bitcoin:: OutPoint { txid : coinbase_txid, vout : 0 } , Amount :: from_sat ( 1_000_000 ) ) ;
677+ wallet. add_utxo ( coinbase_tx. clone ( ) , 0 ) ;
674678
675679 loop {
676680 match get_slice ! ( 1 ) [ 0 ] {
@@ -1026,20 +1030,24 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
10261030 if splice_in_sats == 0 {
10271031 continue ;
10281032 }
1029- // Create a funding input from the coinbase transaction
1030- if let Ok ( input) = FundingTxInput :: new_p2wpkh ( coinbase_tx. clone ( ) , 0 ) {
1031- let contribution = SpliceContribution :: splice_in (
1032- Amount :: from_sat ( splice_in_sats. min ( 900_000 ) ) , // Cap at available funds minus fees
1033- vec ! [ input] ,
1034- Some ( wallet. get_change_script ( ) . unwrap ( ) ) ,
1035- ) ;
1036- let _ = channelmanager. splice_channel (
1037- & chan. channel_id ,
1038- & chan. counterparty . node_id ,
1039- contribution,
1040- 253 , // funding_feerate_per_kw
1041- None ,
1042- ) ;
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+ FeeRate :: from_sat_per_kwu ( 253 ) ,
1039+ ) {
1040+ let wallet_sync = WalletSync :: new ( & wallet, Arc :: clone ( & logger) ) ;
1041+ if let Ok ( contribution) = funding_template
1042+ . splice_in_sync ( Amount :: from_sat ( splice_in_sats. min ( 900_000 ) ) , & wallet_sync)
1043+ {
1044+ let _ = channelmanager. funding_contributed (
1045+ & chan_id,
1046+ & counterparty,
1047+ contribution,
1048+ None ,
1049+ ) ;
1050+ }
10431051 }
10441052 } ,
10451053 // Splice-out: remove funds from a channel
@@ -1062,17 +1070,29 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
10621070 // Cap splice-out at a reasonable portion of channel capacity
10631071 let max_splice_out = chan. channel_value_satoshis / 4 ;
10641072 let splice_out_sats = splice_out_sats. min ( max_splice_out) . max ( 546 ) ; // At least dust limit
1065- let contribution = SpliceContribution :: splice_out ( vec ! [ TxOut {
1066- value: Amount :: from_sat( splice_out_sats) ,
1067- script_pubkey: wallet. get_change_script( ) . unwrap( ) ,
1068- } ] ) ;
1069- let _ = channelmanager. splice_channel (
1070- & chan. channel_id ,
1071- & chan. counterparty . node_id ,
1072- contribution,
1073- 253 , // funding_feerate_per_kw
1074- None ,
1075- ) ;
1073+ let chan_id = chan. channel_id ;
1074+ let counterparty = chan. counterparty . node_id ;
1075+ if let Ok ( funding_template) = channelmanager. splice_channel (
1076+ & chan_id,
1077+ & counterparty,
1078+ FeeRate :: from_sat_per_kwu ( 253 ) ,
1079+ ) {
1080+ let outputs = vec ! [ TxOut {
1081+ value: Amount :: from_sat( splice_out_sats) ,
1082+ script_pubkey: wallet. get_change_script( ) . unwrap( ) ,
1083+ } ] ;
1084+ let wallet_sync = WalletSync :: new ( & wallet, Arc :: clone ( & logger) ) ;
1085+ if let Ok ( contribution) =
1086+ funding_template. splice_out_sync ( outputs, & wallet_sync)
1087+ {
1088+ let _ = channelmanager. funding_contributed (
1089+ & chan_id,
1090+ & counterparty,
1091+ contribution,
1092+ None ,
1093+ ) ;
1094+ }
1095+ }
10761096 } ,
10771097 _ => return ,
10781098 }
@@ -1139,14 +1159,15 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
11391159 }
11401160}
11411161
1142- pub fn full_stack_test < Out : test_logger:: Output > ( data : & [ u8 ] , out : Out ) {
1143- let logger: Arc < dyn Logger > = Arc :: new ( test_logger:: TestLogger :: new ( "" . to_owned ( ) , out) ) ;
1162+ pub fn full_stack_test < Out : test_logger:: Output + MaybeSend + MaybeSync > ( data : & [ u8 ] , out : Out ) {
1163+ let logger: Arc < dyn Logger + MaybeSend + MaybeSync > =
1164+ Arc :: new ( test_logger:: TestLogger :: new ( "" . to_owned ( ) , out) ) ;
11441165 do_test ( data, & logger) ;
11451166}
11461167
11471168#[ no_mangle]
11481169pub extern "C" fn full_stack_run ( data : * const u8 , datalen : usize ) {
1149- let logger: Arc < dyn Logger > =
1170+ let logger: Arc < dyn Logger + MaybeSend + MaybeSync > =
11501171 Arc :: new ( test_logger:: TestLogger :: new ( "" . to_owned ( ) , test_logger:: DevNull { } ) ) ;
11511172 do_test ( unsafe { std:: slice:: from_raw_parts ( data, datalen) } , & logger) ;
11521173}
@@ -1932,6 +1953,7 @@ pub fn write_fst_seeds(path: &str) {
19321953
19331954#[ cfg( test) ]
19341955mod tests {
1956+ use lightning:: util:: async_poll:: { MaybeSend , MaybeSync } ;
19351957 use lightning:: util:: logger:: { Logger , Record } ;
19361958 use std:: collections:: HashMap ;
19371959 use std:: sync:: { Arc , Mutex } ;
@@ -1963,7 +1985,7 @@ mod tests {
19631985 let test = super :: two_peer_forwarding_seed ( ) ;
19641986
19651987 let logger = Arc :: new ( TrackingLogger { lines : Mutex :: new ( HashMap :: new ( ) ) } ) ;
1966- super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger > ) ) ;
1988+ super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger + MaybeSend + MaybeSync > ) ) ;
19671989
19681990 let log_entries = logger. lines . lock ( ) . unwrap ( ) ;
19691991 // 1
@@ -1998,7 +2020,7 @@ mod tests {
19982020 let test = super :: gossip_exchange_seed ( ) ;
19992021
20002022 let logger = Arc :: new ( TrackingLogger { lines : Mutex :: new ( HashMap :: new ( ) ) } ) ;
2001- super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger > ) ) ;
2023+ super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger + MaybeSend + MaybeSync > ) ) ;
20022024
20032025 let log_entries = logger. lines . lock ( ) . unwrap ( ) ;
20042026 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 ) ) ;
@@ -2011,7 +2033,7 @@ mod tests {
20112033 let test = super :: splice_seed ( ) ;
20122034
20132035 let logger = Arc :: new ( TrackingLogger { lines : Mutex :: new ( HashMap :: new ( ) ) } ) ;
2014- super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger > ) ) ;
2036+ super :: do_test ( & test, & ( Arc :: clone ( & logger) as Arc < dyn Logger + MaybeSend + MaybeSync > ) ) ;
20152037
20162038 let log_entries = logger. lines . lock ( ) . unwrap ( ) ;
20172039
0 commit comments