@@ -198,6 +198,9 @@ pub(crate) enum OnchainClaim {
198
198
Event ( ClaimEvent ) ,
199
199
}
200
200
201
+ /// An internal identifier to track pending package claims within the `OnchainTxHandler`.
202
+ type PackageID = [ u8 ; 32 ] ;
203
+
201
204
/// OnchainTxHandler receives claiming requests, aggregates them if it's sound, broadcast and
202
205
/// do RBF bumping if possible.
203
206
pub struct OnchainTxHandler < ChannelSigner : Sign > {
@@ -225,11 +228,11 @@ pub struct OnchainTxHandler<ChannelSigner: Sign> {
225
228
// us and is immutable until all outpoint of the claimable set are post-anti-reorg-delay solved.
226
229
// Entry is cache of elements need to generate a bumped claiming transaction (see ClaimTxBumpMaterial)
227
230
#[ cfg( test) ] // Used in functional_test to verify sanitization
228
- pub ( crate ) pending_claim_requests : HashMap < Txid , PackageTemplate > ,
231
+ pub ( crate ) pending_claim_requests : HashMap < PackageID , PackageTemplate > ,
229
232
#[ cfg( not( test) ) ]
230
- pending_claim_requests : HashMap < Txid , PackageTemplate > ,
233
+ pending_claim_requests : HashMap < PackageID , PackageTemplate > ,
231
234
#[ cfg( anchors) ]
232
- pending_claim_events : HashMap < Txid , ClaimEvent > ,
235
+ pending_claim_events : HashMap < PackageID , ClaimEvent > ,
233
236
234
237
// Used to link outpoints claimed in a connected block to a pending claim request.
235
238
// Key is outpoint than monitor parsing has detected we have keys/scripts to claim
@@ -238,9 +241,9 @@ pub struct OnchainTxHandler<ChannelSigner: Sign> {
238
241
// post-anti-reorg-delay solved, confirmaiton_block is used to erase entry if
239
242
// block with output gets disconnected.
240
243
#[ cfg( test) ] // Used in functional_test to verify sanitization
241
- pub claimable_outpoints : HashMap < BitcoinOutPoint , ( Txid , u32 ) > ,
244
+ pub claimable_outpoints : HashMap < BitcoinOutPoint , ( PackageID , u32 ) > ,
242
245
#[ cfg( not( test) ) ]
243
- claimable_outpoints : HashMap < BitcoinOutPoint , ( Txid , u32 ) > ,
246
+ claimable_outpoints : HashMap < BitcoinOutPoint , ( PackageID , u32 ) > ,
244
247
245
248
locktimed_packages : BTreeMap < u32 , Vec < PackageTemplate > > ,
246
249
@@ -462,7 +465,7 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
462
465
// since requests can have outpoints split off.
463
466
if !self . onchain_events_awaiting_threshold_conf . iter ( )
464
467
. any ( |event_entry| if let OnchainEvent :: Claim { claim_request } = event_entry. event {
465
- first_claim_txid_height. 0 == claim_request
468
+ first_claim_txid_height. 0 == claim_request. into_inner ( )
466
469
} else {
467
470
// The onchain event is not a claim, keep seeking until we find one.
468
471
false
@@ -628,27 +631,28 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
628
631
if let Some ( ( new_timer, new_feerate, claim) ) = self . generate_claim ( cur_height, & req, & * fee_estimator, & * logger) {
629
632
req. set_timer ( new_timer) ;
630
633
req. set_feerate ( new_feerate) ;
631
- let txid = match claim {
634
+ let package_id = match claim {
632
635
OnchainClaim :: Tx ( tx) => {
633
636
log_info ! ( logger, "Broadcasting onchain {}" , log_tx!( tx) ) ;
634
637
broadcaster. broadcast_transaction ( & tx) ;
635
- tx. txid ( )
638
+ tx. txid ( ) . into_inner ( )
636
639
} ,
637
640
#[ cfg( anchors) ]
638
641
OnchainClaim :: Event ( claim_event) => {
639
642
log_info ! ( logger, "Yielding onchain event to spend inputs {:?}" , req. outpoints( ) ) ;
640
643
let txid = match claim_event {
641
644
ClaimEvent :: BumpCommitment { ref commitment_tx, .. } => commitment_tx. txid ( ) ,
642
645
} ;
643
- self . pending_claim_events . insert ( txid, claim_event) ;
644
- txid
646
+ let package_id = txid. into_inner ( ) ;
647
+ self . pending_claim_events . insert ( package_id, claim_event) ;
648
+ package_id
645
649
} ,
646
650
} ;
647
651
for k in req. outpoints ( ) {
648
652
log_info ! ( logger, "Registering claiming request for {}:{}" , k. txid, k. vout) ;
649
- self . claimable_outpoints . insert ( k. clone ( ) , ( txid , conf_height) ) ;
653
+ self . claimable_outpoints . insert ( k. clone ( ) , ( package_id , conf_height) ) ;
650
654
}
651
- self . pending_claim_requests . insert ( txid , req) ;
655
+ self . pending_claim_requests . insert ( package_id , req) ;
652
656
}
653
657
}
654
658
}
@@ -698,7 +702,7 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
698
702
txid: tx. txid( ) ,
699
703
height: conf_height,
700
704
block_hash: Some ( conf_hash) ,
701
- event: OnchainEvent :: Claim { claim_request: first_claim_txid_height. 0 . clone ( ) }
705
+ event: OnchainEvent :: Claim { claim_request: Txid :: from_inner ( first_claim_txid_height. 0 ) }
702
706
} ;
703
707
if !self . onchain_events_awaiting_threshold_conf. contains( & entry) {
704
708
self . onchain_events_awaiting_threshold_conf. push( entry) ;
@@ -754,14 +758,15 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
754
758
if entry. has_reached_confirmation_threshold ( cur_height) {
755
759
match entry. event {
756
760
OnchainEvent :: Claim { claim_request } => {
761
+ let package_id = claim_request. into_inner ( ) ;
757
762
// We may remove a whole set of claim outpoints here, as these one may have
758
763
// been aggregated in a single tx and claimed so atomically
759
- if let Some ( request) = self . pending_claim_requests . remove ( & claim_request ) {
764
+ if let Some ( request) = self . pending_claim_requests . remove ( & package_id ) {
760
765
for outpoint in request. outpoints ( ) {
761
766
log_debug ! ( logger, "Removing claim tracking for {} due to maturation of claim tx {}." , outpoint, claim_request) ;
762
767
self . claimable_outpoints . remove ( & outpoint) ;
763
768
#[ cfg( anchors) ]
764
- self . pending_claim_events . remove ( & claim_request ) ;
769
+ self . pending_claim_events . remove ( & package_id ) ;
765
770
}
766
771
}
767
772
} ,
0 commit comments