diff --git a/eclair-node/pom.xml b/eclair-node/pom.xml
index 935ed61b6..c70400af7 100644
--- a/eclair-node/pom.xml
+++ b/eclair-node/pom.xml
@@ -102,6 +102,11 @@
lenses_${scala.version.short}
0.4
+
+ org.scodec
+ scodec-core_${scala.version.short}
+ 1.10.3
+
org.clapper
diff --git a/eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/sdc/Codecs.scala b/eclair-node/src/main/scala/fr/acinq/eclair/wire/Codecs.scala
similarity index 81%
rename from eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/sdc/Codecs.scala
rename to eclair-node/src/main/scala/fr/acinq/eclair/wire/Codecs.scala
index bedb727a4..69e4613a7 100644
--- a/eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/sdc/Codecs.scala
+++ b/eclair-node/src/main/scala/fr/acinq/eclair/wire/Codecs.scala
@@ -1,7 +1,7 @@
-package fr.acinq.eclair.wire.bolt2.sdc
+package fr.acinq.eclair.wire
import fr.acinq.bitcoin.BinaryData
-import fr.acinq.eclair.wire.bolt2.custom._
+import fr.acinq.eclair.wire
import scodec.bits.ByteVector
import scodec.codecs._
import scodec.{Attempt, Codec, Err}
@@ -59,15 +59,32 @@ object Codecs {
val fundingLockedCodec: Codec[FundingLocked] = (
("temporaryChannelId" | uint64) ::
- ("channelId" | uint64) ::
+ ("channelId" | uint64) ::
("nextKeyOffset" | binarydata(32)) ::
("nextRevocationHalfKey" | binarydata(33))).as[FundingLocked]
+ val updateFeeCodec: Codec[UpdateFee] = (
+ ("channelId" | uint64) ::
+ ("feeratePerKb" | uint32)).as[UpdateFee]
+
+ val shutdownCodec: Codec[wire.Shutdown] = (
+ ("channelId" | uint64) ::
+ ("len" | uint32) ::
+ ("scriptPubKey" | binarydata(32))).as[Shutdown]
+
+ val closeSignatureCodec: Codec[CloseSignature] = (
+ ("channelId" | uint64) ::
+ ("feeSatoshis" | uint64) ::
+ ("signature" | binarydata(64))).as[CloseSignature]
+
val lightningMessageCodec = discriminated[LightningMessage].by(uint32)
.typecase(32L, openChannelCodec)
.typecase(33L, acceptChannelCodec)
.typecase(34L, fundingCreatedCodec)
.typecase(35L, fundingSignedCodec)
.typecase(36L, fundingLockedCodec)
+ .typecase(37L, updateFeeCodec)
+ .typecase(38L, shutdownCodec)
+ .typecase(39L, closeSignatureCodec)
}
diff --git a/eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/custom/OpenChannel.scala b/eclair-node/src/main/scala/fr/acinq/eclair/wire/OpenChannel.scala
similarity index 89%
rename from eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/custom/OpenChannel.scala
rename to eclair-node/src/main/scala/fr/acinq/eclair/wire/OpenChannel.scala
index eb6cacfd0..4287a6af3 100644
--- a/eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/custom/OpenChannel.scala
+++ b/eclair-node/src/main/scala/fr/acinq/eclair/wire/OpenChannel.scala
@@ -1,9 +1,9 @@
-package fr.acinq.eclair.wire.bolt2.custom
+package fr.acinq.eclair.wire
import java.io.{InputStream, OutputStream}
-import fr.acinq.bitcoin.{BinaryData, BtcMessage}
import fr.acinq.bitcoin.Protocol._
+import fr.acinq.bitcoin.{BinaryData, BtcMessage}
/**
* Created by PM on 15/11/2016.
@@ -92,3 +92,14 @@ case class FundingLocked(temporaryChannelId: Long,
channelId: Long,
nextKeyOffset: BinaryData,
nextRevocationHalfKey: BinaryData) extends ChannelMessage
+
+case class UpdateFee(channelId: Long,
+ feeratePerKb: Long) extends ChannelMessage
+
+case class Shutdown(channelId: Long,
+ len: Long,
+ scriptPubKey: BinaryData) extends ChannelMessage
+
+case class CloseSignature(channelId: Long,
+ feeSatoshis: Long,
+ signature: BinaryData) extends ChannelMessage
\ No newline at end of file
diff --git a/eclair-node/src/test/scala/fr/acinq/eclair/wire/CodecsSpec.scala b/eclair-node/src/test/scala/fr/acinq/eclair/wire/CodecsSpec.scala
new file mode 100644
index 000000000..e621e6ff7
--- /dev/null
+++ b/eclair-node/src/test/scala/fr/acinq/eclair/wire/CodecsSpec.scala
@@ -0,0 +1,29 @@
+package fr.acinq.eclair.wire
+
+import fr.acinq.eclair.wire.Codecs.lightningMessageCodec
+import org.junit.runner.RunWith
+import org.scalatest.FunSuite
+import org.scalatest.junit.JUnitRunner
+
+/**
+ * Created by PM on 31/05/2016.
+ */
+@RunWith(classOf[JUnitRunner])
+class CodecsSpec extends FunSuite {
+
+ test("encode/decode all messages") {
+
+ val open = OpenChannel(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, Array.fill[Byte](33)(1), Array.fill[Byte](33)(2), Array.fill[Byte](33)(3))
+ val accept = AcceptChannel(2, 3, 4, 5, 6, 7, 8, Array.fill[Byte](32)(0), 9, Array.fill[Byte](33)(1), Array.fill[Byte](33)(2), Array.fill[Byte](33)(3))
+ val funding_created = FundingCreated(2, Array.fill[Byte](32)(0), 3, Array.fill[Byte](64)(1))
+ val funding_signed = FundingSigned(2, Array.fill[Byte](64)(1))
+ val funding_locked = FundingLocked(1, 2, Array.fill[Byte](32)(1), Array.fill[Byte](33)(2))
+
+ val msgs: List[LightningMessage] = open :: accept :: funding_created :: funding_signed :: funding_locked :: Nil
+
+ msgs.foreach {
+ case msg => assert(msg === lightningMessageCodec.encode(msg).flatMap(lightningMessageCodec.decode(_)).toOption.get.value)
+ }
+ }
+
+}
diff --git a/eclair-wire/pom.xml b/eclair-wire/pom.xml
deleted file mode 100644
index c1fcaa36c..000000000
--- a/eclair-wire/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
- 4.0.0
-
- fr.acinq.eclair
- eclair_2.11
- 0.2-SNAPSHOT
-
-
- eclair-wire_2.11
- jar
-
- ${project.artifactId}
-
-
-
-
- org.codehaus.mojo
- build-helper-maven-plugin
-
-
- generate-sources
-
- add-source
-
-
-
- ${project.build.directory}/generated-sources/scala
-
-
-
-
-
-
-
-
-
-
- org.scodec
- scodec-core_${scala.version.short}
- 1.10.3
-
-
- fr.acinq
- bitcoin-lib_${scala.version.short}
- ${bitcoinlib.version}
-
-
-
-
diff --git a/eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/Test.scala b/eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/Test.scala
deleted file mode 100644
index 0be199ad1..000000000
--- a/eclair-wire/src/main/scala/fr/acinq/eclair/wire/bolt2/Test.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package fr.acinq.eclair.wire.bolt2
-
-import fr.acinq.eclair.wire.bolt2.custom._
-import fr.acinq.eclair.wire.bolt2.sdc.Codecs.lightningMessageCodec
-
-
-/**
- * Created by PM on 15/11/2016.
- */
-object Test extends App {
-
- val open = OpenChannel(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, Array.fill[Byte](33)(1), Array.fill[Byte](33)(2), Array.fill[Byte](33)(3))
- val accept = AcceptChannel(2, 3, 4, 5, 6, 7, 8, Array.fill[Byte](32)(0), 9, Array.fill[Byte](33)(1), Array.fill[Byte](33)(2), Array.fill[Byte](33)(3))
- val funding_created = FundingCreated(2, Array.fill[Byte](32)(0), 3, Array.fill[Byte](64)(1))
- val funding_signed = FundingSigned(2, Array.fill[Byte](64)(1))
- val funding_locked = FundingLocked(1, 2, Array.fill[Byte](32)(1), Array.fill[Byte](33)(2))
-
- val msgs: List[LightningMessage] = open :: accept :: funding_created :: funding_signed :: funding_locked :: Nil
-
- msgs.foreach {
- case msg =>
- val bin = lightningMessageCodec.encode(msg)
- println(bin)
- println(bin.flatMap(lightningMessageCodec.decode(_)))
- }
-
-}
diff --git a/pom.xml b/pom.xml
index 3ecc6a263..2255c9799 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,6 @@
pom
- eclair-wire
lightning-types
eclair-node