@@ -479,6 +479,9 @@ pub(crate) const MIN_AFFORDABLE_HTLC_COUNT: usize = 4;
479479/// * `EXPIRE_PREV_CONFIG_TICKS` = convergence_delay / tick_interval
480480pub ( crate ) const EXPIRE_PREV_CONFIG_TICKS : usize = 5 ;
481481
482+ /// Number of blocks needed for an output from a coinbase transaction to be spendable.
483+ pub ( crate ) const COINBASE_MATURITY : u32 = 100 ;
484+
482485struct PendingChannelMonitorUpdate {
483486 update : ChannelMonitorUpdate ,
484487 /// In some cases we need to delay letting the [`ChannelMonitorUpdate`] go until after an
@@ -5235,6 +5238,15 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
52355238 }
52365239 }
52375240 }
5241+
5242+ // if this is a coinbase transaction and not a 0-conf channel
5243+ // we should update our min_depth to 100 to handle coinbase maturity
5244+ if tx. is_coin_base ( ) &&
5245+ self . minimum_depth . unwrap_or ( 0 ) > 0 &&
5246+ self . minimum_depth . unwrap_or ( 0 ) < COINBASE_MATURITY {
5247+ self . minimum_depth = Some ( COINBASE_MATURITY ) ;
5248+ }
5249+
52385250 // If we allow 1-conf funding, we may need to check for channel_ready here and
52395251 // send it immediately instead of waiting for a best_block_updated call (which
52405252 // may have already happened for this block).
@@ -5547,6 +5559,15 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
55475559
55485560 self . channel_state = ChannelState :: FundingCreated as u32 ;
55495561 self . channel_id = funding_txo. to_channel_id ( ) ;
5562+
5563+ // If the funding transaction is a coinbase transaction, we need to set the minimum depth to 100
5564+ // We can skip this if it is a zero-conf channel.
5565+ if funding_transaction. is_coin_base ( ) &&
5566+ self . minimum_depth . unwrap_or ( 0 ) > 0 &&
5567+ self . minimum_depth . unwrap_or ( 0 ) < COINBASE_MATURITY {
5568+ self . minimum_depth = Some ( COINBASE_MATURITY ) ;
5569+ }
5570+
55505571 self . funding_transaction = Some ( funding_transaction) ;
55515572
55525573 Ok ( msgs:: FundingCreated {
0 commit comments