@@ -2987,49 +2987,8 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
2987
2987
pub fn block_connected ( & mut self , header : & BlockHeader , height : u32 , txn_matched : & [ & Transaction ] , indexes_of_txn_matched : & [ u32 ] ) -> Result < Option < msgs:: FundingLocked > , msgs:: ErrorMessage > {
2988
2988
let non_shutdown_state = self . channel_state & ( !MULTI_STATE_FLAGS ) ;
2989
2989
if header. bitcoin_hash ( ) != self . last_block_connected {
2990
- self . last_block_connected = header. bitcoin_hash ( ) ;
2991
- self . channel_monitor . last_block_hash = self . last_block_connected ;
2992
2990
if self . funding_tx_confirmations > 0 {
2993
2991
self . funding_tx_confirmations += 1 ;
2994
- if self . funding_tx_confirmations == self . minimum_depth as u64 {
2995
- let need_commitment_update = if non_shutdown_state == ChannelState :: FundingSent as u32 {
2996
- self . channel_state |= ChannelState :: OurFundingLocked as u32 ;
2997
- true
2998
- } else if non_shutdown_state == ( ChannelState :: FundingSent as u32 | ChannelState :: TheirFundingLocked as u32 ) {
2999
- self . channel_state = ChannelState :: ChannelFunded as u32 | ( self . channel_state & MULTI_STATE_FLAGS ) ;
3000
- self . channel_update_count += 1 ;
3001
- true
3002
- } else if non_shutdown_state == ( ChannelState :: FundingSent as u32 | ChannelState :: OurFundingLocked as u32 ) {
3003
- // We got a reorg but not enough to trigger a force close, just update
3004
- // funding_tx_confirmed_in and return.
3005
- false
3006
- } else if self . channel_state < ChannelState :: ChannelFunded as u32 {
3007
- panic ! ( "Started confirming a channel in a state pre-FundingSent?: {}" , self . channel_state) ;
3008
- } else {
3009
- // We got a reorg but not enough to trigger a force close, just update
3010
- // funding_tx_confirmed_in and return.
3011
- false
3012
- } ;
3013
- self . funding_tx_confirmed_in = Some ( header. bitcoin_hash ( ) ) ;
3014
-
3015
- //TODO: Note that this must be a duplicate of the previous commitment point they sent us,
3016
- //as otherwise we will have a commitment transaction that they can't revoke (well, kinda,
3017
- //they can by sending two revoke_and_acks back-to-back, but not really). This appears to be
3018
- //a protocol oversight, but I assume I'm just missing something.
3019
- if need_commitment_update {
3020
- if self . channel_state & ( ChannelState :: MonitorUpdateFailed as u32 ) == 0 {
3021
- let next_per_commitment_secret = self . build_local_commitment_secret ( self . cur_local_commitment_transaction_number ) ;
3022
- let next_per_commitment_point = PublicKey :: from_secret_key ( & self . secp_ctx , & next_per_commitment_secret) ;
3023
- return Ok ( Some ( msgs:: FundingLocked {
3024
- channel_id : self . channel_id ,
3025
- next_per_commitment_point : next_per_commitment_point,
3026
- } ) ) ;
3027
- } else {
3028
- self . monitor_pending_funding_locked = true ;
3029
- return Ok ( None ) ;
3030
- }
3031
- }
3032
- }
3033
2992
}
3034
2993
}
3035
2994
if non_shutdown_state & !( ChannelState :: TheirFundingLocked as u32 ) == ChannelState :: FundingSent as u32 {
@@ -3072,6 +3031,51 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
3072
3031
}
3073
3032
}
3074
3033
}
3034
+ if header. bitcoin_hash ( ) != self . last_block_connected {
3035
+ self . last_block_connected = header. bitcoin_hash ( ) ;
3036
+ self . channel_monitor . last_block_hash = self . last_block_connected ;
3037
+ if self . funding_tx_confirmations > 0 {
3038
+ if self . funding_tx_confirmations == self . minimum_depth as u64 {
3039
+ let need_commitment_update = if non_shutdown_state == ChannelState :: FundingSent as u32 {
3040
+ self . channel_state |= ChannelState :: OurFundingLocked as u32 ;
3041
+ true
3042
+ } else if non_shutdown_state == ( ChannelState :: FundingSent as u32 | ChannelState :: TheirFundingLocked as u32 ) {
3043
+ self . channel_state = ChannelState :: ChannelFunded as u32 | ( self . channel_state & MULTI_STATE_FLAGS ) ;
3044
+ self . channel_update_count += 1 ;
3045
+ true
3046
+ } else if non_shutdown_state == ( ChannelState :: FundingSent as u32 | ChannelState :: OurFundingLocked as u32 ) {
3047
+ // We got a reorg but not enough to trigger a force close, just update
3048
+ // funding_tx_confirmed_in and return.
3049
+ false
3050
+ } else if self . channel_state < ChannelState :: ChannelFunded as u32 {
3051
+ panic ! ( "Started confirming a channel in a state pre-FundingSent?: {}" , self . channel_state) ;
3052
+ } else {
3053
+ // We got a reorg but not enough to trigger a force close, just update
3054
+ // funding_tx_confirmed_in and return.
3055
+ false
3056
+ } ;
3057
+ self . funding_tx_confirmed_in = Some ( header. bitcoin_hash ( ) ) ;
3058
+
3059
+ //TODO: Note that this must be a duplicate of the previous commitment point they sent us,
3060
+ //as otherwise we will have a commitment transaction that they can't revoke (well, kinda,
3061
+ //they can by sending two revoke_and_acks back-to-back, but not really). This appears to be
3062
+ //a protocol oversight, but I assume I'm just missing something.
3063
+ if need_commitment_update {
3064
+ if self . channel_state & ( ChannelState :: MonitorUpdateFailed as u32 ) == 0 {
3065
+ let next_per_commitment_secret = self . build_local_commitment_secret ( self . cur_local_commitment_transaction_number ) ;
3066
+ let next_per_commitment_point = PublicKey :: from_secret_key ( & self . secp_ctx , & next_per_commitment_secret) ;
3067
+ return Ok ( Some ( msgs:: FundingLocked {
3068
+ channel_id : self . channel_id ,
3069
+ next_per_commitment_point : next_per_commitment_point,
3070
+ } ) ) ;
3071
+ } else {
3072
+ self . monitor_pending_funding_locked = true ;
3073
+ return Ok ( None ) ;
3074
+ }
3075
+ }
3076
+ }
3077
+ }
3078
+ }
3075
3079
Ok ( None )
3076
3080
}
3077
3081
0 commit comments