@@ -965,6 +965,13 @@ impl<Signer: Sign> Writeable for ChannelMonitorImpl<Signer> {
965
965
}
966
966
967
967
impl < Signer : Sign > ChannelMonitor < Signer > {
968
+ /// For lockorder enforcement purposes, we need to have a single site which constructs the
969
+ /// `inner` mutex, otherwise cases where we lock two monitors at the same time (eg in our
970
+ /// PartialEq implementation) we may decide a lockorder violation has occurred.
971
+ fn from_impl ( imp : ChannelMonitorImpl < Signer > ) -> Self {
972
+ ChannelMonitor { inner : Mutex :: new ( imp) }
973
+ }
974
+
968
975
pub ( crate ) fn new ( secp_ctx : Secp256k1 < secp256k1:: All > , keys : Signer , shutdown_script : Option < Script > ,
969
976
on_counterparty_tx_csv : u16 , destination_script : & Script , funding_info : ( OutPoint , Script ) ,
970
977
channel_parameters : & ChannelTransactionParameters ,
@@ -1012,60 +1019,58 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
1012
1019
let mut outputs_to_watch = HashMap :: new ( ) ;
1013
1020
outputs_to_watch. insert ( funding_info. 0 . txid , vec ! [ ( funding_info. 0 . index as u32 , funding_info. 1 . clone( ) ) ] ) ;
1014
1021
1015
- ChannelMonitor {
1016
- inner : Mutex :: new ( ChannelMonitorImpl {
1017
- latest_update_id : 0 ,
1018
- commitment_transaction_number_obscure_factor,
1022
+ Self :: from_impl ( ChannelMonitorImpl {
1023
+ latest_update_id : 0 ,
1024
+ commitment_transaction_number_obscure_factor,
1019
1025
1020
- destination_script : destination_script. clone ( ) ,
1021
- broadcasted_holder_revokable_script : None ,
1022
- counterparty_payment_script,
1023
- shutdown_script,
1026
+ destination_script : destination_script. clone ( ) ,
1027
+ broadcasted_holder_revokable_script : None ,
1028
+ counterparty_payment_script,
1029
+ shutdown_script,
1024
1030
1025
- channel_keys_id,
1026
- holder_revocation_basepoint,
1027
- funding_info,
1028
- current_counterparty_commitment_txid : None ,
1029
- prev_counterparty_commitment_txid : None ,
1031
+ channel_keys_id,
1032
+ holder_revocation_basepoint,
1033
+ funding_info,
1034
+ current_counterparty_commitment_txid : None ,
1035
+ prev_counterparty_commitment_txid : None ,
1030
1036
1031
- counterparty_commitment_params,
1032
- funding_redeemscript,
1033
- channel_value_satoshis,
1034
- their_cur_per_commitment_points : None ,
1037
+ counterparty_commitment_params,
1038
+ funding_redeemscript,
1039
+ channel_value_satoshis,
1040
+ their_cur_per_commitment_points : None ,
1035
1041
1036
- on_holder_tx_csv : counterparty_channel_parameters. selected_contest_delay ,
1042
+ on_holder_tx_csv : counterparty_channel_parameters. selected_contest_delay ,
1037
1043
1038
- commitment_secrets : CounterpartyCommitmentSecrets :: new ( ) ,
1039
- counterparty_claimable_outpoints : HashMap :: new ( ) ,
1040
- counterparty_commitment_txn_on_chain : HashMap :: new ( ) ,
1041
- counterparty_hash_commitment_number : HashMap :: new ( ) ,
1044
+ commitment_secrets : CounterpartyCommitmentSecrets :: new ( ) ,
1045
+ counterparty_claimable_outpoints : HashMap :: new ( ) ,
1046
+ counterparty_commitment_txn_on_chain : HashMap :: new ( ) ,
1047
+ counterparty_hash_commitment_number : HashMap :: new ( ) ,
1042
1048
1043
- prev_holder_signed_commitment_tx : None ,
1044
- current_holder_commitment_tx : holder_commitment_tx,
1045
- current_counterparty_commitment_number : 1 << 48 ,
1046
- current_holder_commitment_number,
1049
+ prev_holder_signed_commitment_tx : None ,
1050
+ current_holder_commitment_tx : holder_commitment_tx,
1051
+ current_counterparty_commitment_number : 1 << 48 ,
1052
+ current_holder_commitment_number,
1047
1053
1048
- payment_preimages : HashMap :: new ( ) ,
1049
- pending_monitor_events : Vec :: new ( ) ,
1050
- pending_events : Vec :: new ( ) ,
1054
+ payment_preimages : HashMap :: new ( ) ,
1055
+ pending_monitor_events : Vec :: new ( ) ,
1056
+ pending_events : Vec :: new ( ) ,
1051
1057
1052
- onchain_events_awaiting_threshold_conf : Vec :: new ( ) ,
1053
- outputs_to_watch,
1058
+ onchain_events_awaiting_threshold_conf : Vec :: new ( ) ,
1059
+ outputs_to_watch,
1054
1060
1055
- onchain_tx_handler,
1061
+ onchain_tx_handler,
1056
1062
1057
- lockdown_from_offchain : false ,
1058
- holder_tx_signed : false ,
1059
- funding_spend_seen : false ,
1060
- funding_spend_confirmed : None ,
1061
- htlcs_resolved_on_chain : Vec :: new ( ) ,
1063
+ lockdown_from_offchain : false ,
1064
+ holder_tx_signed : false ,
1065
+ funding_spend_seen : false ,
1066
+ funding_spend_confirmed : None ,
1067
+ htlcs_resolved_on_chain : Vec :: new ( ) ,
1062
1068
1063
- best_block,
1064
- counterparty_node_id : Some ( counterparty_node_id) ,
1069
+ best_block,
1070
+ counterparty_node_id : Some ( counterparty_node_id) ,
1065
1071
1066
- secp_ctx,
1067
- } ) ,
1068
- }
1072
+ secp_ctx,
1073
+ } )
1069
1074
}
1070
1075
1071
1076
#[ cfg( test) ]
@@ -3361,60 +3366,58 @@ impl<'a, Signer: Sign, K: KeysInterface<Signer = Signer>> ReadableArgs<&'a K>
3361
3366
let mut secp_ctx = Secp256k1 :: new ( ) ;
3362
3367
secp_ctx. seeded_randomize ( & keys_manager. get_secure_random_bytes ( ) ) ;
3363
3368
3364
- Ok ( ( best_block. block_hash ( ) , ChannelMonitor {
3365
- inner : Mutex :: new ( ChannelMonitorImpl {
3366
- latest_update_id,
3367
- commitment_transaction_number_obscure_factor,
3369
+ Ok ( ( best_block. block_hash ( ) , ChannelMonitor :: from_impl ( ChannelMonitorImpl {
3370
+ latest_update_id,
3371
+ commitment_transaction_number_obscure_factor,
3368
3372
3369
- destination_script,
3370
- broadcasted_holder_revokable_script,
3371
- counterparty_payment_script,
3372
- shutdown_script,
3373
+ destination_script,
3374
+ broadcasted_holder_revokable_script,
3375
+ counterparty_payment_script,
3376
+ shutdown_script,
3373
3377
3374
- channel_keys_id,
3375
- holder_revocation_basepoint,
3376
- funding_info,
3377
- current_counterparty_commitment_txid,
3378
- prev_counterparty_commitment_txid,
3378
+ channel_keys_id,
3379
+ holder_revocation_basepoint,
3380
+ funding_info,
3381
+ current_counterparty_commitment_txid,
3382
+ prev_counterparty_commitment_txid,
3379
3383
3380
- counterparty_commitment_params,
3381
- funding_redeemscript,
3382
- channel_value_satoshis,
3383
- their_cur_per_commitment_points,
3384
+ counterparty_commitment_params,
3385
+ funding_redeemscript,
3386
+ channel_value_satoshis,
3387
+ their_cur_per_commitment_points,
3384
3388
3385
- on_holder_tx_csv,
3389
+ on_holder_tx_csv,
3386
3390
3387
- commitment_secrets,
3388
- counterparty_claimable_outpoints,
3389
- counterparty_commitment_txn_on_chain,
3390
- counterparty_hash_commitment_number,
3391
+ commitment_secrets,
3392
+ counterparty_claimable_outpoints,
3393
+ counterparty_commitment_txn_on_chain,
3394
+ counterparty_hash_commitment_number,
3391
3395
3392
- prev_holder_signed_commitment_tx,
3393
- current_holder_commitment_tx,
3394
- current_counterparty_commitment_number,
3395
- current_holder_commitment_number,
3396
+ prev_holder_signed_commitment_tx,
3397
+ current_holder_commitment_tx,
3398
+ current_counterparty_commitment_number,
3399
+ current_holder_commitment_number,
3396
3400
3397
- payment_preimages,
3398
- pending_monitor_events : pending_monitor_events. unwrap ( ) ,
3399
- pending_events,
3401
+ payment_preimages,
3402
+ pending_monitor_events : pending_monitor_events. unwrap ( ) ,
3403
+ pending_events,
3400
3404
3401
- onchain_events_awaiting_threshold_conf,
3402
- outputs_to_watch,
3405
+ onchain_events_awaiting_threshold_conf,
3406
+ outputs_to_watch,
3403
3407
3404
- onchain_tx_handler,
3408
+ onchain_tx_handler,
3405
3409
3406
- lockdown_from_offchain,
3407
- holder_tx_signed,
3408
- funding_spend_seen : funding_spend_seen. unwrap ( ) ,
3409
- funding_spend_confirmed,
3410
- htlcs_resolved_on_chain : htlcs_resolved_on_chain. unwrap ( ) ,
3410
+ lockdown_from_offchain,
3411
+ holder_tx_signed,
3412
+ funding_spend_seen : funding_spend_seen. unwrap ( ) ,
3413
+ funding_spend_confirmed,
3414
+ htlcs_resolved_on_chain : htlcs_resolved_on_chain. unwrap ( ) ,
3411
3415
3412
- best_block,
3413
- counterparty_node_id,
3416
+ best_block,
3417
+ counterparty_node_id,
3414
3418
3415
- secp_ctx,
3416
- } ) ,
3417
- } ) )
3419
+ secp_ctx,
3420
+ } ) ) )
3418
3421
}
3419
3422
}
3420
3423
0 commit comments