Skip to content

Commit 363c167

Browse files
committed
36/37
1 parent b20a26a commit 363c167

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed

eclair-core/src/main/scala/fr/acinq/eclair/Features.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,17 +264,17 @@ object Features {
264264
val mandatory = 28
265265
}
266266

267-
case object AttributableError extends Feature with InitFeature with NodeFeature with Bolt11Feature {
268-
val rfcName = "option_attributable_error"
269-
val mandatory = 30
270-
}
271-
272267
// TODO: this should also extend NodeFeature once the spec is finalized
273268
case object Quiescence extends Feature with InitFeature {
274269
val rfcName = "option_quiesce"
275270
val mandatory = 34
276271
}
277272

273+
case object AttributableError extends Feature with InitFeature with NodeFeature with Bolt11Feature {
274+
val rfcName = "option_attributable_error"
275+
val mandatory = 36
276+
}
277+
278278
case object OnionMessages extends Feature with InitFeature with NodeFeature {
279279
val rfcName = "option_onion_messages"
280280
val mandatory = 38

eclair-core/src/main/scala/fr/acinq/eclair/crypto/Sphinx.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,9 @@ object Sphinx extends Logging {
376376

377377
def wrapOrCreate(errorPacket: ByteVector, sharedSecret: ByteVector32, holdTime: FiniteDuration): ByteVector =
378378
wrap(errorPacket, sharedSecret, holdTime, isSource = false) match {
379-
case Failure(_) => create(sharedSecret, TemporaryNodeFailure(), holdTime)
379+
case Failure(_) =>
380+
// There is no failure message for this use-case, using TemporaryNodeFailure instead.
381+
create(sharedSecret, TemporaryNodeFailure(), holdTime)
380382
case Success(value) => value
381383
}
382384

eclair-core/src/test/scala/fr/acinq/eclair/crypto/SphinxSpec.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -437,15 +437,15 @@ class SphinxSpec extends AnyFunSuite {
437437
).map(ByteVector32(_))
438438

439439
// publicKeys(2) creates an invalid random packet, or publicKeys(1) tries to shift blame by pretending to receive random data from publicKeys(2)
440-
val packet1 = randomBytes(12599)
440+
val packet1 = randomBytes(1200)
441441

442442
val hopPayload2 = AttributableError.HopPayload(isPayloadSource = false, 50 millis)
443443
val Success(packet2) = AttributableErrorPacket.wrap(packet1, sharedSecrets(1), 50 millis, isSource = false)
444-
assert(packet2.length == 12599)
444+
assert(packet2.length == 1200)
445445

446446
val hopPayload3 = AttributableError.HopPayload(isPayloadSource = false, 100 millis)
447447
val Success(packet3) = AttributableErrorPacket.wrap(packet2, sharedSecrets(0), 100 millis, isSource = false)
448-
assert(packet3.length == 12599)
448+
assert(packet3.length == 1200)
449449

450450
val Left(decryptionError) = AttributableErrorPacket.decrypt(packet3, (0 to 4).map(i => (sharedSecrets(i), publicKeys(i))))
451451
val expected = InvalidAttributableErrorPacket(Seq((publicKeys(0), hopPayload3), (publicKeys(1), hopPayload2)), publicKeys(2))

eclair-core/src/test/scala/fr/acinq/eclair/integration/basic/payment/OfferPaymentSpec.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import com.softwaremill.quicklens.ModifyPimp
2424
import fr.acinq.bitcoin.scalacompat.Crypto.PublicKey
2525
import fr.acinq.bitcoin.scalacompat.{ByteVector32, SatoshiLong}
2626
import fr.acinq.eclair.FeatureSupport.Optional
27-
import fr.acinq.eclair.Features.{KeySend, RouteBlinding}
27+
import fr.acinq.eclair.Features.{AttributableError, KeySend, RouteBlinding}
2828
import fr.acinq.eclair.channel.{DATA_NORMAL, RealScidStatus}
2929
import fr.acinq.eclair.integration.basic.fixtures.MinimalNodeFixture
3030
import fr.acinq.eclair.integration.basic.fixtures.MinimalNodeFixture.{connect, getChannelData, getPeerChannels, getRouterData, knownFundingTxs, nodeParamsFor, openChannel, watcherAutopilot}
@@ -34,14 +34,11 @@ import fr.acinq.eclair.payment._
3434
import fr.acinq.eclair.payment.offer.OfferManager
3535
import fr.acinq.eclair.payment.receive.MultiPartHandler.{DummyBlindedHop, ReceivingRoute}
3636
import fr.acinq.eclair.payment.send.PaymentInitiator.{SendPaymentToNode, SendSpontaneousPayment}
37-
import fr.acinq.eclair.payment.send.{ClearRecipient, OfferPayment, PaymentLifecycle}
38-
import fr.acinq.eclair.router.Router
37+
import fr.acinq.eclair.payment.send.{OfferPayment, PaymentLifecycle}
3938
import fr.acinq.eclair.testutils.FixtureSpec
4039
import fr.acinq.eclair.wire.protocol.OfferTypes.{Offer, OfferPaths}
41-
import fr.acinq.eclair.wire.protocol.{IncorrectOrUnknownPaymentDetails, InvalidOnionBlinding}
42-
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, Features, MilliSatoshi, MilliSatoshiLong, ShortChannelId, randomBytes32, randomKey}
4340
import fr.acinq.eclair.wire.protocol.{IncorrectOrUnknownPaymentDetails, InvalidOnionBlinding, OfferTypes}
44-
import fr.acinq.eclair.{CltvExpiryDelta, Features, MilliSatoshi, MilliSatoshiLong, randomBytes32, randomKey}
41+
import fr.acinq.eclair.{CltvExpiryDelta, Features, MilliSatoshi, MilliSatoshiLong, ShortChannelId, randomBytes32, randomKey}
4542
import org.scalatest.concurrent.IntegrationPatience
4643
import org.scalatest.{Tag, TestData}
4744
import scodec.bits.HexStringSyntax
@@ -64,16 +61,19 @@ class OfferPaymentSpec extends FixtureSpec with IntegrationPatience {
6461
val aliceParams = nodeParamsFor("alice", ByteVector32(hex"b4acd47335b25ab7b84b8c020997b12018592bb4631b868762154d77fa8b93a3"))
6562
.modify(_.onionMessageConfig.timeout).setTo(5 minutes)
6663
.modify(_.features.activated).using(_ + (RouteBlinding -> Optional))
64+
.modify(_.features.activated).using(_ - AttributableError)
6765
.modify(_.channelConf.channelFlags.announceChannel).setTo(!testData.tags.contains(PrivateChannels))
6866
val bobParams = nodeParamsFor("bob", ByteVector32(hex"7620226fec887b0b2ebe76492e5a3fd3eb0e47cd3773263f6a81b59a704dc492"))
6967
.modify(_.onionMessageConfig.timeout).setTo(5 minutes)
7068
.modify(_.features.activated).using(_ + (RouteBlinding -> Optional))
69+
.modify(_.features.activated).using(_ - AttributableError)
7170
.modify(_.features.activated).usingIf(testData.tags.contains(RouteBlindingDisabledBob))(_ - RouteBlinding)
7271
.modify(_.channelConf.channelFlags.announceChannel).setTo(!testData.tags.contains(PrivateChannels))
7372
val carolParams = nodeParamsFor("carol", ByteVector32(hex"ebd5a5d3abfb3ef73731eb3418d918f247445183180522674666db98a66411cc"))
7473
.modify(_.onionMessageConfig.timeout).setTo(5 minutes)
7574
.modify(_.features.activated).using(_ + (RouteBlinding -> Optional))
7675
.modify(_.features.activated).using(_ + (KeySend -> Optional))
76+
.modify(_.features.activated).using(_ - AttributableError)
7777
.modify(_.features.activated).usingIf(testData.tags.contains(RouteBlindingDisabledCarol))(_ - RouteBlinding)
7878
.modify(_.channelConf.channelFlags.announceChannel).setTo(!testData.tags.contains(PrivateChannels))
7979

0 commit comments

Comments
 (0)