From 378a332954d6840339c93fe89c604c2a58013d95 Mon Sep 17 00:00:00 2001 From: Fabrice Drouin Date: Wed, 12 Apr 2017 15:17:01 +0200 Subject: [PATCH] LocalParams should not include maxFeerateMismatch (#70) as it is not a direct protocol parameter --- .../src/main/scala/fr/acinq/eclair/channel/Channel.scala | 8 ++++---- .../main/scala/fr/acinq/eclair/channel/ChannelTypes.scala | 3 +-- .../main/scala/fr/acinq/eclair/channel/Commitments.scala | 4 ++-- .../src/main/scala/fr/acinq/eclair/channel/Helpers.scala | 4 ++-- eclair-node/src/main/scala/fr/acinq/eclair/io/Peer.scala | 3 +-- .../test/scala/fr/acinq/eclair/db/ChannelStateSpec.scala | 3 +-- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/eclair-node/src/main/scala/fr/acinq/eclair/channel/Channel.scala b/eclair-node/src/main/scala/fr/acinq/eclair/channel/Channel.scala index fbfe483f8..f4d777820 100644 --- a/eclair-node/src/main/scala/fr/acinq/eclair/channel/Channel.scala +++ b/eclair-node/src/main/scala/fr/acinq/eclair/channel/Channel.scala @@ -246,7 +246,7 @@ class Channel(val nodeParams: NodeParams, remoteNodeId: PublicKey, blockchain: A case Success(MakeFundingTxResponse(_, fundingTx, fundingTxOutputIndex, _)) => // let's create the first commitment tx that spends the yet uncommitted funding tx import data._ - val (localSpec, localCommitTx, remoteSpec, remoteCommitTx) = Funding.makeFirstCommitTxs(localParams, remoteParams, fundingSatoshis, pushMsat, initialFeeratePerKw, fundingTx.hash, fundingTxOutputIndex, remoteFirstPerCommitmentPoint) + val (localSpec, localCommitTx, remoteSpec, remoteCommitTx) = Funding.makeFirstCommitTxs(localParams, remoteParams, fundingSatoshis, pushMsat, initialFeeratePerKw, fundingTx.hash, fundingTxOutputIndex, remoteFirstPerCommitmentPoint, nodeParams.maxFeerateMismatch) val localSigOfRemoteTx = Transactions.sign(remoteCommitTx, localParams.fundingPrivKey) // signature of their initial commitment tx that pays remote pushMsat @@ -275,7 +275,7 @@ class Channel(val nodeParams: NodeParams, remoteNodeId: PublicKey, blockchain: A when(WAIT_FOR_FUNDING_CREATED)(handleExceptions { case Event(FundingCreated(_, fundingTxHash, fundingTxOutputIndex, remoteSig), DATA_WAIT_FOR_FUNDING_CREATED(temporaryChannelId, localParams, remoteParams, fundingSatoshis, pushMsat, initialFeeratePerKw, remoteFirstPerCommitmentPoint, _)) => // they fund the channel with their funding tx, so the money is theirs (but we are paid pushMsat) - val (localSpec, localCommitTx, remoteSpec, remoteCommitTx) = Funding.makeFirstCommitTxs(localParams, remoteParams, fundingSatoshis: Long, pushMsat, initialFeeratePerKw, fundingTxHash, fundingTxOutputIndex, remoteFirstPerCommitmentPoint) + val (localSpec, localCommitTx, remoteSpec, remoteCommitTx) = Funding.makeFirstCommitTxs(localParams, remoteParams, fundingSatoshis: Long, pushMsat, initialFeeratePerKw, fundingTxHash, fundingTxOutputIndex, remoteFirstPerCommitmentPoint, nodeParams.maxFeerateMismatch) // check remote signature validity val localSigOfLocalTx = Transactions.sign(localCommitTx, localParams.fundingPrivKey) @@ -494,7 +494,7 @@ class Channel(val nodeParams: NodeParams, remoteNodeId: PublicKey, blockchain: A } case Event(fee: UpdateFee, d: DATA_NORMAL) => - Try(Commitments.receiveFee(d.commitments, fee)) match { + Try(Commitments.receiveFee(d.commitments, fee, nodeParams.maxFeerateMismatch)) match { case Success(commitments1) => goto(NORMAL) using d.copy(commitments = commitments1) case Failure(cause) => handleLocalError(cause, d) } @@ -724,7 +724,7 @@ class Channel(val nodeParams: NodeParams, remoteNodeId: PublicKey, blockchain: A } case Event(fee: UpdateFee, d: DATA_SHUTDOWN) => - Try(Commitments.receiveFee(d.commitments, fee)) match { + Try(Commitments.receiveFee(d.commitments, fee, nodeParams.maxFeerateMismatch)) match { case Success(commitments1) => goto(NORMAL) using d.copy(commitments = commitments1) case Failure(cause) => handleLocalError(cause, d) } diff --git a/eclair-node/src/main/scala/fr/acinq/eclair/channel/ChannelTypes.scala b/eclair-node/src/main/scala/fr/acinq/eclair/channel/ChannelTypes.scala index ba5ba9c17..b01db21d9 100644 --- a/eclair-node/src/main/scala/fr/acinq/eclair/channel/ChannelTypes.scala +++ b/eclair-node/src/main/scala/fr/acinq/eclair/channel/ChannelTypes.scala @@ -167,8 +167,7 @@ final case class LocalParams(nodeId: PublicKey, shaSeed: BinaryData, isFunder: Boolean, globalFeatures: BinaryData, - localFeatures: BinaryData, - maxFeerateMismatch: Double) + localFeatures: BinaryData) final case class RemoteParams(nodeId: PublicKey, dustLimitSatoshis: Long, diff --git a/eclair-node/src/main/scala/fr/acinq/eclair/channel/Commitments.scala b/eclair-node/src/main/scala/fr/acinq/eclair/channel/Commitments.scala index d05be9d59..72d584eae 100644 --- a/eclair-node/src/main/scala/fr/acinq/eclair/channel/Commitments.scala +++ b/eclair-node/src/main/scala/fr/acinq/eclair/channel/Commitments.scala @@ -281,7 +281,7 @@ object Commitments extends Logging { commitments.remoteChanges.signed.contains(fee) || commitments.remoteChanges.acked.contains(fee) - def receiveFee(commitments: Commitments, fee: UpdateFee): Commitments = + def receiveFee(commitments: Commitments, fee: UpdateFee, maxFeerateMismatch: Double): Commitments = isOldFee(commitments, fee) match { case true => commitments case false => @@ -290,7 +290,7 @@ object Commitments extends Logging { } val localFeeratePerKw = Globals.feeratePerKw.get() - if (Helpers.isFeeDiffTooHigh(fee.feeratePerKw, localFeeratePerKw, commitments.localParams.maxFeerateMismatch)) { + if (Helpers.isFeeDiffTooHigh(fee.feeratePerKw, localFeeratePerKw, maxFeerateMismatch)) { throw new RuntimeException(s"local/remote feerates are too different: remoteFeeratePerKw=${fee.feeratePerKw} localFeeratePerKw=$localFeeratePerKw") } diff --git a/eclair-node/src/main/scala/fr/acinq/eclair/channel/Helpers.scala b/eclair-node/src/main/scala/fr/acinq/eclair/channel/Helpers.scala index 13f8e376a..bd2e8494b 100644 --- a/eclair-node/src/main/scala/fr/acinq/eclair/channel/Helpers.scala +++ b/eclair-node/src/main/scala/fr/acinq/eclair/channel/Helpers.scala @@ -109,7 +109,7 @@ object Helpers { * @param remoteFirstPerCommitmentPoint * @return (localSpec, localTx, remoteSpec, remoteTx, fundingTxOutput) */ - def makeFirstCommitTxs(localParams: LocalParams, remoteParams: RemoteParams, fundingSatoshis: Long, pushMsat: Long, initialFeeratePerKw: Long, fundingTxHash: BinaryData, fundingTxOutputIndex: Int, remoteFirstPerCommitmentPoint: Point): (CommitmentSpec, CommitTx, CommitmentSpec, CommitTx) = { + def makeFirstCommitTxs(localParams: LocalParams, remoteParams: RemoteParams, fundingSatoshis: Long, pushMsat: Long, initialFeeratePerKw: Long, fundingTxHash: BinaryData, fundingTxOutputIndex: Int, remoteFirstPerCommitmentPoint: Point, maxFeerateMismatch: Double): (CommitmentSpec, CommitTx, CommitmentSpec, CommitTx) = { val toLocalMsat = if (localParams.isFunder) fundingSatoshis * 1000 - pushMsat else pushMsat val toRemoteMsat = if (localParams.isFunder) pushMsat else fundingSatoshis * 1000 - pushMsat @@ -120,7 +120,7 @@ object Helpers { if (!localParams.isFunder) { // they are funder, we need to make sure that they can pay the fee is reasonable, and that they can afford to pay it val localFeeratePerKw = Globals.feeratePerKw.get() - if (isFeeDiffTooHigh(initialFeeratePerKw, localFeeratePerKw, localParams.maxFeerateMismatch)) { + if (isFeeDiffTooHigh(initialFeeratePerKw, localFeeratePerKw, maxFeerateMismatch)) { throw new RuntimeException(s"local/remote feerates are too different: remoteFeeratePerKw=$initialFeeratePerKw localFeeratePerKw=$localFeeratePerKw") } val toRemote = MilliSatoshi(remoteSpec.toLocalMsat) diff --git a/eclair-node/src/main/scala/fr/acinq/eclair/io/Peer.scala b/eclair-node/src/main/scala/fr/acinq/eclair/io/Peer.scala index cfbac9edd..8312e3a18 100644 --- a/eclair-node/src/main/scala/fr/acinq/eclair/io/Peer.scala +++ b/eclair-node/src/main/scala/fr/acinq/eclair/io/Peer.scala @@ -258,8 +258,7 @@ object Peer { shaSeed = Crypto.sha256(generateKey(nodeParams, keyIndex :: 4L :: Nil).toBin), // TODO: check that isFunder = isFunder, globalFeatures = nodeParams.globalFeatures, - localFeatures = nodeParams.localFeatures, - maxFeerateMismatch = nodeParams.maxFeerateMismatch) + localFeatures = nodeParams.localFeatures) } def randomTemporaryChannelId: BinaryData = { diff --git a/eclair-node/src/test/scala/fr/acinq/eclair/db/ChannelStateSpec.scala b/eclair-node/src/test/scala/fr/acinq/eclair/db/ChannelStateSpec.scala index 336978be8..2944e1fb2 100644 --- a/eclair-node/src/test/scala/fr/acinq/eclair/db/ChannelStateSpec.scala +++ b/eclair-node/src/test/scala/fr/acinq/eclair/db/ChannelStateSpec.scala @@ -46,8 +46,7 @@ object ChannelStateSpec { shaSeed = BinaryData("05" * 32), isFunder = true, globalFeatures = "foo".getBytes(), - localFeatures = "bar".getBytes(), - maxFeerateMismatch = 5.0) + localFeatures = "bar".getBytes()) val remoteParams = RemoteParams( nodeId = randomKey.publicKey,