What changed, and why it matters
This change makes Eclair easier to run on Bitcoin test networks by using configured default transaction fee rates when Bitcoin Core cannot estimate fees due to limited block data. It also lowers the default fee rates to match current network conditions. This is a usability and operational improvement, not a security fix.
No security action required. Review the lowered default feerates to ensure they remain acceptable for your deployment's confirmation-time requirements.
Security signals we found
No security-relevant signals identified
Change is operational/usability-focused for testnet environments
Default fee rate reduction is a configuration tuning, not a vulnerability fix
Evidence from the diff
The commit modifies fee provider setup in Setup.scala so that testnet3 and testnet4 use a FallbackFeeProvider that first tries BitcoinCoreFeeProvider with smoothing, then falls back to ConstantFeeProvider with default feerates. Previously, only regtest and signet had such a fallback. Mainnet continues to use only blockchain-based fee estimation. The default feerates in reference.conf are also reduced across all tiers.
Changed components
eclair-core/src/main/scala/fr/acinq/eclair/Setup.scalaeclair-core/src/main/resources/reference.confInspect captured patch +10 / −6
diff --git a/eclair-core/src/main/resources/reference.conf b/eclair-core/src/main/resources/reference.conf
index 8ce57a4..2e456cf 100644
--- a/eclair-core/src/main/resources/reference.conf
+++ b/eclair-core/src/main/resources/reference.conf
@@ -271,11 +271,11 @@ eclair {
smoothing-window = 6 // 1 = no smoothing
default-feerates { // the following values are in satoshis per byte
- minimum = 5
- slow = 5
- medium = 10
- fast = 20
- fastest = 30
+ minimum = 1
+ slow = 2
+ medium = 5
+ fast = 10
+ fastest = 20
}
// confirmation priority for each transaction type, can be slow/medium/fast
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala b/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala
index 4e48b2f..6d9bc2d 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala
@@ -22,7 +22,6 @@ import akka.actor.typed.scaladsl.adapter.{ClassicActorRefOps, ClassicActorSystem
import akka.actor.{ActorRef, ActorSystem, Props, SupervisorStrategy, typed}
import akka.pattern.after
import akka.util.Timeout
-import fr.acinq.bitcoin.scalacompat.Crypto.PublicKey
import fr.acinq.bitcoin.scalacompat.{Block, BlockHash, BlockId, ByteVector32, Satoshi, Script, ScriptElt, addressToPublicKeyScript}
import fr.acinq.eclair.NodeParams.hashFromChain
import fr.acinq.eclair.Setup.Seeds
@@ -250,7 +249,12 @@ class Setup(val datadir: File,
feeProvider = nodeParams.chainHash match {
case Block.RegtestGenesisBlock.hash | Block.SignetGenesisBlock.hash =>
FallbackFeeProvider(ConstantFeeProvider(defaultFeerates) :: Nil, minFeeratePerByte)
+ case Block.Testnet3GenesisBlock.hash | Block.Testnet4GenesisBlock.hash =>
+ // On testnet, we fallback to default feerates when there aren't enough block data to estimate fees.
+ val smoothFeerateWindow = config.getInt("on-chain-fees.smoothing-window")
+ FallbackFeeProvider(SmoothFeeProvider(BitcoinCoreFeeProvider(bitcoin, defaultFeerates), smoothFeerateWindow) :: ConstantFeeProvider(defaultFeerates) :: Nil, minFeeratePerByte)
case _ =>
+ // On mainnet, we always use blockchain data to estimate fees and ignore configured fallbacks.
val smoothFeerateWindow = config.getInt("on-chain-fees.smoothing-window")
FallbackFeeProvider(SmoothFeeProvider(BitcoinCoreFeeProvider(bitcoin, defaultFeerates), smoothFeerateWindow) :: Nil, minFeeratePerByte)
}
Why this scored 19/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.