@@ -151,15 +151,19 @@ fn revoked_output_htlc_resolution_timing() {
151151 expect_payment_failed ! ( nodes[ 1 ] , payment_hash_1, false ) ;
152152}
153153
154- #[ test]
155- fn chanmon_claim_value_coop_close ( ) {
154+ fn do_chanmon_claim_value_coop_close ( anchors : bool ) {
156155 // Tests `get_claimable_balances` returns the correct values across a simple cooperative claim.
157156 // Specifically, this tests that the channel non-HTLC balances show up in
158157 // `get_claimable_balances` until the cooperative claims have confirmed and generated a
159158 // `SpendableOutputs` event, and no longer.
160159 let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
161160 let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
162- let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
161+ let mut user_config = test_default_channel_config ( ) ;
162+ if anchors {
163+ user_config. channel_handshake_config . negotiate_anchors_zero_fee_htlc_tx = true ;
164+ user_config. manually_accept_inbound_channels = true ;
165+ }
166+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ Some ( user_config) , Some ( user_config) ] ) ;
163167 let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
164168
165169 let ( _, _, chan_id, funding_tx) =
@@ -170,8 +174,10 @@ fn chanmon_claim_value_coop_close() {
170174 let chan_feerate = get_feerate ! ( nodes[ 0 ] , nodes[ 1 ] , chan_id) as u64 ;
171175 let channel_type_features = get_channel_type_features ! ( nodes[ 0 ] , nodes[ 1 ] , chan_id) ;
172176
177+ let commitment_tx_fee = chan_feerate * channel:: commitment_tx_base_weight ( & channel_type_features) / 1000 ;
178+ let anchor_outputs_value = if anchors { channel:: ANCHOR_OUTPUT_VALUE_SATOSHI * 2 } else { 0 } ;
173179 assert_eq ! ( vec![ Balance :: ClaimableOnChannelClose {
174- amount_satoshis: 1_000_000 - 1_000 - chan_feerate * channel :: commitment_tx_base_weight ( & channel_type_features ) / 1000
180+ amount_satoshis: 1_000_000 - 1_000 - commitment_tx_fee - anchor_outputs_value
175181 } ] ,
176182 nodes[ 0 ] . chain_monitor. chain_monitor. get_monitor( funding_outpoint) . unwrap( ) . get_claimable_balances( ) ) ;
177183 assert_eq ! ( vec![ Balance :: ClaimableOnChannelClose { amount_satoshis: 1_000 , } ] ,
@@ -206,7 +212,7 @@ fn chanmon_claim_value_coop_close() {
206212 assert ! ( nodes[ 1 ] . chain_monitor. chain_monitor. get_and_clear_pending_events( ) . is_empty( ) ) ;
207213
208214 assert_eq ! ( vec![ Balance :: ClaimableAwaitingConfirmations {
209- amount_satoshis: 1_000_000 - 1_000 - chan_feerate * channel :: commitment_tx_base_weight ( & channel_type_features ) / 1000 ,
215+ amount_satoshis: 1_000_000 - 1_000 - commitment_tx_fee - anchor_outputs_value ,
210216 confirmation_height: nodes[ 0 ] . best_block_info( ) . 1 + ANTI_REORG_DELAY - 1 ,
211217 } ] ,
212218 nodes[ 0 ] . chain_monitor. chain_monitor. get_monitor( funding_outpoint) . unwrap( ) . get_claimable_balances( ) ) ;
@@ -231,6 +237,12 @@ fn chanmon_claim_value_coop_close() {
231237 check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: CooperativeClosure , [ nodes[ 0 ] . node. get_our_node_id( ) ] , 1000000 ) ;
232238}
233239
240+ #[ test]
241+ fn chanmon_claim_value_coop_close ( ) {
242+ do_chanmon_claim_value_coop_close ( false ) ;
243+ do_chanmon_claim_value_coop_close ( true ) ;
244+ }
245+
234246fn sorted_vec < T : Ord > ( mut v : Vec < T > ) -> Vec < T > {
235247 v. sort_unstable ( ) ;
236248 v
0 commit comments