From 0e5ec4dce960a6effe3d3395b9c00777d1838eb8 Mon Sep 17 00:00:00 2001 From: Pierre-Marie Padiou Date: Mon, 14 Dec 2020 14:37:31 +0100 Subject: [PATCH] Fix bug in enforceMinimumFeerate (#1629) Using the `copy` method is risky because it's easy to forget newly added fields. Also the test didn't make much sense. --- .../eclair/blockchain/fee/FallbackFeeProvider.scala | 6 ++++-- .../blockchain/fee/FallbackFeeProviderSpec.scala | 10 +++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProvider.scala b/eclair-core/src/main/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProvider.scala index ee5adb964..d3eec6e4f 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProvider.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProvider.scala @@ -43,14 +43,16 @@ class FallbackFeeProvider(providers: Seq[FeeProvider], minFeeratePerByte: Feerat object FallbackFeeProvider { - private def enforceMinimumFeerate(feeratesPerKB: FeeratesPerKB, minFeeratePerKB: FeeratePerKB): FeeratesPerKB = feeratesPerKB.copy( + private def enforceMinimumFeerate(feeratesPerKB: FeeratesPerKB, minFeeratePerKB: FeeratePerKB): FeeratesPerKB = FeeratesPerKB( mempoolMinFee = feeratesPerKB.mempoolMinFee.max(minFeeratePerKB), block_1 = feeratesPerKB.block_1.max(minFeeratePerKB), blocks_2 = feeratesPerKB.blocks_2.max(minFeeratePerKB), blocks_6 = feeratesPerKB.blocks_6.max(minFeeratePerKB), blocks_12 = feeratesPerKB.blocks_12.max(minFeeratePerKB), blocks_36 = feeratesPerKB.blocks_36.max(minFeeratePerKB), - blocks_72 = feeratesPerKB.blocks_72.max(minFeeratePerKB) + blocks_72 = feeratesPerKB.blocks_72.max(minFeeratePerKB), + blocks_144 = feeratesPerKB.blocks_144.max(minFeeratePerKB), + blocks_1008 = feeratesPerKB.blocks_1008.max(minFeeratePerKB) ) } diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProviderSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProviderSpec.scala index efb061b2c..9f0306405 100644 --- a/eclair-core/src/test/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProviderSpec.scala +++ b/eclair-core/src/test/scala/fr/acinq/eclair/blockchain/fee/FallbackFeeProviderSpec.scala @@ -71,11 +71,11 @@ class FallbackFeeProviderSpec extends AnyFunSuite { } test("ensure minimum feerate") { - val feeratePerKB = FeeratePerKB(1000 sat) - val constantFeeProvider = new ConstantFeeProvider(FeeratesPerKB(feeratePerKB, feeratePerKB, feeratePerKB, feeratePerKB, feeratePerKB, feeratePerKB, feeratePerKB, feeratePerKB, feeratePerKB)) - val fallbackFeeProvider = new FallbackFeeProvider(constantFeeProvider :: Nil, FeeratePerByte(2 sat)) - val expectedFeeratePerKB = FeeratePerKB(2000 sat) - assert(await(fallbackFeeProvider.getFeerates) === FeeratesPerKB(expectedFeeratePerKB, expectedFeeratePerKB, expectedFeeratePerKB, expectedFeeratePerKB, expectedFeeratePerKB, expectedFeeratePerKB, expectedFeeratePerKB, feeratePerKB, feeratePerKB)) + val constantFeeProvider = new ConstantFeeProvider(FeeratesPerKB(FeeratePerKB(64000 sat), FeeratePerKB(32000 sat), FeeratePerKB(16000 sat), FeeratePerKB(8000 sat), FeeratePerKB(4000 sat), FeeratePerKB(2000 sat), FeeratePerKB(1500 sat), FeeratePerKB(1000 sat), FeeratePerKB(1000 sat))) + val minFeeratePerByte = FeeratePerByte(2 sat) + val minFeeratePerKB = FeeratePerKB(minFeeratePerByte) + val fallbackFeeProvider = new FallbackFeeProvider(constantFeeProvider :: Nil, minFeeratePerByte) + assert(await(fallbackFeeProvider.getFeerates) === FeeratesPerKB(FeeratePerKB(64000 sat), FeeratePerKB(32000 sat), FeeratePerKB(16000 sat), FeeratePerKB(8000 sat), FeeratePerKB(4000 sat), minFeeratePerKB, minFeeratePerKB, minFeeratePerKB, minFeeratePerKB)) } }