mirror of
https://github.com/ACINQ/eclair.git
synced 2025-02-22 06:21:42 +01:00
Move protocol codecs to their own package (#1736)
This is a follow-up for #1732 Codecs in the protocol package will always be backwards-compatible, as they are defined in the spec.
This commit is contained in:
parent
6e72785d6c
commit
7819faec39
151 changed files with 380 additions and 332 deletions
|
@ -276,7 +276,7 @@ akka {
|
|||
}
|
||||
|
||||
serialization-bindings {
|
||||
"fr.acinq.eclair.wire.LightningMessage" = lightning
|
||||
"fr.acinq.eclair.wire.protocol.LightningMessage" = lightning
|
||||
"fr.acinq.eclair.remote.EclairInternalsSerializer$RemoteTypes" = eclair-internals
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ import fr.acinq.eclair.payment.relay.Relayer.{GetOutgoingChannels, OutgoingChann
|
|||
import fr.acinq.eclair.payment.send.PaymentInitiator.{SendPaymentRequest, SendPaymentToRouteRequest, SendPaymentToRouteResponse}
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.router.{NetworkStats, RouteCalculation, Router}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
package fr.acinq.eclair
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
import akka.event.DiagnosticLoggingAdapter
|
||||
import akka.io.Tcp
|
||||
import fr.acinq.bitcoin.ByteVector32
|
||||
|
@ -29,7 +27,9 @@ import fr.acinq.eclair.io.Peer.PeerRoutingMessage
|
|||
import fr.acinq.eclair.io.{Peer, PeerConnection}
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.router._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
object Logs {
|
||||
|
||||
|
@ -130,7 +130,7 @@ object Logs {
|
|||
case _: PeerConnection.DelayedRebroadcast => Some(LogCategory.ROUTING_SYNC)
|
||||
case _: Ping => Some(LogCategory.CONNECTION)
|
||||
case _: Pong => Some(LogCategory.CONNECTION)
|
||||
case _: wire.Init => Some(LogCategory.CONNECTION)
|
||||
case _: Init => Some(LogCategory.CONNECTION)
|
||||
case _: Rebroadcast => Some(LogCategory.ROUTING_SYNC)
|
||||
|
||||
case _ => None
|
||||
|
|
|
@ -29,7 +29,7 @@ import fr.acinq.eclair.db._
|
|||
import fr.acinq.eclair.io.PeerConnection
|
||||
import fr.acinq.eclair.router.Router.RouterConf
|
||||
import fr.acinq.eclair.tor.Socks5ProxyParams
|
||||
import fr.acinq.eclair.wire.{Color, EncodingType, NodeAddress}
|
||||
import fr.acinq.eclair.wire.protocol.{Color, EncodingType, NodeAddress}
|
||||
import grizzled.slf4j.Logging
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ import fr.acinq.eclair.blockchain.{EclairWallet, _}
|
|||
import fr.acinq.eclair.channel.Register
|
||||
import fr.acinq.eclair.crypto.keymanager.{LocalChannelKeyManager, LocalNodeKeyManager}
|
||||
import fr.acinq.eclair.db.Databases.FileBackup
|
||||
import fr.acinq.eclair.db.{DbEventHandler, Databases, FileBackupHandler}
|
||||
import fr.acinq.eclair.db.{Databases, DbEventHandler, FileBackupHandler}
|
||||
import fr.acinq.eclair.io.{ClientSpawner, Server, Switchboard}
|
||||
import fr.acinq.eclair.payment.receive.PaymentHandler
|
||||
import fr.acinq.eclair.payment.relay.Relayer
|
||||
|
@ -44,7 +44,7 @@ import fr.acinq.eclair.payment.send.{Autoprobe, PaymentInitiator}
|
|||
import fr.acinq.eclair.router._
|
||||
import fr.acinq.eclair.tor.TorProtocolHandler.OnionServiceVersion
|
||||
import fr.acinq.eclair.tor.{Controller, TorProtocolHandler}
|
||||
import fr.acinq.eclair.wire.NodeAddress
|
||||
import fr.acinq.eclair.wire.protocol.NodeAddress
|
||||
import grizzled.slf4j.Logging
|
||||
import org.json4s.JsonAST.JArray
|
||||
import scodec.bits.ByteVector
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.bitcoin.{ByteVector32, Satoshi, Script, ScriptWitness, Transacti
|
|||
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
|
||||
import fr.acinq.eclair.channel.BitcoinEvent
|
||||
import fr.acinq.eclair.transactions.Transactions.TransactionSigningKit
|
||||
import fr.acinq.eclair.wire.ChannelAnnouncement
|
||||
import fr.acinq.eclair.wire.protocol.ChannelAnnouncement
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
import scala.util.{Failure, Success, Try}
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.eclair.TxCoordinates
|
|||
import fr.acinq.eclair.blockchain.fee.{FeeratePerKB, FeeratePerKw}
|
||||
import fr.acinq.eclair.blockchain.{GetTxWithMetaResponse, UtxoStatus, ValidateResult}
|
||||
import fr.acinq.eclair.transactions.Transactions
|
||||
import fr.acinq.eclair.wire.ChannelAnnouncement
|
||||
import fr.acinq.eclair.wire.protocol.ChannelAnnouncement
|
||||
import org.json4s.Formats
|
||||
import org.json4s.JsonAST._
|
||||
import scodec.bits.ByteVector
|
||||
|
|
|
@ -134,7 +134,7 @@ class SqliteWalletDb(sqlite: Connection) extends WalletDb {
|
|||
|
||||
object SqliteWalletDb {
|
||||
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import scodec.Codec
|
||||
import scodec.bits.BitVector
|
||||
import scodec.codecs._
|
||||
|
|
|
@ -34,7 +34,7 @@ import fr.acinq.eclair.payment.PaymentSettlingOnChain
|
|||
import fr.acinq.eclair.router.Announcements
|
||||
import fr.acinq.eclair.transactions.Transactions.{ClosingTx, TxOwner}
|
||||
import fr.acinq.eclair.transactions._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
import scala.collection.immutable.Queue
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.bitcoin.{ByteVector32, Satoshi, Transaction}
|
|||
import fr.acinq.eclair.ShortChannelId
|
||||
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
|
||||
import fr.acinq.eclair.channel.Helpers.Closing.ClosingType
|
||||
import fr.acinq.eclair.wire.{ChannelAnnouncement, ChannelUpdate}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelAnnouncement, ChannelUpdate}
|
||||
|
||||
/**
|
||||
* Created by PM on 17/08/2016.
|
||||
|
|
|
@ -19,7 +19,7 @@ package fr.acinq.eclair.channel
|
|||
import fr.acinq.bitcoin.Crypto.PrivateKey
|
||||
import fr.acinq.bitcoin.{ByteVector32, Satoshi, Transaction}
|
||||
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
|
||||
import fr.acinq.eclair.wire.{AnnouncementSignatures, Error, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.{AnnouncementSignatures, Error, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, MilliSatoshi, UInt64}
|
||||
|
||||
/**
|
||||
|
|
|
@ -25,7 +25,7 @@ import fr.acinq.eclair.payment.OutgoingPacket.Upstream
|
|||
import fr.acinq.eclair.router.Announcements
|
||||
import fr.acinq.eclair.transactions.CommitmentSpec
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.wire.{AcceptChannel, ChannelAnnouncement, ChannelReestablish, ChannelUpdate, ClosingSigned, FailureMessage, FundingCreated, FundingLocked, FundingSigned, Init, OnionRoutingPacket, OpenChannel, Shutdown, UpdateAddHtlc, UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFulfillHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.{AcceptChannel, ChannelAnnouncement, ChannelReestablish, ChannelUpdate, ClosingSigned, FailureMessage, FundingCreated, FundingLocked, FundingSigned, Init, OnionRoutingPacket, OpenChannel, Shutdown, UpdateAddHtlc, UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFulfillHtlc}
|
||||
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, Features, MilliSatoshi, ShortChannelId, UInt64}
|
||||
import scodec.bits.{BitVector, ByteVector}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ import fr.acinq.eclair.payment.relay.Relayer
|
|||
import fr.acinq.eclair.transactions.DirectedHtlc._
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.transactions._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
|
||||
// @formatter:off
|
||||
case class LocalChanges(proposed: List[UpdateMessage], signed: List[UpdateMessage], acked: List[UpdateMessage]) {
|
||||
|
|
|
@ -32,7 +32,7 @@ import fr.acinq.eclair.transactions.DirectedHtlc._
|
|||
import fr.acinq.eclair.transactions.Scripts._
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.transactions._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
import scala.concurrent.Await
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
package fr.acinq.eclair.crypto
|
||||
|
||||
import fr.acinq.bitcoin._
|
||||
import fr.acinq.eclair.wire.CommonCodecs
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs
|
||||
import scodec.Codec
|
||||
|
||||
import scala.annotation.tailrec
|
||||
|
|
|
@ -19,8 +19,8 @@ package fr.acinq.eclair.crypto
|
|||
import fr.acinq.bitcoin.Crypto.{PrivateKey, PublicKey}
|
||||
import fr.acinq.bitcoin.{ByteVector32, Crypto}
|
||||
import fr.acinq.eclair.crypto.Monitoring.{Metrics, Tags}
|
||||
import fr.acinq.eclair.wire
|
||||
import fr.acinq.eclair.wire.{FailureMessage, FailureMessageCodecs, Onion, OnionCodecs}
|
||||
import fr.acinq.eclair.wire.protocol
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import grizzled.slf4j.Logging
|
||||
import scodec.Attempt
|
||||
import scodec.bits.ByteVector
|
||||
|
@ -107,7 +107,7 @@ object Sphinx extends Logging {
|
|||
* @param nextPacket packet for the next node.
|
||||
* @param sharedSecret shared secret for the sending node, which we will need to return failure messages.
|
||||
*/
|
||||
case class DecryptedPacket(payload: ByteVector, nextPacket: wire.OnionRoutingPacket, sharedSecret: ByteVector32) {
|
||||
case class DecryptedPacket(payload: ByteVector, nextPacket: protocol.OnionRoutingPacket, sharedSecret: ByteVector32) {
|
||||
|
||||
val isLastPacket: Boolean = nextPacket.hmac == ByteVector32.Zeroes
|
||||
|
||||
|
@ -120,7 +120,7 @@ object Sphinx extends Logging {
|
|||
* @param sharedSecrets shared secrets (one per node in the route). Known (and needed) only if you're creating the
|
||||
* packet. Empty if you're just forwarding the packet to the next node.
|
||||
*/
|
||||
case class PacketAndSecrets(packet: wire.OnionRoutingPacket, sharedSecrets: Seq[(ByteVector32, PublicKey)])
|
||||
case class PacketAndSecrets(packet: protocol.OnionRoutingPacket, sharedSecrets: Seq[(ByteVector32, PublicKey)])
|
||||
|
||||
sealed trait OnionRoutingPacket[T <: Onion.PacketType] {
|
||||
|
||||
|
@ -168,10 +168,10 @@ object Sphinx extends Logging {
|
|||
* - payload is the per-hop payload for this node.
|
||||
* - packet is the next packet, to be forwarded using the info that is given in the payload.
|
||||
* - shared secret is the secret we share with the node that sent the packet. We need it to propagate
|
||||
* failure messages upstream.
|
||||
* or a BadOnion error containing the hash of the invalid onion.
|
||||
* failure messages upstream.
|
||||
* or a BadOnion error containing the hash of the invalid onion.
|
||||
*/
|
||||
def peel(privateKey: PrivateKey, associatedData: ByteVector, packet: wire.OnionRoutingPacket): Either[wire.BadOnion, DecryptedPacket] = packet.version match {
|
||||
def peel(privateKey: PrivateKey, associatedData: ByteVector, packet: protocol.OnionRoutingPacket): Either[BadOnion, DecryptedPacket] = packet.version match {
|
||||
case 0 => Try(PublicKey(packet.publicKey, checkValid = true)) match {
|
||||
case Success(packetEphKey) =>
|
||||
val sharedSecret = computeSharedSecret(packetEphKey, privateKey)
|
||||
|
@ -191,13 +191,13 @@ object Sphinx extends Logging {
|
|||
val nextOnionPayload = bin.drop(perHopPayloadLength).take(PayloadLength)
|
||||
val nextPubKey = blind(packetEphKey, computeBlindingFactor(packetEphKey, sharedSecret))
|
||||
|
||||
Right(DecryptedPacket(perHopPayload, wire.OnionRoutingPacket(Version, nextPubKey.value, nextOnionPayload, hmac), sharedSecret))
|
||||
Right(DecryptedPacket(perHopPayload, protocol.OnionRoutingPacket(Version, nextPubKey.value, nextOnionPayload, hmac), sharedSecret))
|
||||
} else {
|
||||
Left(wire.InvalidOnionHmac(hash(packet)))
|
||||
Left(InvalidOnionHmac(hash(packet)))
|
||||
}
|
||||
case Failure(_) => Left(wire.InvalidOnionKey(hash(packet)))
|
||||
case Failure(_) => Left(InvalidOnionKey(hash(packet)))
|
||||
}
|
||||
case _ => Left(wire.InvalidOnionVersion(hash(packet)))
|
||||
case _ => Left(InvalidOnionVersion(hash(packet)))
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -217,7 +217,7 @@ object Sphinx extends Logging {
|
|||
* @param onionPayloadFiller optional onion payload filler, needed only when you're constructing the last packet.
|
||||
* @return the next packet.
|
||||
*/
|
||||
def wrap(payload: ByteVector, associatedData: ByteVector32, ephemeralPublicKey: PublicKey, sharedSecret: ByteVector32, packet: Either[ByteVector, wire.OnionRoutingPacket], onionPayloadFiller: ByteVector = ByteVector.empty): wire.OnionRoutingPacket = {
|
||||
def wrap(payload: ByteVector, associatedData: ByteVector32, ephemeralPublicKey: PublicKey, sharedSecret: ByteVector32, packet: Either[ByteVector, protocol.OnionRoutingPacket], onionPayloadFiller: ByteVector = ByteVector.empty): protocol.OnionRoutingPacket = {
|
||||
require(payload.length <= PayloadLength - MacLength, s"packet payload cannot exceed ${PayloadLength - MacLength} bytes")
|
||||
|
||||
val (currentMac, currentPayload): (ByteVector32, ByteVector) = packet match {
|
||||
|
@ -234,7 +234,7 @@ object Sphinx extends Logging {
|
|||
}
|
||||
|
||||
val nextHmac = mac(generateKey("mu", sharedSecret), nextOnionPayload ++ associatedData)
|
||||
val nextPacket = wire.OnionRoutingPacket(Version, ephemeralPublicKey.value, nextOnionPayload, nextHmac)
|
||||
val nextPacket = protocol.OnionRoutingPacket(Version, ephemeralPublicKey.value, nextOnionPayload, nextHmac)
|
||||
nextPacket
|
||||
}
|
||||
|
||||
|
@ -257,7 +257,7 @@ object Sphinx extends Logging {
|
|||
val lastPacket = wrap(payloads.last, associatedData, ephemeralPublicKeys.last, sharedsecrets.last, Left(startingBytes), filler)
|
||||
|
||||
@tailrec
|
||||
def loop(hopPayloads: Seq[ByteVector], ephKeys: Seq[PublicKey], sharedSecrets: Seq[ByteVector32], packet: wire.OnionRoutingPacket): wire.OnionRoutingPacket = {
|
||||
def loop(hopPayloads: Seq[ByteVector], ephKeys: Seq[PublicKey], sharedSecrets: Seq[ByteVector32], packet: protocol.OnionRoutingPacket): protocol.OnionRoutingPacket = {
|
||||
if (hopPayloads.isEmpty) packet else {
|
||||
val nextPacket = wrap(hopPayloads.last, associatedData, ephKeys.last, sharedSecrets.last, Right(packet))
|
||||
loop(hopPayloads.dropRight(1), ephKeys.dropRight(1), sharedSecrets.dropRight(1), nextPacket)
|
||||
|
@ -271,8 +271,8 @@ object Sphinx extends Logging {
|
|||
/**
|
||||
* When an invalid onion is received, its hash should be included in the failure message.
|
||||
*/
|
||||
def hash(onion: wire.OnionRoutingPacket): ByteVector32 =
|
||||
Crypto.sha256(wire.OnionCodecs.onionRoutingPacketCodec(onion.payload.length.toInt).encode(onion).require.toByteVector)
|
||||
def hash(onion: protocol.OnionRoutingPacket): ByteVector32 =
|
||||
Crypto.sha256(OnionCodecs.onionRoutingPacketCodec(onion.payload.length.toInt).encode(onion).require.toByteVector)
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
package fr.acinq.eclair.crypto
|
||||
|
||||
import java.nio.ByteOrder
|
||||
|
||||
import akka.actor.{Actor, ActorRef, ExtendedActorSystem, FSM, PoisonPill, Props, Terminated}
|
||||
import akka.event.Logging.MDC
|
||||
import akka.event._
|
||||
|
@ -29,11 +27,12 @@ import fr.acinq.eclair.Logs.LogCategory
|
|||
import fr.acinq.eclair.crypto.ChaCha20Poly1305.ChaCha20Poly1305Error
|
||||
import fr.acinq.eclair.crypto.Noise._
|
||||
import fr.acinq.eclair.remote.EclairInternalsSerializer.RemoteTypes
|
||||
import fr.acinq.eclair.wire.{AnnouncementSignatures, RoutingMessage}
|
||||
import fr.acinq.eclair.wire.protocol.{AnnouncementSignatures, RoutingMessage}
|
||||
import fr.acinq.eclair.{Diagnostics, FSMDiagnosticActorLogging, Logs, getSimpleClassName}
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.{Attempt, Codec, DecodeResult}
|
||||
|
||||
import java.nio.ByteOrder
|
||||
import scala.annotation.tailrec
|
||||
import scala.collection.immutable.Queue
|
||||
import scala.reflect.ClassTag
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.bitcoin.{ByteVector32, Satoshi}
|
||||
import fr.acinq.eclair.ShortChannelId
|
||||
import fr.acinq.eclair.router.Router.PublicChannel
|
||||
import fr.acinq.eclair.wire.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
|
||||
import scala.collection.immutable.SortedMap
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ package fr.acinq.eclair.db
|
|||
import java.io.Closeable
|
||||
|
||||
import fr.acinq.bitcoin.Crypto.PublicKey
|
||||
import fr.acinq.eclair.wire.NodeAddress
|
||||
import fr.acinq.eclair.wire.protocol.NodeAddress
|
||||
|
||||
trait PeersDb extends Closeable {
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ import akka.actor.{ActorContext, ActorRef}
|
|||
import akka.event.LoggingAdapter
|
||||
import fr.acinq.bitcoin.ByteVector32
|
||||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.wire.{UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFulfillHtlc, UpdateMessage}
|
||||
import fr.acinq.eclair.wire.protocol.{UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFulfillHtlc, UpdateMessage}
|
||||
|
||||
/**
|
||||
* This database stores CMD_FULFILL_HTLC and CMD_FAIL_HTLC that we have received from downstream
|
||||
|
|
|
@ -21,8 +21,8 @@ import fr.acinq.eclair.ShortChannelId
|
|||
import fr.acinq.eclair.db.Monitoring.Metrics.withMetrics
|
||||
import fr.acinq.eclair.db.NetworkDb
|
||||
import fr.acinq.eclair.router.Router.PublicChannel
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs.{channelAnnouncementCodec, channelUpdateCodec, nodeAnnouncementCodec}
|
||||
import fr.acinq.eclair.wire.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs.{channelAnnouncementCodec, channelUpdateCodec, nodeAnnouncementCodec}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
import grizzled.slf4j.Logging
|
||||
import javax.sql.DataSource
|
||||
|
||||
|
|
|
@ -24,9 +24,9 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.eclair.MilliSatoshi
|
||||
import fr.acinq.eclair.db.Monitoring.Metrics.withMetrics
|
||||
import fr.acinq.eclair.db.pg.PgUtils.DatabaseLock
|
||||
import fr.acinq.eclair.db.{HopSummary, _}
|
||||
import fr.acinq.eclair.db._
|
||||
import fr.acinq.eclair.payment.{PaymentFailed, PaymentRequest, PaymentSent}
|
||||
import fr.acinq.eclair.wire.CommonCodecs
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs
|
||||
import grizzled.slf4j.Logging
|
||||
import javax.sql.DataSource
|
||||
import scodec.Attempt
|
||||
|
|
|
@ -21,7 +21,7 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.eclair.db.Monitoring.Metrics.withMetrics
|
||||
import fr.acinq.eclair.db.PeersDb
|
||||
import fr.acinq.eclair.db.pg.PgUtils.DatabaseLock
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import javax.sql.DataSource
|
||||
import scodec.bits.BitVector
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ import fr.acinq.eclair.ShortChannelId
|
|||
import fr.acinq.eclair.db.Monitoring.Metrics.withMetrics
|
||||
import fr.acinq.eclair.db.NetworkDb
|
||||
import fr.acinq.eclair.router.Router.PublicChannel
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs.{channelAnnouncementCodec, channelUpdateCodec, nodeAnnouncementCodec}
|
||||
import fr.acinq.eclair.wire.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs.{channelAnnouncementCodec, channelUpdateCodec, nodeAnnouncementCodec}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
import grizzled.slf4j.Logging
|
||||
|
||||
import scala.collection.immutable.SortedMap
|
||||
|
|
|
@ -26,7 +26,7 @@ import fr.acinq.eclair.db.Monitoring.Metrics.withMetrics
|
|||
import fr.acinq.eclair.db._
|
||||
import fr.acinq.eclair.db.sqlite.SqliteUtils._
|
||||
import fr.acinq.eclair.payment.{PaymentFailed, PaymentRequest, PaymentSent}
|
||||
import fr.acinq.eclair.wire.CommonCodecs
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs
|
||||
import grizzled.slf4j.Logging
|
||||
import scodec.Attempt
|
||||
import scodec.bits.BitVector
|
||||
|
|
|
@ -23,7 +23,7 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.eclair.db.Monitoring.Metrics.withMetrics
|
||||
import fr.acinq.eclair.db.PeersDb
|
||||
import fr.acinq.eclair.db.sqlite.SqliteUtils.{codecSequence, getVersion, using}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import scodec.bits.BitVector
|
||||
|
||||
class SqlitePeersDb(sqlite: Connection) extends PeersDb {
|
||||
|
|
|
@ -32,7 +32,8 @@ import fr.acinq.eclair.channel._
|
|||
import fr.acinq.eclair.io.Monitoring.Metrics
|
||||
import fr.acinq.eclair.io.PeerConnection.KillReason
|
||||
import fr.acinq.eclair.remote.EclairInternalsSerializer.RemoteTypes
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol
|
||||
import fr.acinq.eclair.wire.protocol.{Error, HasChannelId, HasTemporaryChannelId, LightningMessage, NodeAddress, RoutingMessage, UnknownMessage}
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
import java.net.InetSocketAddress
|
||||
|
@ -83,7 +84,7 @@ class Peer(val nodeParams: NodeParams, remoteNodeId: PublicKey, watcher: ActorRe
|
|||
stay using d.copy(channels = channels1)
|
||||
}
|
||||
|
||||
case Event(_: wire.LightningMessage, _) => stay // we probably just got disconnected and that's the last messages we received
|
||||
case Event(_: LightningMessage, _) => stay // we probably just got disconnected and that's the last messages we received
|
||||
}
|
||||
|
||||
when(CONNECTED) {
|
||||
|
@ -97,13 +98,13 @@ class Peer(val nodeParams: NodeParams, remoteNodeId: PublicKey, watcher: ActorRe
|
|||
d.peerConnection forward msg
|
||||
stay
|
||||
|
||||
case Event(err@wire.Error(channelId, reason), d: ConnectedData) if channelId == CHANNELID_ZERO =>
|
||||
case Event(err@Error(channelId, reason), d: ConnectedData) if channelId == CHANNELID_ZERO =>
|
||||
log.error(s"connection-level error, failing all channels! reason=${new String(reason.toArray)}")
|
||||
d.channels.values.toSet[ActorRef].foreach(_ forward err) // we deduplicate with toSet because there might be two entries per channel (tmp id and final id)
|
||||
d.peerConnection ! PeerConnection.Kill(KillReason.AllChannelsFail)
|
||||
stay
|
||||
|
||||
case Event(err: wire.Error, d: ConnectedData) =>
|
||||
case Event(err: Error, d: ConnectedData) =>
|
||||
// error messages are a bit special because they can contain either temporaryChannelId or channelId (see BOLT 1)
|
||||
d.channels.get(FinalChannelId(err.channelId)).orElse(d.channels.get(TemporaryChannelId(err.channelId))) match {
|
||||
case Some(channel) => channel forward err
|
||||
|
@ -133,7 +134,7 @@ class Peer(val nodeParams: NodeParams, remoteNodeId: PublicKey, watcher: ActorRe
|
|||
stay using d.copy(channels = d.channels + (TemporaryChannelId(temporaryChannelId) -> channel))
|
||||
}
|
||||
|
||||
case Event(msg: wire.OpenChannel, d: ConnectedData) =>
|
||||
case Event(msg: protocol.OpenChannel, d: ConnectedData) =>
|
||||
d.channels.get(TemporaryChannelId(msg.temporaryChannelId)) match {
|
||||
case None =>
|
||||
val channelVersion = ChannelVersion.pickChannelVersion(d.localFeatures, d.remoteFeatures)
|
||||
|
@ -148,14 +149,14 @@ class Peer(val nodeParams: NodeParams, remoteNodeId: PublicKey, watcher: ActorRe
|
|||
stay
|
||||
}
|
||||
|
||||
case Event(msg: wire.HasChannelId, d: ConnectedData) =>
|
||||
case Event(msg: HasChannelId, d: ConnectedData) =>
|
||||
d.channels.get(FinalChannelId(msg.channelId)) match {
|
||||
case Some(channel) => channel forward msg
|
||||
case None => replyUnknownChannel(d.peerConnection, msg.channelId)
|
||||
}
|
||||
stay
|
||||
|
||||
case Event(msg: wire.HasTemporaryChannelId, d: ConnectedData) =>
|
||||
case Event(msg: HasTemporaryChannelId, d: ConnectedData) =>
|
||||
d.channels.get(TemporaryChannelId(msg.temporaryChannelId)) match {
|
||||
case Some(channel) => channel forward msg
|
||||
case None => replyUnknownChannel(d.peerConnection, msg.temporaryChannelId)
|
||||
|
@ -304,7 +305,7 @@ class Peer(val nodeParams: NodeParams, remoteNodeId: PublicKey, watcher: ActorRe
|
|||
}
|
||||
|
||||
def replyUnknownChannel(peerConnection: ActorRef, unknownChannelId: ByteVector32): Unit = {
|
||||
val msg = wire.Error(unknownChannelId, UNKNOWN_CHANNEL_MESSAGE)
|
||||
val msg = Error(unknownChannelId, UNKNOWN_CHANNEL_MESSAGE)
|
||||
logMessage(msg, "OUT")
|
||||
peerConnection ! msg
|
||||
}
|
||||
|
@ -368,7 +369,7 @@ object Peer {
|
|||
}
|
||||
case object Nothing extends Data { override def channels = Map.empty }
|
||||
case class DisconnectedData(channels: Map[FinalChannelId, ActorRef]) extends Data
|
||||
case class ConnectedData(address: InetSocketAddress, peerConnection: ActorRef, localInit: wire.Init, remoteInit: wire.Init, channels: Map[ChannelId, ActorRef]) extends Data {
|
||||
case class ConnectedData(address: InetSocketAddress, peerConnection: ActorRef, localInit: protocol.Init, remoteInit: protocol.Init, channels: Map[ChannelId, ActorRef]) extends Data {
|
||||
val connectionInfo: ConnectionInfo = ConnectionInfo(address, peerConnection, localInit, remoteInit)
|
||||
def localFeatures: Features = localInit.features
|
||||
def remoteFeatures: Features = remoteInit.features
|
||||
|
|
|
@ -27,8 +27,9 @@ import fr.acinq.eclair.io.Monitoring.{Metrics, Tags}
|
|||
import fr.acinq.eclair.io.Peer.CHANNELID_ZERO
|
||||
import fr.acinq.eclair.remote.EclairInternalsSerializer.RemoteTypes
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.{wire, _}
|
||||
import fr.acinq.eclair.wire.protocol
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{FSMDiagnosticActorLogging, Features, Logs}
|
||||
import scodec.Attempt
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
|
@ -101,7 +102,7 @@ class PeerConnection(keyPair: KeyPair, conf: PeerConnection.Conf, switchboard: A
|
|||
d.transport ! TransportHandler.Listener(self)
|
||||
Metrics.PeerConnectionsConnecting.withTag(Tags.ConnectionState, Tags.ConnectionStates.Initializing).increment()
|
||||
log.info(s"using features=$localFeatures")
|
||||
val localInit = wire.Init(localFeatures, TlvStream(InitTlv.Networks(chainHash :: Nil)))
|
||||
val localInit = protocol.Init(localFeatures, TlvStream(InitTlv.Networks(chainHash :: Nil)))
|
||||
d.transport ! localInit
|
||||
setTimer(INIT_TIMER, InitTimeout, conf.initTimeout)
|
||||
goto(INITIALIZING) using InitializingData(chainHash, d.pendingAuth, d.remoteNodeId, d.transport, peer, localInit, doSync)
|
||||
|
@ -109,7 +110,7 @@ class PeerConnection(keyPair: KeyPair, conf: PeerConnection.Conf, switchboard: A
|
|||
|
||||
when(INITIALIZING) {
|
||||
heartbeat { // receiving the init message from remote will start the first ping timer
|
||||
case Event(remoteInit: wire.Init, d: InitializingData) =>
|
||||
case Event(remoteInit: protocol.Init, d: InitializingData) =>
|
||||
cancelTimer(INIT_TIMER)
|
||||
d.transport ! TransportHandler.ReadAck(remoteInit)
|
||||
|
||||
|
@ -169,7 +170,7 @@ class PeerConnection(keyPair: KeyPair, conf: PeerConnection.Conf, switchboard: A
|
|||
// no need to use secure random here
|
||||
val pingSize = Random.nextInt(1000)
|
||||
val pongSize = Random.nextInt(1000)
|
||||
val ping = wire.Ping(pongSize, ByteVector.fill(pingSize)(0))
|
||||
val ping = Ping(pongSize, ByteVector.fill(pingSize)(0))
|
||||
setTimer(PingTimeout.toString, PingTimeout(ping), conf.pingTimeout, repeat = false)
|
||||
d.transport ! ping
|
||||
stay using d.copy(expectedPong_opt = Some(ExpectedPong(ping)))
|
||||
|
@ -187,17 +188,17 @@ class PeerConnection(keyPair: KeyPair, conf: PeerConnection.Conf, switchboard: A
|
|||
}
|
||||
stay
|
||||
|
||||
case Event(ping@wire.Ping(pongLength, _), d: ConnectedData) =>
|
||||
case Event(ping@Ping(pongLength, _), d: ConnectedData) =>
|
||||
d.transport ! TransportHandler.ReadAck(ping)
|
||||
if (pongLength <= 65532) {
|
||||
// see BOLT 1: we reply only if requested pong length is acceptable
|
||||
d.transport ! wire.Pong(ByteVector.fill(pongLength)(0.toByte))
|
||||
d.transport ! Pong(ByteVector.fill(pongLength)(0.toByte))
|
||||
} else {
|
||||
log.warning(s"ignoring invalid ping with pongLength=${ping.pongLength}")
|
||||
}
|
||||
stay
|
||||
|
||||
case Event(pong@wire.Pong(data), d: ConnectedData) =>
|
||||
case Event(pong@Pong(data), d: ConnectedData) =>
|
||||
d.transport ! TransportHandler.ReadAck(pong)
|
||||
d.expectedPong_opt match {
|
||||
case Some(ExpectedPong(ping, timestamp)) if ping.pongLength == data.length =>
|
||||
|
@ -270,7 +271,7 @@ class PeerConnection(keyPair: KeyPair, conf: PeerConnection.Conf, switchboard: A
|
|||
stay using d.copy(gossipTimestampFilter = Some(msg))
|
||||
}
|
||||
|
||||
case Event(msg: wire.RoutingMessage, d: ConnectedData) =>
|
||||
case Event(msg: RoutingMessage, d: ConnectedData) =>
|
||||
msg match {
|
||||
case _: AnnouncementSignatures =>
|
||||
// this is actually for the channel
|
||||
|
@ -489,8 +490,8 @@ object PeerConnection {
|
|||
case object Nothing extends Data
|
||||
case class AuthenticatingData(pendingAuth: PendingAuth, transport: ActorRef) extends Data with HasTransport
|
||||
case class BeforeInitData(remoteNodeId: PublicKey, pendingAuth: PendingAuth, transport: ActorRef) extends Data with HasTransport
|
||||
case class InitializingData(chainHash: ByteVector32, pendingAuth: PendingAuth, remoteNodeId: PublicKey, transport: ActorRef, peer: ActorRef, localInit: wire.Init, doSync: Boolean) extends Data with HasTransport
|
||||
case class ConnectedData(chainHash: ByteVector32, remoteNodeId: PublicKey, transport: ActorRef, peer: ActorRef, localInit: wire.Init, remoteInit: wire.Init, rebroadcastDelay: FiniteDuration, gossipTimestampFilter: Option[GossipTimestampFilter] = None, behavior: Behavior = Behavior(), expectedPong_opt: Option[ExpectedPong] = None) extends Data with HasTransport
|
||||
case class InitializingData(chainHash: ByteVector32, pendingAuth: PendingAuth, remoteNodeId: PublicKey, transport: ActorRef, peer: ActorRef, localInit: protocol.Init, doSync: Boolean) extends Data with HasTransport
|
||||
case class ConnectedData(chainHash: ByteVector32, remoteNodeId: PublicKey, transport: ActorRef, peer: ActorRef, localInit: protocol.Init, remoteInit: protocol.Init, rebroadcastDelay: FiniteDuration, gossipTimestampFilter: Option[GossipTimestampFilter] = None, behavior: Behavior = Behavior(), expectedPong_opt: Option[ExpectedPong] = None) extends Data with HasTransport
|
||||
|
||||
case class ExpectedPong(ping: Ping, timestamp: Long = System.currentTimeMillis)
|
||||
case class PingTimeout(ping: Ping)
|
||||
|
@ -507,7 +508,7 @@ object PeerConnection {
|
|||
}
|
||||
case class Authenticated(peerConnection: ActorRef, remoteNodeId: PublicKey) extends RemoteTypes
|
||||
case class InitializeConnection(peer: ActorRef, chainHash: ByteVector32, features: Features, doSync: Boolean) extends RemoteTypes
|
||||
case class ConnectionReady(peerConnection: ActorRef, remoteNodeId: PublicKey, address: InetSocketAddress, outgoing: Boolean, localInit: wire.Init, remoteInit: wire.Init) extends RemoteTypes
|
||||
case class ConnectionReady(peerConnection: ActorRef, remoteNodeId: PublicKey, address: InetSocketAddress, outgoing: Boolean, localInit: protocol.Init, remoteInit: protocol.Init) extends RemoteTypes
|
||||
|
||||
sealed trait ConnectionResult extends RemoteTypes
|
||||
object ConnectionResult {
|
||||
|
|
|
@ -18,14 +18,14 @@ package fr.acinq.eclair.io
|
|||
|
||||
import akka.actor.ActorRef
|
||||
import fr.acinq.bitcoin.Crypto.PublicKey
|
||||
import fr.acinq.eclair.wire
|
||||
import fr.acinq.eclair.wire.UnknownMessage
|
||||
import fr.acinq.eclair.wire.protocol
|
||||
import fr.acinq.eclair.wire.protocol.UnknownMessage
|
||||
|
||||
import java.net.InetSocketAddress
|
||||
|
||||
sealed trait PeerEvent
|
||||
|
||||
case class ConnectionInfo(address: InetSocketAddress, peerConnection: ActorRef, localInit: wire.Init, remoteInit: wire.Init)
|
||||
case class ConnectionInfo(address: InetSocketAddress, peerConnection: ActorRef, localInit: protocol.Init, remoteInit: protocol.Init)
|
||||
|
||||
case class PeerConnected(peer: ActorRef, nodeId: PublicKey, connectionInfo: ConnectionInfo) extends PeerEvent
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.eclair.crypto.Sphinx
|
|||
import fr.acinq.eclair.payment.PaymentRequest.ExtraHop
|
||||
import fr.acinq.eclair.router.Announcements
|
||||
import fr.acinq.eclair.router.Router.{ChannelDesc, ChannelHop, Hop, Ignore}
|
||||
import fr.acinq.eclair.wire.{ChannelDisabled, ChannelUpdate, Node, TemporaryChannelFailure}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelDisabled, ChannelUpdate, Node, TemporaryChannelFailure}
|
||||
import fr.acinq.eclair.{MilliSatoshi, ShortChannelId}
|
||||
|
||||
import java.util.UUID
|
||||
|
@ -129,7 +129,7 @@ case class UnreadableRemoteFailure(route: Seq[Hop]) extends PaymentFailure
|
|||
object PaymentFailure {
|
||||
|
||||
import fr.acinq.eclair.router.RouteNotFound
|
||||
import fr.acinq.eclair.wire.Update
|
||||
import fr.acinq.eclair.wire.protocol.Update
|
||||
|
||||
/**
|
||||
* Rewrites a list of failures to retrieve the meaningful part.
|
||||
|
|
|
@ -25,7 +25,7 @@ import fr.acinq.bitcoin.Crypto.{PrivateKey, PublicKey}
|
|||
import fr.acinq.eclair.channel.{CMD_ADD_HTLC, CMD_FAIL_HTLC, CannotExtractSharedSecret, Origin}
|
||||
import fr.acinq.eclair.crypto.Sphinx
|
||||
import fr.acinq.eclair.router.Router.{ChannelHop, Hop, NodeHop}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, MilliSatoshi, UInt64, randomKey}
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.{Attempt, DecodeResult}
|
||||
|
|
|
@ -359,7 +359,7 @@ object PaymentRequest {
|
|||
|
||||
object Codecs {
|
||||
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import scodec.bits.BitVector
|
||||
import scodec.codecs._
|
||||
import scodec.{Attempt, Codec, DecodeResult}
|
||||
|
|
|
@ -25,7 +25,7 @@ import fr.acinq.eclair.db._
|
|||
import fr.acinq.eclair.payment.Monitoring.{Metrics, Tags}
|
||||
import fr.acinq.eclair.payment.PaymentRequest.{ExtraHop, PaymentRequestFeatures}
|
||||
import fr.acinq.eclair.payment.{IncomingPacket, PaymentReceived, PaymentRequest}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{Features, Logs, MilliSatoshi, NodeParams, randomBytes32}
|
||||
|
||||
import scala.util.{Failure, Success, Try}
|
||||
|
|
|
@ -16,16 +16,15 @@
|
|||
|
||||
package fr.acinq.eclair.payment.receive
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
import akka.actor.{ActorRef, Props}
|
||||
import akka.event.Logging.MDC
|
||||
import fr.acinq.bitcoin.ByteVector32
|
||||
import fr.acinq.eclair.channel.RES_SUCCESS
|
||||
import fr.acinq.eclair.payment.Monitoring.{Metrics, Tags}
|
||||
import fr.acinq.eclair.wire.{FailureMessage, IncorrectOrUnknownPaymentDetails, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.{FSMDiagnosticActorLogging, Logs, MilliSatoshi, NodeParams, wire}
|
||||
import fr.acinq.eclair.wire.protocol
|
||||
import fr.acinq.eclair.wire.protocol.{FailureMessage, IncorrectOrUnknownPaymentDetails, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.{FSMDiagnosticActorLogging, Logs, MilliSatoshi, NodeParams}
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
import scala.collection.immutable.Queue
|
||||
|
||||
/**
|
||||
|
@ -51,7 +50,7 @@ class MultiPartPaymentFSM(nodeParams: NodeParams, paymentHash: ByteVector32, tot
|
|||
when(WAITING_FOR_HTLC) {
|
||||
case Event(PaymentTimeout, d: WaitingForHtlc) =>
|
||||
log.warning("multi-part payment timed out (received {} expected {})", d.paidAmount, totalAmount)
|
||||
goto(PAYMENT_FAILED) using PaymentFailed(wire.PaymentTimeout, d.parts)
|
||||
goto(PAYMENT_FAILED) using PaymentFailed(protocol.PaymentTimeout, d.parts)
|
||||
|
||||
case Event(part: PaymentPart, d: WaitingForHtlc) =>
|
||||
require(part.paymentHash == paymentHash, s"invalid payment hash (expected $paymentHash, received ${part.paymentHash}")
|
||||
|
|
|
@ -30,7 +30,7 @@ import fr.acinq.eclair.payment.Monitoring.{Metrics, Tags}
|
|||
import fr.acinq.eclair.payment.relay.Relayer.OutgoingChannel
|
||||
import fr.acinq.eclair.payment.{ChannelPaymentRelayed, IncomingPacket}
|
||||
import fr.acinq.eclair.router.Announcements
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{Logs, NodeParams, ShortChannelId, channel, nodeFee}
|
||||
|
||||
object ChannelRelay {
|
||||
|
|
|
@ -36,7 +36,7 @@ import fr.acinq.eclair.payment.send.PaymentLifecycle.SendPayment
|
|||
import fr.acinq.eclair.payment.send.{MultiPartPaymentLifecycle, PaymentLifecycle}
|
||||
import fr.acinq.eclair.router.Router.RouteParams
|
||||
import fr.acinq.eclair.router.{BalanceTooLow, RouteCalculation, RouteNotFound}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiry, Features, Logs, MilliSatoshi, NodeParams, nodeFee, randomBytes32}
|
||||
|
||||
import java.util.UUID
|
||||
|
|
|
@ -27,7 +27,7 @@ import fr.acinq.eclair.db._
|
|||
import fr.acinq.eclair.payment.Monitoring.Tags
|
||||
import fr.acinq.eclair.payment.{ChannelPaymentRelayed, IncomingPacket, PaymentFailed, PaymentSent}
|
||||
import fr.acinq.eclair.transactions.DirectedHtlc.outgoing
|
||||
import fr.acinq.eclair.wire.{FailureMessage, TemporaryNodeFailure, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.{FailureMessage, TemporaryNodeFailure, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.{CustomCommitmentsPlugin, MilliSatoshiLong, NodeParams}
|
||||
|
||||
import scala.concurrent.Promise
|
||||
|
|
|
@ -27,7 +27,7 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.db.PendingRelayDb
|
||||
import fr.acinq.eclair.payment._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{Logs, MilliSatoshi, NodeParams, ShortChannelId}
|
||||
import grizzled.slf4j.Logging
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.eclair.crypto.Sphinx.DecryptedFailurePacket
|
||||
import fr.acinq.eclair.payment.{PaymentEvent, PaymentFailed, RemoteFailure}
|
||||
import fr.acinq.eclair.router.{Announcements, Router}
|
||||
import fr.acinq.eclair.wire.IncorrectOrUnknownPaymentDetails
|
||||
import fr.acinq.eclair.wire.protocol.IncorrectOrUnknownPaymentDetails
|
||||
import fr.acinq.eclair.{MilliSatoshiLong, NodeParams, randomBytes32, secureRandom}
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
|
|
@ -30,7 +30,7 @@ import fr.acinq.eclair.payment.send.PaymentInitiator.SendPaymentConfig
|
|||
import fr.acinq.eclair.payment.send.PaymentLifecycle.SendPaymentToRoute
|
||||
import fr.acinq.eclair.router.RouteCalculation
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiry, FSMDiagnosticActorLogging, Logs, MilliSatoshi, MilliSatoshiLong, NodeParams}
|
||||
|
||||
import java.util.UUID
|
||||
|
|
|
@ -30,8 +30,8 @@ import fr.acinq.eclair.payment.send.PaymentError._
|
|||
import fr.acinq.eclair.payment.send.PaymentLifecycle.{SendPayment, SendPaymentToRoute}
|
||||
import fr.acinq.eclair.router.RouteNotFound
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.wire.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, MilliSatoshi, MilliSatoshiLong, NodeParams, randomBytes32}
|
||||
|
||||
import java.util.UUID
|
||||
|
|
|
@ -32,8 +32,8 @@ import fr.acinq.eclair.payment.send.PaymentInitiator.SendPaymentConfig
|
|||
import fr.acinq.eclair.payment.send.PaymentLifecycle._
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.router._
|
||||
import fr.acinq.eclair.wire.Onion._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol.Onion._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
import scala.util.{Failure, Success}
|
||||
|
|
|
@ -25,10 +25,10 @@ import fr.acinq.eclair.io.Switchboard.RouterPeerConf
|
|||
import fr.acinq.eclair.io.{ClientSpawner, Peer, PeerConnection, Switchboard}
|
||||
import fr.acinq.eclair.router.Router.{GossipDecision, RouterConf, SendChannelQuery}
|
||||
import fr.acinq.eclair.router._
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.QueryChannelRangeTlv.queryFlagsCodec
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.QueryChannelRangeTlv.queryFlagsCodec
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiryDelta, Features}
|
||||
import scodec._
|
||||
import scodec.codecs._
|
||||
|
|
|
@ -16,6 +16,6 @@
|
|||
|
||||
package fr.acinq.eclair.remote
|
||||
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs.lightningMessageCodec
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs.lightningMessageCodec
|
||||
|
||||
class LightningMessageSerializer extends ScodecSerializer(42, lightningMessageCodec)
|
|
@ -18,7 +18,7 @@ package fr.acinq.eclair.router
|
|||
|
||||
import fr.acinq.bitcoin.Crypto.{PrivateKey, PublicKey, sha256, verifySignature}
|
||||
import fr.acinq.bitcoin.{ByteVector32, ByteVector64, Crypto, LexicographicalOrdering}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiryDelta, Features, MilliSatoshi, ShortChannelId, serializationResult}
|
||||
import scodec.bits.{BitVector, ByteVector}
|
||||
import shapeless.HNil
|
||||
|
|
|
@ -21,7 +21,7 @@ import fr.acinq.bitcoin.{Btc, MilliBtc, Satoshi, SatoshiLong}
|
|||
import fr.acinq.eclair._
|
||||
import fr.acinq.eclair.router.Graph.GraphStructure.{DirectedGraph, GraphEdge}
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.wire.ChannelUpdate
|
||||
import fr.acinq.eclair.wire.protocol.ChannelUpdate
|
||||
|
||||
import scala.annotation.tailrec
|
||||
import scala.collection.immutable.SortedMap
|
||||
|
|
|
@ -18,7 +18,7 @@ package fr.acinq.eclair.router
|
|||
|
||||
import fr.acinq.bitcoin.{BtcDouble, MilliBtcDouble, SatoshiLong}
|
||||
import fr.acinq.eclair.router.Router.GossipDecision
|
||||
import fr.acinq.eclair.wire.ChannelUpdate
|
||||
import fr.acinq.eclair.wire.protocol.ChannelUpdate
|
||||
import fr.acinq.eclair.{MilliSatoshi, getSimpleClassName}
|
||||
import kamon.Kamon
|
||||
import kamon.metric.{Counter, MeasurementUnit}
|
||||
|
|
|
@ -20,7 +20,7 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.bitcoin.Satoshi
|
||||
import fr.acinq.eclair.ShortChannelId
|
||||
import fr.acinq.eclair.remote.EclairInternalsSerializer.RemoteTypes
|
||||
import fr.acinq.eclair.wire.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}
|
||||
|
||||
/**
|
||||
* Created by PM on 02/02/2017.
|
||||
|
|
|
@ -19,7 +19,7 @@ package fr.acinq.eclair.router
|
|||
import com.google.common.math.Quantiles.percentiles
|
||||
import fr.acinq.bitcoin.Satoshi
|
||||
import fr.acinq.eclair.router.Router.PublicChannel
|
||||
import fr.acinq.eclair.wire.ChannelUpdate
|
||||
import fr.acinq.eclair.wire.protocol.ChannelUpdate
|
||||
import fr.acinq.eclair.{CltvExpiryDelta, MilliSatoshi}
|
||||
|
||||
import scala.collection.JavaConverters._
|
||||
|
|
|
@ -28,7 +28,7 @@ import fr.acinq.eclair.router.Graph.GraphStructure.{DirectedGraph, GraphEdge}
|
|||
import fr.acinq.eclair.router.Graph.{RichWeight, RoutingHeuristics, WeightRatios}
|
||||
import fr.acinq.eclair.router.Monitoring.{Metrics, Tags}
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.wire.ChannelUpdate
|
||||
import fr.acinq.eclair.wire.protocol.ChannelUpdate
|
||||
import kamon.tag.TagSet
|
||||
|
||||
import scala.annotation.tailrec
|
||||
|
|
|
@ -38,7 +38,7 @@ import fr.acinq.eclair.router.Graph.GraphStructure.DirectedGraph
|
|||
import fr.acinq.eclair.router.Graph.WeightRatios
|
||||
import fr.acinq.eclair.router.Monitoring.{Metrics, Tags}
|
||||
import fr.acinq.eclair.transactions.Scripts
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import kamon.context.Context
|
||||
|
||||
import scala.collection.immutable.SortedMap
|
||||
|
|
|
@ -20,7 +20,7 @@ import akka.actor.ActorContext
|
|||
import akka.event.LoggingAdapter
|
||||
import fr.acinq.eclair.db.NetworkDb
|
||||
import fr.acinq.eclair.router.Router.{ChannelDesc, Data, PublicChannel, hasChannels}
|
||||
import fr.acinq.eclair.wire.{ChannelAnnouncement, ChannelUpdate}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelAnnouncement, ChannelUpdate}
|
||||
import fr.acinq.eclair.{ShortChannelId, TxCoordinates}
|
||||
|
||||
import scala.collection.mutable
|
||||
|
|
|
@ -23,7 +23,7 @@ import fr.acinq.bitcoin.Crypto.PublicKey
|
|||
import fr.acinq.eclair.crypto.TransportHandler
|
||||
import fr.acinq.eclair.router.Monitoring.{Metrics, Tags}
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{ShortChannelId, serializationResult}
|
||||
import scodec.bits.ByteVector
|
||||
import shapeless.HNil
|
||||
|
|
|
@ -27,7 +27,7 @@ import fr.acinq.eclair.db.NetworkDb
|
|||
import fr.acinq.eclair.router.Monitoring.Metrics
|
||||
import fr.acinq.eclair.router.Router._
|
||||
import fr.acinq.eclair.transactions.Scripts
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{Logs, MilliSatoshiLong, NodeParams, ShortChannelId, TxCoordinates}
|
||||
|
||||
object Validation {
|
||||
|
|
|
@ -23,7 +23,7 @@ import akka.io.Tcp
|
|||
import akka.util.ByteString
|
||||
import fr.acinq.eclair.randomBytes
|
||||
import fr.acinq.eclair.tor.Socks5Connection.{Credentials, Socks5Connect}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,7 +24,7 @@ import akka.actor.{Actor, ActorLogging, ActorRef, Props, Stash}
|
|||
import akka.io.Tcp.Connected
|
||||
import akka.util.ByteString
|
||||
import fr.acinq.eclair.tor.TorProtocolHandler.{Authentication, OnionServiceVersion}
|
||||
import fr.acinq.eclair.wire.{NodeAddress, Tor2, Tor3}
|
||||
import fr.acinq.eclair.wire.protocol.{NodeAddress, Tor2, Tor3}
|
||||
import javax.crypto.Mac
|
||||
import javax.crypto.spec.SecretKeySpec
|
||||
import scodec.bits.Bases.Alphabets
|
||||
|
|
|
@ -18,7 +18,7 @@ package fr.acinq.eclair.transactions
|
|||
|
||||
import fr.acinq.eclair.MilliSatoshi
|
||||
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
|
||||
/**
|
||||
* Created by PM on 07/12/2016.
|
||||
|
|
|
@ -26,7 +26,7 @@ import fr.acinq.eclair.blockchain.fee.FeeratePerKw
|
|||
import fr.acinq.eclair.crypto.keymanager.ChannelKeyManager
|
||||
import fr.acinq.eclair.transactions.CommitmentOutput._
|
||||
import fr.acinq.eclair.transactions.Scripts._
|
||||
import fr.acinq.eclair.wire.UpdateAddHtlc
|
||||
import fr.acinq.eclair.wire.protocol.UpdateAddHtlc
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
import java.nio.ByteOrder
|
||||
|
|
|
@ -18,8 +18,8 @@ package fr.acinq.eclair.wire.internal
|
|||
|
||||
import akka.actor.ActorRef
|
||||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.FailureMessageCodecs.failureMessageCodec
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.FailureMessageCodecs.failureMessageCodec
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
|
||||
|
|
|
@ -23,9 +23,9 @@ import fr.acinq.eclair.channel._
|
|||
import fr.acinq.eclair.crypto.ShaChain
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.transactions._
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.UpdateMessage
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.UpdateMessage
|
||||
import scodec.bits.BitVector
|
||||
import scodec.codecs._
|
||||
import scodec.{Attempt, Codec}
|
||||
|
|
|
@ -23,9 +23,9 @@ import fr.acinq.eclair.channel._
|
|||
import fr.acinq.eclair.crypto.ShaChain
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.transactions.{CommitmentSpec, DirectedHtlc, IncomingHtlc, OutgoingHtlc}
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.UpdateMessage
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.UpdateMessage
|
||||
import fr.acinq.eclair.wire.internal.channel.version0.ChannelTypes0
|
||||
import scodec.codecs._
|
||||
import scodec.{Attempt, Codec}
|
||||
|
@ -45,11 +45,6 @@ private[channel] object ChannelCodecs1 {
|
|||
|
||||
val channelVersionCodec: Codec[ChannelVersion] = bits(ChannelVersion.LENGTH_BITS).as[ChannelVersion]
|
||||
|
||||
/**
|
||||
* byte-aligned boolean codec
|
||||
*/
|
||||
val bool8: Codec[Boolean] = bool(8)
|
||||
|
||||
def localParamsCodec(channelVersion: ChannelVersion): Codec[LocalParams] = (
|
||||
("nodeId" | publicKey) ::
|
||||
("channelPath" | keyPathCodec) ::
|
||||
|
@ -79,6 +74,8 @@ private[channel] object ChannelCodecs1 {
|
|||
("htlcBasepoint" | publicKey) ::
|
||||
("features" | combinedFeaturesCodec)).as[RemoteParams]
|
||||
|
||||
def setCodec[T](codec: Codec[T]): Codec[Set[T]] = listOfN(uint16, codec).xmap(_.toSet, _.toList)
|
||||
|
||||
val htlcCodec: Codec[DirectedHtlc] = discriminated[DirectedHtlc].by(bool8)
|
||||
.typecase(true, lengthDelimited(updateAddHtlcCodec).as[IncomingHtlc])
|
||||
.typecase(false, lengthDelimited(updateAddHtlcCodec).as[OutgoingHtlc])
|
||||
|
@ -178,6 +175,8 @@ private[channel] object ChannelCodecs1 {
|
|||
.typecase(0x03, localCodec)
|
||||
.typecase(0x04, trampolineRelayedCodec)
|
||||
|
||||
def mapCodec[K, V](keyCodec: Codec[K], valueCodec: Codec[V]): Codec[Map[K, V]] = listOfN(uint16, keyCodec ~ valueCodec).xmap(_.toMap, _.toList)
|
||||
|
||||
val originsMapCodec: Codec[Map[Long, Origin]] = mapCodec(int64, originCodec)
|
||||
|
||||
val spentMapCodec: Codec[Map[OutPoint, ByteVector32]] = mapCodec(outPointCodec, bytes32)
|
||||
|
|
|
@ -23,9 +23,9 @@ import fr.acinq.eclair.channel._
|
|||
import fr.acinq.eclair.crypto.ShaChain
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.transactions.{CommitmentSpec, DirectedHtlc, IncomingHtlc, OutgoingHtlc}
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.UpdateMessage
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.UpdateMessage
|
||||
import scodec.codecs._
|
||||
import scodec.{Attempt, Codec}
|
||||
|
||||
|
@ -44,11 +44,6 @@ private[channel] object ChannelCodecs2 {
|
|||
|
||||
val channelVersionCodec: Codec[ChannelVersion] = bits(ChannelVersion.LENGTH_BITS).as[ChannelVersion]
|
||||
|
||||
/**
|
||||
* byte-aligned boolean codec
|
||||
*/
|
||||
val bool8: Codec[Boolean] = bool(8)
|
||||
|
||||
def localParamsCodec(channelVersion: ChannelVersion): Codec[LocalParams] = (
|
||||
("nodeId" | publicKey) ::
|
||||
("channelPath" | keyPathCodec) ::
|
||||
|
@ -78,6 +73,8 @@ private[channel] object ChannelCodecs2 {
|
|||
("htlcBasepoint" | publicKey) ::
|
||||
("features" | combinedFeaturesCodec)).as[RemoteParams]
|
||||
|
||||
def setCodec[T](codec: Codec[T]): Codec[Set[T]] = listOfN(uint16, codec).xmap(_.toSet, _.toList)
|
||||
|
||||
val htlcCodec: Codec[DirectedHtlc] = discriminated[DirectedHtlc].by(bool8)
|
||||
.typecase(true, lengthDelimited(updateAddHtlcCodec).as[IncomingHtlc])
|
||||
.typecase(false, lengthDelimited(updateAddHtlcCodec).as[OutgoingHtlc])
|
||||
|
@ -210,6 +207,8 @@ private[channel] object ChannelCodecs2 {
|
|||
.typecase(0x03, localCodec)
|
||||
.typecase(0x04, trampolineRelayedCodec)
|
||||
|
||||
def mapCodec[K, V](keyCodec: Codec[K], valueCodec: Codec[V]): Codec[Map[K, V]] = listOfN(uint16, keyCodec ~ valueCodec).xmap(_.toMap, _.toList)
|
||||
|
||||
val originsMapCodec: Codec[Map[Long, Origin]] = mapCodec(int64, originCodec)
|
||||
|
||||
val spentMapCodec: Codec[Map[OutPoint, Transaction]] = mapCodec(outPointCodec, txCodec)
|
||||
|
|
|
@ -14,11 +14,11 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.eclair.UInt64
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.TlvCodecs.tlvStream
|
||||
import fr.acinq.eclair.wire.protocol.TlvCodecs.tlvStream
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import scodec.Codec
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.codecs._
|
|
@ -14,9 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
|
||||
import java.net.{Inet4Address, Inet6Address, InetAddress}
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.bitcoin.Crypto.{PrivateKey, PublicKey}
|
||||
import fr.acinq.bitcoin.{ByteVector32, ByteVector64, Satoshi}
|
||||
|
@ -28,6 +26,7 @@ import scodec.bits.{BitVector, ByteVector}
|
|||
import scodec.codecs._
|
||||
import scodec.{Attempt, Codec, DecodeResult, Err, SizeBound}
|
||||
|
||||
import java.net.{Inet4Address, Inet6Address, InetAddress}
|
||||
import scala.Ordering.Implicits._
|
||||
import scala.util.Try
|
||||
|
||||
|
@ -50,6 +49,9 @@ object CommonCodecs {
|
|||
}
|
||||
}
|
||||
|
||||
/** byte-aligned boolean codec */
|
||||
val bool8: Codec[Boolean] = bool(8)
|
||||
|
||||
// this codec can be safely used for values < 2^63 and will fail otherwise
|
||||
// (for something smarter see https://github.com/yzernik/bitcoin-scodec/blob/master/src/main/scala/io/github/yzernik/bitcoinscodec/structures/UInt64.scala)
|
||||
val uint64overflow: Codec[Long] = int64.narrow(l => if (l >= 0) Attempt.Successful(l) else Attempt.failure(Err(s"overflow for value $l")), l => l)
|
||||
|
@ -102,10 +104,6 @@ object CommonCodecs {
|
|||
|
||||
val varsizebinarydata: Codec[ByteVector] = variableSizeBytes(uint16, bytes)
|
||||
|
||||
def mapCodec[K, V](keyCodec: Codec[K], valueCodec: Codec[V]): Codec[Map[K, V]] = listOfN(uint16, keyCodec ~ valueCodec).xmap(_.toMap, _.toList)
|
||||
|
||||
def setCodec[T](codec: Codec[T]): Codec[Set[T]] = listOfN(uint16, codec).xmap(_.toSet, _.toList)
|
||||
|
||||
val listofsignatures: Codec[List[ByteVector64]] = listOfN(uint16, bytes64)
|
||||
|
||||
val ipv4address: Codec[Inet4Address] = bytes(4).xmap(b => InetAddress.getByAddress(b.toArray).asInstanceOf[Inet4Address], a => ByteVector(a.getAddress))
|
||||
|
@ -140,7 +138,7 @@ object CommonCodecs {
|
|||
|
||||
val rgb: Codec[Color] = bytes(3).xmap(buf => Color(buf(0), buf(1), buf(2)), t => ByteVector(t.r, t.g, t.b))
|
||||
|
||||
def zeropaddedstring(size: Int): Codec[String] = fixedSizeBytes(32, utf8).xmap(s => s.takeWhile(_ != '\u0000'), s => s)
|
||||
def zeropaddedstring(size: Int): Codec[String] = fixedSizeBytes(size, utf8).xmap(s => s.takeWhile(_ != '\u0000'), s => s)
|
||||
|
||||
/**
|
||||
* When encoding, prepend a valid mac to the output of the given codec.
|
|
@ -14,13 +14,13 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.bitcoin.ByteVector32
|
||||
import fr.acinq.eclair.crypto.Mac32
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.FailureMessageCodecs.failureMessageCodec
|
||||
import fr.acinq.eclair.wire.LightningMessageCodecs.{channelUpdateCodec, meteredLightningMessageCodec}
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.FailureMessageCodecs.failureMessageCodec
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessageCodecs.{channelUpdateCodec, meteredLightningMessageCodec}
|
||||
import fr.acinq.eclair.{CltvExpiry, MilliSatoshi, MilliSatoshiLong, UInt64}
|
||||
import scodec.codecs._
|
||||
import scodec.{Attempt, Codec}
|
|
@ -14,11 +14,11 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.bitcoin.ByteVector32
|
||||
import fr.acinq.eclair.UInt64
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import scodec.Codec
|
||||
import scodec.codecs.{discriminated, list, variableSizeBytesLong}
|
||||
|
|
@ -14,11 +14,11 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.Monitoring.{Metrics, Tags}
|
||||
import fr.acinq.eclair.{Features, KamonExt, wire}
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.{Features, KamonExt}
|
||||
import scodec.bits.{BitVector, ByteVector}
|
||||
import scodec.codecs._
|
||||
import scodec.{Attempt, Codec}
|
||||
|
@ -27,6 +27,7 @@ import scodec.{Attempt, Codec}
|
|||
* Created by PM on 15/11/2016.
|
||||
*/
|
||||
object LightningMessageCodecs {
|
||||
|
||||
val featuresCodec: Codec[Features] = varsizebinarydata.xmap[Features](
|
||||
{ bytes => Features(bytes) },
|
||||
{ features => features.toByteVector }
|
||||
|
@ -114,7 +115,7 @@ object LightningMessageCodecs {
|
|||
("channelId" | bytes32) ::
|
||||
("nextPerCommitmentPoint" | publicKey)).as[FundingLocked]
|
||||
|
||||
val shutdownCodec: Codec[wire.Shutdown] = (
|
||||
val shutdownCodec: Codec[Shutdown] = (
|
||||
("channelId" | bytes32) ::
|
||||
("scriptPubKey" | varsizebinarydata)).as[Shutdown]
|
||||
|
||||
|
@ -238,7 +239,6 @@ object LightningMessageCodecs {
|
|||
case a@EncodedShortChannelIds(EncodingType.COMPRESSED_ZLIB, _) => a
|
||||
}((provide[EncodingType](EncodingType.COMPRESSED_ZLIB) :: zlib(list(shortchannelid))).as[EncodedShortChannelIds])
|
||||
|
||||
|
||||
val queryShortChannelIdsCodec: Codec[QueryShortChannelIds] = {
|
||||
Codec(
|
||||
("chainHash" | bytes32) ::
|
||||
|
@ -367,4 +367,4 @@ object LightningMessageCodecs {
|
|||
}
|
||||
)
|
||||
|
||||
}
|
||||
}
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import com.google.common.base.Charsets
|
||||
import fr.acinq.bitcoin.Crypto.{PrivateKey, PublicKey}
|
|
@ -14,14 +14,14 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.bitcoin.ByteVector32
|
||||
import fr.acinq.bitcoin.Crypto.PublicKey
|
||||
import fr.acinq.eclair.crypto.Sphinx
|
||||
import fr.acinq.eclair.payment.PaymentRequest
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.TlvCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.TlvCodecs._
|
||||
import fr.acinq.eclair.{CltvExpiry, MilliSatoshi, ShortChannelId, UInt64}
|
||||
import scodec.bits.{BitVector, ByteVector}
|
||||
|
||||
|
@ -164,6 +164,7 @@ object OnionTlv {
|
|||
|
||||
/** Pre-image included by the sender of a payment in case of a donation */
|
||||
case class KeySend(paymentPreimage: ByteVector32) extends OnionTlv
|
||||
|
||||
}
|
||||
|
||||
object Onion {
|
|
@ -1,7 +1,23 @@
|
|||
package fr.acinq.eclair.wire
|
||||
/*
|
||||
* Copyright 2019 ACINQ SAS
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.eclair.UInt64
|
||||
import fr.acinq.eclair.wire.CommonCodecs.{shortchannelid, varint, varintoverflow}
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs.{varint, varintoverflow}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
|
|
@ -1,7 +1,23 @@
|
|||
package fr.acinq.eclair.wire
|
||||
/*
|
||||
* Copyright 2019 ACINQ SAS
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.eclair.UInt64
|
||||
import fr.acinq.eclair.wire.CommonCodecs.{varint, varintoverflow}
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs.{varint, varintoverflow}
|
||||
import scodec.Codec
|
||||
import scodec.codecs.{byte, discriminated, list, provide, variableSizeBytesLong, zlib}
|
||||
|
|
@ -1,7 +1,23 @@
|
|||
package fr.acinq.eclair.wire
|
||||
/*
|
||||
* Copyright 2019 ACINQ SAS
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.eclair.UInt64
|
||||
import fr.acinq.eclair.wire.CommonCodecs.{varint, varintoverflow}
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs.{varint, varintoverflow}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
|
|
@ -14,10 +14,10 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.eclair.UInt64.Conversions._
|
||||
import fr.acinq.eclair.wire.CommonCodecs._
|
||||
import fr.acinq.eclair.wire.protocol.CommonCodecs.{minimalvalue, uint64, varint, varintoverflow}
|
||||
import fr.acinq.eclair.{MilliSatoshi, UInt64}
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.codecs._
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package fr.acinq.eclair.wire
|
||||
package fr.acinq.eclair.wire.protocol
|
||||
|
||||
import fr.acinq.eclair.UInt64
|
||||
import scodec.bits.ByteVector
|
|
@ -35,7 +35,7 @@ import fr.acinq.eclair.payment.send.PaymentInitiator.{SendPaymentRequest, SendPa
|
|||
import fr.acinq.eclair.router.RouteCalculationSpec.makeUpdateShort
|
||||
import fr.acinq.eclair.router.Router.{GetNetworkStats, GetNetworkStatsResponse, PredefinedNodeRoute, PublicChannel}
|
||||
import fr.acinq.eclair.router.{Announcements, NetworkStats, Router, Stats}
|
||||
import fr.acinq.eclair.wire.{Color, NodeAnnouncement}
|
||||
import fr.acinq.eclair.wire.protocol.{Color, NodeAnnouncement}
|
||||
import org.mockito.Mockito
|
||||
import org.mockito.scalatest.IdiomaticMockito
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
|
|
|
@ -18,7 +18,7 @@ package fr.acinq.eclair
|
|||
|
||||
import akka.actor.{Actor, ActorLogging, ActorRef, Stash}
|
||||
import fr.acinq.eclair.channel.Commitments.msg2String
|
||||
import fr.acinq.eclair.wire.LightningMessage
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessage
|
||||
|
||||
/**
|
||||
* Handles a bi-directional path between 2 actors
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.bitcoin.{Block, ByteVector32, SatoshiLong, Script}
|
|||
import fr.acinq.eclair.FeatureSupport.Optional
|
||||
import fr.acinq.eclair.Features._
|
||||
import fr.acinq.eclair.NodeParams.BITCOIND
|
||||
import fr.acinq.eclair.blockchain.fee.{FeeEstimator, FeeTargets, FeeratesPerKw, OnChainFeeConf, _}
|
||||
import fr.acinq.eclair.blockchain.fee._
|
||||
import fr.acinq.eclair.crypto.keymanager.{LocalChannelKeyManager, LocalNodeKeyManager}
|
||||
import fr.acinq.eclair.db._
|
||||
import fr.acinq.eclair.db.pg.PgUtils.NoLock
|
||||
|
@ -30,7 +30,8 @@ import fr.acinq.eclair.db.pg._
|
|||
import fr.acinq.eclair.db.sqlite._
|
||||
import fr.acinq.eclair.io.{Peer, PeerConnection}
|
||||
import fr.acinq.eclair.router.Router.RouterConf
|
||||
import fr.acinq.eclair.wire.{Color, EncodingType, NodeAddress}
|
||||
import fr.acinq.eclair.wire.protocol
|
||||
import fr.acinq.eclair.wire.protocol.{Color, EncodingType, NodeAddress}
|
||||
import org.scalatest.Tag
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
|
@ -49,7 +50,7 @@ object TestConstants {
|
|||
val pushMsat = 200000000L msat
|
||||
val feeratePerKw = FeeratePerKw(10000 sat)
|
||||
val anchorOutputsFeeratePerKw = FeeratePerKw(2500 sat)
|
||||
val emptyOnionPacket = wire.OnionRoutingPacket(0, ByteVector.fill(33)(0), ByteVector.fill(1300)(0), ByteVector32.Zeroes)
|
||||
val emptyOnionPacket = protocol.OnionRoutingPacket(0, ByteVector.fill(33)(0), ByteVector.fill(1300)(0), ByteVector32.Zeroes)
|
||||
|
||||
class TestFeeEstimator extends FeeEstimator {
|
||||
private var currentFeerates = FeeratesPerKw.single(feeratePerKw)
|
||||
|
|
|
@ -16,17 +16,17 @@
|
|||
|
||||
package fr.acinq.eclair
|
||||
|
||||
import java.io.File
|
||||
import java.net.ServerSocket
|
||||
import java.nio.file.Files
|
||||
import java.util.UUID
|
||||
|
||||
import akka.actor.ActorRef
|
||||
import akka.event.DiagnosticLoggingAdapter
|
||||
import akka.testkit
|
||||
import akka.testkit.{TestActor, TestProbe}
|
||||
import fr.acinq.eclair.channel.Channel
|
||||
import fr.acinq.eclair.wire.LightningMessage
|
||||
import fr.acinq.eclair.wire.protocol.LightningMessage
|
||||
|
||||
import java.io.File
|
||||
import java.net.ServerSocket
|
||||
import java.nio.file.Files
|
||||
import java.util.UUID
|
||||
|
||||
object TestUtils {
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ import fr.acinq.eclair.blockchain.electrum.ElectrumClient
|
|||
import fr.acinq.eclair.blockchain.electrum.ElectrumClient.GetMerkleResponse
|
||||
import fr.acinq.eclair.blockchain.electrum.ElectrumWallet.PersistentData
|
||||
import fr.acinq.eclair.{TestConstants, randomBytes, randomBytes32}
|
||||
import fr.acinq.eclair.wire.CommonCodecs.setCodec
|
||||
import org.scalatest.funsuite.AnyFunSuite
|
||||
import scodec.Codec
|
||||
import scodec.bits.BitVector
|
||||
|
@ -104,9 +103,10 @@ class SqliteWalletDbSpec extends AnyFunSuite {
|
|||
|
||||
test("read old persistent data") {
|
||||
import SqliteWalletDb._
|
||||
import fr.acinq.eclair.wire.internal.channel.ChannelCodecs._
|
||||
import scodec.codecs._
|
||||
|
||||
def setCodec[T](codec: Codec[T]): Codec[Set[T]] = listOfN(uint16, codec).xmap(_.toSet, _.toList)
|
||||
|
||||
val oldPersistentDataCodec: Codec[PersistentData] = (
|
||||
("version" | constant(BitVector.fromInt(version))) ::
|
||||
("accountKeysCount" | int32) ::
|
||||
|
@ -119,7 +119,7 @@ class SqliteWalletDbSpec extends AnyFunSuite {
|
|||
("pendingTransactions" | listOfN(uint16, txCodec)) ::
|
||||
("locks" | setCodec(txCodec))).as[PersistentData]
|
||||
|
||||
for (i <- 0 until 50) {
|
||||
for (_ <- 0 until 50) {
|
||||
val data = randomPersistentData
|
||||
val encoded = oldPersistentDataCodec.encode(data).require
|
||||
val decoded = persistentDataCodec.decode(encoded).require.value
|
||||
|
|
|
@ -7,7 +7,7 @@ import fr.acinq.eclair.channel.Helpers.Closing
|
|||
import fr.acinq.eclair.channel.states.StateTestsHelperMethods
|
||||
import fr.acinq.eclair.transactions.Transactions
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.wire.{CommitSig, RevokeAndAck, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.{CommitSig, RevokeAndAck, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.{MilliSatoshiLong, TestKitBaseClass}
|
||||
import org.scalatest.funsuite.AnyFunSuiteLike
|
||||
import scodec.bits.ByteVector
|
||||
|
|
|
@ -26,7 +26,7 @@ import fr.acinq.eclair.channel.states.StateTestsBase
|
|||
import fr.acinq.eclair.crypto.ShaChain
|
||||
import fr.acinq.eclair.transactions.CommitmentSpec
|
||||
import fr.acinq.eclair.transactions.Transactions.CommitTx
|
||||
import fr.acinq.eclair.wire.{IncorrectOrUnknownPaymentDetails, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.{IncorrectOrUnknownPaymentDetails, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.{TestKitBaseClass, _}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -19,7 +19,7 @@ package fr.acinq.eclair.channel
|
|||
import akka.actor.{Actor, ActorLogging, ActorRef, Stash}
|
||||
import fr.acinq.eclair.Features
|
||||
import fr.acinq.eclair.channel.Commitments.msg2String
|
||||
import fr.acinq.eclair.wire.{Init, LightningMessage}
|
||||
import fr.acinq.eclair.wire.protocol.{Init, LightningMessage}
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
|
|
@ -30,8 +30,8 @@ import fr.acinq.eclair.payment.receive.MultiPartHandler.ReceivePayment
|
|||
import fr.acinq.eclair.payment.receive.PaymentHandler
|
||||
import fr.acinq.eclair.payment.relay.Relayer
|
||||
import fr.acinq.eclair.router.Router.ChannelHop
|
||||
import fr.acinq.eclair.wire.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import grizzled.slf4j.Logging
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -24,7 +24,7 @@ import fr.acinq.eclair.blockchain.WatchEventSpent
|
|||
import fr.acinq.eclair.channel.Helpers.Closing
|
||||
import fr.acinq.eclair.channel.states.{StateTestsHelperMethods, StateTestsTags}
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.wire.UpdateAddHtlc
|
||||
import fr.acinq.eclair.wire.protocol.UpdateAddHtlc
|
||||
import fr.acinq.eclair.{MilliSatoshiLong, TestKitBaseClass}
|
||||
import org.scalatest.Tag
|
||||
import org.scalatest.funsuite.AnyFunSuiteLike
|
||||
|
|
|
@ -10,7 +10,7 @@ import fr.acinq.eclair.crypto.Generators
|
|||
import fr.acinq.eclair.crypto.keymanager.ChannelKeyManager
|
||||
import fr.acinq.eclair.transactions.Scripts
|
||||
import fr.acinq.eclair.transactions.Transactions.{ClaimP2WPKHOutputTx, DefaultCommitmentFormat, InputInfo, TxOwner}
|
||||
import fr.acinq.eclair.wire.{ChannelReestablish, CommitSig, Error, Init, RevokeAndAck}
|
||||
import fr.acinq.eclair.wire.protocol.{ChannelReestablish, CommitSig, Error, Init, RevokeAndAck}
|
||||
import fr.acinq.eclair.{TestConstants, TestKitBaseClass, _}
|
||||
import org.scalatest.Outcome
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
|
|
|
@ -28,7 +28,7 @@ import fr.acinq.eclair._
|
|||
import fr.acinq.eclair.blockchain._
|
||||
import fr.acinq.eclair.blockchain.bitcoind.ZmqWatcher
|
||||
import fr.acinq.eclair.payment.relay.Relayer
|
||||
import fr.acinq.eclair.wire.{Init, UpdateAddHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.{Init, UpdateAddHtlc}
|
||||
import org.scalatest.funsuite.AnyFunSuite
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
|
|
@ -29,8 +29,8 @@ import fr.acinq.eclair.payment.OutgoingPacket.Upstream
|
|||
import fr.acinq.eclair.router.Router.ChannelHop
|
||||
import fr.acinq.eclair.transactions.Transactions
|
||||
import fr.acinq.eclair.transactions.Transactions._
|
||||
import fr.acinq.eclair.wire.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{FeatureSupport, Features, NodeParams, TestConstants, randomBytes32, _}
|
||||
import org.scalatest.{FixtureTestSuite, ParallelTestExecution}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ import fr.acinq.eclair.blockchain.{MakeFundingTxResponse, TestWallet}
|
|||
import fr.acinq.eclair.channel.Channel.TickChannelOpenTimeout
|
||||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.{StateTestsBase, StateTestsTags}
|
||||
import fr.acinq.eclair.wire.{AcceptChannel, ChannelTlv, Error, Init, OpenChannel, TlvStream}
|
||||
import fr.acinq.eclair.wire.protocol.{AcceptChannel, ChannelTlv, Error, Init, OpenChannel, TlvStream}
|
||||
import fr.acinq.eclair.{CltvExpiryDelta, TestConstants, TestKitBaseClass}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.eclair.TestConstants.{Alice, Bob}
|
|||
import fr.acinq.eclair.blockchain.fee.FeeratePerKw
|
||||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.{StateTestsBase, StateTestsTags}
|
||||
import fr.acinq.eclair.wire.{AcceptChannel, ChannelTlv, Error, Init, OpenChannel, TlvStream}
|
||||
import fr.acinq.eclair.wire.protocol.{AcceptChannel, ChannelTlv, Error, Init, OpenChannel, TlvStream}
|
||||
import fr.acinq.eclair.{CltvExpiryDelta, MilliSatoshiLong, TestConstants, TestKitBaseClass, ToMilliSatoshiConversion}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -23,7 +23,7 @@ import fr.acinq.eclair.blockchain.fee.FeeratePerKw
|
|||
import fr.acinq.eclair.blockchain.{MakeFundingTxResponse, TestWallet}
|
||||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.StateTestsBase
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{TestConstants, TestKitBaseClass}
|
||||
import org.scalatest.Outcome
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
|
|
|
@ -24,7 +24,7 @@ import fr.acinq.eclair.blockchain._
|
|||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.{StateTestsBase, StateTestsTags}
|
||||
import fr.acinq.eclair.transactions.Transactions
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{TestConstants, TestKitBaseClass, ToMilliSatoshiConversion}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -23,7 +23,7 @@ import fr.acinq.eclair.blockchain._
|
|||
import fr.acinq.eclair.channel.Channel.TickChannelOpenTimeout
|
||||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.{StateTestsBase, StateTestsTags}
|
||||
import fr.acinq.eclair.wire.{AcceptChannel, Error, FundingCreated, FundingSigned, Init, OpenChannel}
|
||||
import fr.acinq.eclair.wire.protocol.{AcceptChannel, Error, FundingCreated, FundingSigned, Init, OpenChannel}
|
||||
import fr.acinq.eclair.{TestConstants, TestKitBaseClass}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -23,7 +23,7 @@ import fr.acinq.eclair.blockchain._
|
|||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.StateTestsBase
|
||||
import fr.acinq.eclair.transactions.Scripts.multiSig2of2
|
||||
import fr.acinq.eclair.wire.{AcceptChannel, Error, FundingCreated, FundingLocked, FundingSigned, Init, OpenChannel}
|
||||
import fr.acinq.eclair.wire.protocol.{AcceptChannel, Error, FundingCreated, FundingLocked, FundingSigned, Init, OpenChannel}
|
||||
import fr.acinq.eclair.{TestConstants, TestKitBaseClass, randomKey}
|
||||
import org.scalatest.Outcome
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
|
|
|
@ -22,7 +22,7 @@ import fr.acinq.eclair.TestConstants.{Alice, Bob}
|
|||
import fr.acinq.eclair.blockchain._
|
||||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.StateTestsBase
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{MilliSatoshiLong, TestConstants, TestKitBaseClass}
|
||||
import org.scalatest.Outcome
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
|
|
|
@ -37,7 +37,7 @@ import fr.acinq.eclair.router.Announcements
|
|||
import fr.acinq.eclair.transactions.DirectedHtlc.{incoming, outgoing}
|
||||
import fr.acinq.eclair.transactions.Transactions
|
||||
import fr.acinq.eclair.transactions.Transactions.{DefaultCommitmentFormat, HtlcSuccessTx, weight2fee}
|
||||
import fr.acinq.eclair.wire.{AnnouncementSignatures, ChannelUpdate, ClosingSigned, CommitSig, Error, FailureMessageCodecs, PermanentChannelFailure, RevokeAndAck, Shutdown, UpdateAddHtlc, UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFee, UpdateFulfillHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.{AnnouncementSignatures, ChannelUpdate, ClosingSigned, CommitSig, Error, FailureMessageCodecs, PermanentChannelFailure, RevokeAndAck, Shutdown, UpdateAddHtlc, UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFee, UpdateFulfillHtlc}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
import scodec.bits._
|
||||
|
|
|
@ -27,7 +27,7 @@ import fr.acinq.eclair.channel._
|
|||
import fr.acinq.eclair.channel.states.StateTestsBase
|
||||
import fr.acinq.eclair.router.Announcements
|
||||
import fr.acinq.eclair.transactions.Transactions.HtlcSuccessTx
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, MilliSatoshiLong, TestConstants, TestKitBaseClass, randomBytes32}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -27,8 +27,8 @@ import fr.acinq.eclair.payment.OutgoingPacket.Upstream
|
|||
import fr.acinq.eclair.payment._
|
||||
import fr.acinq.eclair.payment.relay.Relayer._
|
||||
import fr.acinq.eclair.router.Router.ChannelHop
|
||||
import fr.acinq.eclair.wire.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire.{CommitSig, Error, FailureMessageCodecs, PermanentChannelFailure, RevokeAndAck, Shutdown, UpdateAddHtlc, UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFee, UpdateFulfillHtlc}
|
||||
import fr.acinq.eclair.wire.protocol.Onion.FinalLegacyPayload
|
||||
import fr.acinq.eclair.wire.protocol.{CommitSig, Error, FailureMessageCodecs, PermanentChannelFailure, RevokeAndAck, Shutdown, UpdateAddHtlc, UpdateFailHtlc, UpdateFailMalformedHtlc, UpdateFee, UpdateFulfillHtlc}
|
||||
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, MilliSatoshiLong, TestConstants, TestKitBaseClass, randomBytes32}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -26,7 +26,7 @@ import fr.acinq.eclair.channel.Helpers.Closing
|
|||
import fr.acinq.eclair.channel._
|
||||
import fr.acinq.eclair.channel.states.{StateTestsBase, StateTestsTags}
|
||||
import fr.acinq.eclair.transactions.Transactions
|
||||
import fr.acinq.eclair.wire.{ClosingSigned, Error, Shutdown}
|
||||
import fr.acinq.eclair.wire.protocol.{ClosingSigned, Error, Shutdown}
|
||||
import fr.acinq.eclair.{CltvExpiry, MilliSatoshiLong, TestConstants, TestKitBaseClass}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -29,7 +29,7 @@ import fr.acinq.eclair.payment._
|
|||
import fr.acinq.eclair.payment.relay.Relayer._
|
||||
import fr.acinq.eclair.transactions.Transactions.{HtlcSuccessTx, HtlcTimeoutTx}
|
||||
import fr.acinq.eclair.transactions.{Scripts, Transactions}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import fr.acinq.eclair.{CltvExpiry, MilliSatoshiLong, TestConstants, TestKitBaseClass, randomBytes32}
|
||||
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
|
||||
import org.scalatest.{Outcome, Tag}
|
||||
|
|
|
@ -18,8 +18,9 @@ package fr.acinq.eclair.crypto
|
|||
|
||||
import fr.acinq.bitcoin.ByteVector32
|
||||
import fr.acinq.bitcoin.Crypto.{PrivateKey, PublicKey}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.{UInt64, wire}
|
||||
import fr.acinq.eclair.UInt64
|
||||
import fr.acinq.eclair.wire.protocol
|
||||
import fr.acinq.eclair.wire.protocol._
|
||||
import org.scalatest.funsuite.AnyFunSuite
|
||||
import scodec.bits._
|
||||
|
||||
|
@ -113,10 +114,10 @@ class SphinxSpec extends AnyFunSuite {
|
|||
}
|
||||
|
||||
test("bad onion") {
|
||||
val badOnions = Seq[wire.OnionRoutingPacket](
|
||||
wire.OnionRoutingPacket(1, ByteVector.fill(33)(0), ByteVector.fill(65)(1), ByteVector32.Zeroes),
|
||||
wire.OnionRoutingPacket(0, ByteVector.fill(33)(0), ByteVector.fill(65)(1), ByteVector32.Zeroes),
|
||||
wire.OnionRoutingPacket(0, publicKeys.head.value, ByteVector.fill(42)(1), ByteVector32(hex"2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a"))
|
||||
val badOnions = Seq[protocol.OnionRoutingPacket](
|
||||
protocol.OnionRoutingPacket(1, ByteVector.fill(33)(0), ByteVector.fill(65)(1), ByteVector32.Zeroes),
|
||||
protocol.OnionRoutingPacket(0, ByteVector.fill(33)(0), ByteVector.fill(65)(1), ByteVector32.Zeroes),
|
||||
protocol.OnionRoutingPacket(0, publicKeys.head.value, ByteVector.fill(42)(1), ByteVector32(hex"2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a"))
|
||||
)
|
||||
|
||||
val expected = Seq[BadOnion](
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue