Skip to content

Commit

Permalink
introduce a common set of internal codecs
Browse files Browse the repository at this point in the history
  • Loading branch information
pm47 committed Mar 18, 2021
1 parent e20ae86 commit 41bf1fa
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import fr.acinq.eclair.blockchain.electrum.ElectrumWallet.PersistentData
import fr.acinq.eclair.blockchain.electrum.db.WalletDb
import fr.acinq.eclair.blockchain.electrum.{ElectrumClient, ElectrumWallet}
import fr.acinq.eclair.db.sqlite.SqliteUtils
import fr.acinq.eclair.wire.internal.InternalCommonCodecs.txCodec

import java.sql.Connection
import scala.collection.immutable.Queue
Expand Down Expand Up @@ -164,10 +165,6 @@ object SqliteWalletDb {
(wire: BitVector) => heightsListCodec.decode(wire).map(_.map(_.toMap))
)

def lengthDelimited[T](codec: Codec[T]): Codec[T] = variableSizeBytesLong(varintoverflow, codec)

val txCodec: Codec[Transaction] = lengthDelimited(bytes.xmap(d => Transaction.read(d.toArray), d => Transaction.write(d)))

val transactionListCodec: Codec[List[(ByteVector32, Transaction)]] = listOfN(uint16, bytes32 ~ txCodec)

val transactionsCodec: Codec[Map[ByteVector32, Transaction]] = Codec[Map[ByteVector32, Transaction]](
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package fr.acinq.eclair.wire.internal

import fr.acinq.bitcoin.Transaction
import fr.acinq.eclair.wire.CommonCodecs.varintoverflow
import scodec.Codec
import scodec.codecs.{bytes, variableSizeBytesLong}

object InternalCommonCodecs {

/**
* All LN protocol message must be stored as length-delimited, because they may have arbitrary trailing data
*/
def lengthDelimited[T](codec: Codec[T]): Codec[T] = variableSizeBytesLong(varintoverflow, codec)

val txCodec: Codec[Transaction] = lengthDelimited(bytes.xmap(d => Transaction.read(d.toArray), d => Transaction.write(d)))

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ 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.internal.channel.version0.ChannelCodecs0
import fr.acinq.eclair.wire.internal.channel.version1.ChannelCodecs1
import fr.acinq.eclair.wire.internal.InternalCommonCodecs._
import grizzled.slf4j.Logging
import scodec.codecs._
import scodec.{Attempt, Codec}
Expand All @@ -39,11 +38,6 @@ private[channel] object ChannelCodecs2 extends Logging {

private[version2] object Codecs {

/**
* All LN protocol message must be stored as length-delimited, because they may have arbitrary trailing data
*/
def lengthDelimited[T](codec: Codec[T]): Codec[T] = variableSizeBytesLong(varintoverflow, codec)

val keyPathCodec: Codec[KeyPath] = ("path" | listOfN(uint16, uint32)).xmap[KeyPath](l => new KeyPath(l), keyPath => keyPath.path.toList).as[KeyPath]

val extendedPrivateKeyCodec: Codec[ExtendedPrivateKey] = (
Expand Down Expand Up @@ -103,8 +97,6 @@ private[channel] object ChannelCodecs2 extends Logging {

val txOutCodec: Codec[TxOut] = lengthDelimited(bytes.xmap(d => TxOut.read(d.toArray), d => TxOut.write(d)))

val txCodec: Codec[Transaction] = lengthDelimited(bytes.xmap(d => Transaction.read(d.toArray), d => Transaction.write(d)))

val outputInfoCodec: Codec[OutputInfo] = (
("index" | uint32) ::
("amount" | satoshi) ::
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ import fr.acinq.bitcoin.{Block, BlockHeader, OutPoint, Satoshi, Transaction, TxI
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 fr.acinq.eclair.wire.internal.InternalCommonCodecs.txCodec
import fr.acinq.eclair.{TestConstants, randomBytes, randomBytes32}
import org.scalatest.funsuite.AnyFunSuite
import scodec.Codec
import scodec.bits.BitVector
Expand Down Expand Up @@ -104,7 +105,6 @@ class SqliteWalletDbSpec extends AnyFunSuite {

test("read old persistent data") {
import SqliteWalletDb._
import fr.acinq.eclair.wire.internal.channel.ChannelCodecs._
import scodec.codecs._

val oldPersistentDataCodec: Codec[PersistentData] = (
Expand Down

0 comments on commit 41bf1fa

Please sign in to comment.