@@ -379,6 +379,31 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
379379 }
380380 }
381381
382+ test(" encode/decode closing messages" ) {
383+ val channelId = ByteVector32 (hex " 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 " )
384+ val sig1 = ByteVector64 (hex " 01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " )
385+ val sig2 = ByteVector64 (hex " 02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 " )
386+ val sig3 = ByteVector64 (hex " 03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 " )
387+ val testCases = Seq (
388+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0000000000000451 " -> ClosingComplete (channelId, 1105 sat),
389+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0000000000000451 024001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingComplete (channelId, 1105 sat, TlvStream (ClosingTlv .NoCloserClosee (sig1))),
390+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0000000000000451 034001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingComplete (channelId, 1105 sat, TlvStream (ClosingTlv .CloserAndClosee (sig1))),
391+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0000000000000451 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 034002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 " -> ClosingComplete (channelId, 1105 sat, TlvStream (ClosingTlv .CloserNoClosee (sig1), ClosingTlv .CloserAndClosee (sig2))),
392+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0000000000000451 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 024002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 034003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 " -> ClosingComplete (channelId, 1105 sat, TlvStream (ClosingTlv .CloserNoClosee (sig1), ClosingTlv .NoCloserClosee (sig2), ClosingTlv .CloserAndClosee (sig3))),
393+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 " -> ClosingSig (channelId),
394+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 024001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingSig (channelId, TlvStream (ClosingTlv .NoCloserClosee (sig1))),
395+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 034001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingSig (channelId, TlvStream (ClosingTlv .CloserAndClosee (sig1))),
396+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 034002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 " -> ClosingSig (channelId, TlvStream (ClosingTlv .CloserNoClosee (sig1), ClosingTlv .CloserAndClosee (sig2))),
397+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 024002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 034003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 " -> ClosingSig (channelId, TlvStream (ClosingTlv .CloserNoClosee (sig1), ClosingTlv .NoCloserClosee (sig2), ClosingTlv .CloserAndClosee (sig3))),
398+ )
399+ for ((encoded, expected) <- testCases) {
400+ val decoded = lightningMessageCodec.decode(encoded.bits).require.value
401+ assert(decoded == expected)
402+ val reEncoded = lightningMessageCodec.encode(expected).require.bytes
403+ assert(reEncoded == encoded)
404+ }
405+ }
406+
382407 test(" encode/decode all channel messages" ) {
383408 val unknownTlv = GenericTlv (UInt64 (5 ), ByteVector .fromValidHex(" deadbeef" ))
384409 val msgs = List (
0 commit comments