Skip to content

Commit 4a34b8c

Browse files
Ensure htlc_maximum_msat is at least htlc_minimum_msat (#3117)
We previously checked only that it was greater or equal to the remote `htlc_minimum_msat` but not our local `htlc_minimum_msat`.
1 parent 2e6c6fe commit 4a34b8c

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

eclair-core/src/main/scala/fr/acinq/eclair/channel/Helpers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ object Helpers {
356356
}
357357
for (balanceThreshold <- nodeParams.channelConf.balanceThresholds) {
358358
if (commitments.availableBalanceForSend <= balanceThreshold.available) {
359-
return balanceThreshold.maxHtlcAmount.toMilliSatoshi.max(commitments.params.remoteParams.htlcMinimum).min(commitments.params.maxHtlcAmount)
359+
return balanceThreshold.maxHtlcAmount.toMilliSatoshi.max(commitments.params.remoteParams.htlcMinimum.max(commitments.params.localParams.htlcMinimum)).min(commitments.params.maxHtlcAmount)
360360
}
361361
}
362362
commitments.params.maxHtlcAmount

eclair-core/src/test/scala/fr/acinq/eclair/channel/states/e/NormalStateSpec.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,9 @@ class NormalStateSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike with
937937
}
938938
assert(alice.stateData.asInstanceOf[DATA_NORMAL].channelUpdate.channelFlags.isEnabled)
939939
inside(bobListener.expectMsgType[LocalChannelUpdate]) { lcu =>
940-
assert(lcu.channelUpdate.htlcMaximumMsat == 0.msat)
940+
assert(lcu.commitments.params.localParams.htlcMinimum == 1000.msat)
941+
assert(lcu.commitments.params.remoteParams.htlcMinimum == 0.msat)
942+
assert(lcu.channelUpdate.htlcMaximumMsat == 1000.msat)
941943
assert(lcu.channelUpdate.shortChannelId.isInstanceOf[RealShortChannelId])
942944
assert(lcu.channelUpdate.channelFlags.isEnabled)
943945
}
@@ -960,7 +962,7 @@ class NormalStateSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike with
960962
aliceListener.expectNoMessage(100 millis)
961963
bobListener.expectNoMessage(100 millis)
962964
assert(alice.stateData.asInstanceOf[DATA_NORMAL].channelUpdate.htlcMaximumMsat == 500_000_000.msat)
963-
assert(bob.stateData.asInstanceOf[DATA_NORMAL].channelUpdate.htlcMaximumMsat == 0.msat)
965+
assert(bob.stateData.asInstanceOf[DATA_NORMAL].channelUpdate.htlcMaximumMsat == 1000.msat)
964966

965967
// Alice sends more funds, reaching Bob's third balance bucket and causing him to update his htlc_maximum_msat.
966968
val (p2, htlc2) = addHtlc(2_000_000 msat, alice, bob, alice2bob, bob2alice)
@@ -981,8 +983,8 @@ class NormalStateSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike with
981983
crossSign(alice, bob, alice2bob, bob2alice)
982984
assert(alice.stateData.asInstanceOf[DATA_NORMAL].commitments.latest.localCommit.spec.toLocal == 989_500_000.msat)
983985
assert(bob.stateData.asInstanceOf[DATA_NORMAL].commitments.latest.localCommit.spec.toLocal == 10_500_000.msat)
984-
assert(bobListener.expectMsgType[LocalChannelUpdate].channelUpdate.htlcMaximumMsat == 0.msat)
985-
awaitCond(bob.stateData.asInstanceOf[DATA_NORMAL].channelUpdate.htlcMaximumMsat == 0.msat)
986+
assert(bobListener.expectMsgType[LocalChannelUpdate].channelUpdate.htlcMaximumMsat == 1000.msat)
987+
awaitCond(bob.stateData.asInstanceOf[DATA_NORMAL].channelUpdate.htlcMaximumMsat == 1000.msat)
986988
aliceListener.expectNoMessage(100 millis)
987989
assert(alice.stateData.asInstanceOf[DATA_NORMAL].channelUpdate.htlcMaximumMsat == 500_000_000.msat)
988990

0 commit comments

Comments
 (0)