@@ -151,15 +151,19 @@ fn revoked_output_htlc_resolution_timing() {
151
151
expect_payment_failed ! ( nodes[ 1 ] , payment_hash_1, false ) ;
152
152
}
153
153
154
- #[ test]
155
- fn chanmon_claim_value_coop_close ( ) {
154
+ fn do_chanmon_claim_value_coop_close ( anchors : bool ) {
156
155
// Tests `get_claimable_balances` returns the correct values across a simple cooperative claim.
157
156
// Specifically, this tests that the channel non-HTLC balances show up in
158
157
// `get_claimable_balances` until the cooperative claims have confirmed and generated a
159
158
// `SpendableOutputs` event, and no longer.
160
159
let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
161
160
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) ] ) ;
163
167
let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
164
168
165
169
let ( _, _, chan_id, funding_tx) =
@@ -170,8 +174,10 @@ fn chanmon_claim_value_coop_close() {
170
174
let chan_feerate = get_feerate ! ( nodes[ 0 ] , nodes[ 1 ] , chan_id) as u64 ;
171
175
let channel_type_features = get_channel_type_features ! ( nodes[ 0 ] , nodes[ 1 ] , chan_id) ;
172
176
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 } ;
173
179
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
175
181
} ] ,
176
182
nodes[ 0 ] . chain_monitor. chain_monitor. get_monitor( funding_outpoint) . unwrap( ) . get_claimable_balances( ) ) ;
177
183
assert_eq ! ( vec![ Balance :: ClaimableOnChannelClose { amount_satoshis: 1_000 , } ] ,
@@ -206,7 +212,7 @@ fn chanmon_claim_value_coop_close() {
206
212
assert ! ( nodes[ 1 ] . chain_monitor. chain_monitor. get_and_clear_pending_events( ) . is_empty( ) ) ;
207
213
208
214
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 ,
210
216
confirmation_height: nodes[ 0 ] . best_block_info( ) . 1 + ANTI_REORG_DELAY - 1 ,
211
217
} ] ,
212
218
nodes[ 0 ] . chain_monitor. chain_monitor. get_monitor( funding_outpoint) . unwrap( ) . get_claimable_balances( ) ) ;
@@ -231,6 +237,12 @@ fn chanmon_claim_value_coop_close() {
231
237
check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: CooperativeClosure , [ nodes[ 0 ] . node. get_our_node_id( ) ] , 1000000 ) ;
232
238
}
233
239
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
+
234
246
fn sorted_vec < T : Ord > ( mut v : Vec < T > ) -> Vec < T > {
235
247
v. sort_unstable ( ) ;
236
248
v
0 commit comments