@@ -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+
482485// TODO: We should refactor this to be an Inbound/OutboundChannel until initial setup handshaking
483486// has been completed, and then turn into a Channel to get compiler-time enforcement of things like
484487// calling channel_id() before we're set up or things like get_outbound_funding_signed on an
@@ -5142,6 +5145,15 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
51425145 }
51435146 }
51445147 }
5148+
5149+ // if this is a coinbase transaction and not a 0-conf channel
5150+ // we should update our min_depth to 100 to handle coinbase maturity
5151+ if tx. is_coin_base ( ) &&
5152+ self . minimum_depth . unwrap_or ( 0 ) > 0 &&
5153+ self . minimum_depth . unwrap_or ( 0 ) < COINBASE_MATURITY {
5154+ self . minimum_depth = Some ( COINBASE_MATURITY ) ;
5155+ }
5156+
51455157 // If we allow 1-conf funding, we may need to check for channel_ready here and
51465158 // send it immediately instead of waiting for a best_block_updated call (which
51475159 // may have already happened for this block).
@@ -5454,6 +5466,15 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
54545466
54555467 self . channel_state = ChannelState :: FundingCreated as u32 ;
54565468 self . channel_id = funding_txo. to_channel_id ( ) ;
5469+
5470+ // If the funding transaction is a coinbase transaction, we need to set the minimum depth to 100
5471+ // We can skip this if it is a zero-conf channel.
5472+ if funding_transaction. is_coin_base ( ) &&
5473+ self . minimum_depth . unwrap_or ( 0 ) > 0 &&
5474+ self . minimum_depth . unwrap_or ( 0 ) < COINBASE_MATURITY {
5475+ self . minimum_depth = Some ( COINBASE_MATURITY ) ;
5476+ }
5477+
54575478 self . funding_transaction = Some ( funding_transaction) ;
54585479
54595480 Ok ( msgs:: FundingCreated {
0 commit comments