From 2539b5f2353bcc8362cfb4cd2dee006be0627770 Mon Sep 17 00:00:00 2001 From: t-bast Date: Wed, 5 Nov 2025 14:52:59 +0100 Subject: [PATCH 1/3] Use 73 bytes der-encoded signatures in weight estimation While 73 bytes der-encoded signatures aren't standard (they're only possible with high-S signatures), miners could accept such signatures. Most of our tests use 72 bytes der-encoded signatures because we will never generate 73 bytes der-encoded signatures ourselves. But it's more safe to use a 73 bytes signature in our weight estimation because: - it's what the BOLTs recommend - it's what other implementations use (e.g. LDK) which means they may reject our interactive-tx attempts by thinking we're under-paying fees --- .../main/scala/fr/acinq/eclair/transactions/Transactions.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala index 2375315af0..bc76a9775e 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala @@ -97,7 +97,7 @@ object Transactions { } sealed trait SegwitV0CommitmentFormat extends CommitmentFormat { - override val fundingInputWeight = 384 + override val fundingInputWeight = 386 } /** From 3a40155bfbd9bc0c73b15d12bc8212df88d68431 Mon Sep 17 00:00:00 2001 From: t-bast Date: Wed, 5 Nov 2025 15:05:31 +0100 Subject: [PATCH 2/3] Fix tests --- .../scala/fr/acinq/eclair/transactions/TransactionsSpec.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala index 9d33fd6e38..097151aaea 100644 --- a/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala +++ b/eclair-core/src/test/scala/fr/acinq/eclair/transactions/TransactionsSpec.scala @@ -152,8 +152,8 @@ class TransactionsSpec extends AnyFunSuite with Logging { case _: SimpleTaprootChannelCommitmentFormat => assert(actual == expected) case _: AnchorOutputsCommitmentFormat => // ECDSA signatures are der-encoded, which creates some variability in signature size compared to the baseline. - assert(actual <= expected + 3) - assert(actual >= expected - 3) + assert(actual <= expected + 4) + assert(actual >= expected - 4) } } From 976df7eb7ebde3752d89ff3a89e00e938b48b5f1 Mon Sep 17 00:00:00 2001 From: Bastien Teinturier <31281497+t-bast@users.noreply.github.com> Date: Wed, 5 Nov 2025 15:43:20 +0100 Subject: [PATCH 3/3] Update eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala Co-authored-by: Fabrice Drouin --- .../main/scala/fr/acinq/eclair/transactions/Transactions.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala index bc76a9775e..0a9e5f37b2 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala @@ -97,6 +97,8 @@ object Transactions { } sealed trait SegwitV0CommitmentFormat extends CommitmentFormat { + // see https://github.com/lightning/bolts/blob/master/03-transactions.md#appendix-a-expected-weights + // funding input weight = 4 * funding_input_size + witness_size = 4 * 41 + 222 = 386 override val fundingInputWeight = 386 }