@@ -519,6 +519,33 @@ class LightningMessageCodecsSpec extends AnyFunSuite {
519519 }
520520 }
521521
522+ test(" encode/decode closing messages" ) {
523+ val channelId = ByteVector32 (hex " 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 " )
524+ val sig1 = ByteVector64 (hex " 01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " )
525+ val sig2 = ByteVector64 (hex " 02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 " )
526+ val sig3 = ByteVector64 (hex " 03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 " )
527+ val closerScript = hex " deadbeef "
528+ val closeeScript = hex " d43db3ef1234 "
529+ val testCases = Seq (
530+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 " -> ClosingComplete (channelId, closerScript, closeeScript, 1105 sat, 0 ),
531+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 000c96a8 024001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingComplete (channelId, closerScript, closeeScript, 1105 sat, 825_000 , TlvStream (ClosingTlv .CloseeOutputOnly (sig1))),
532+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 034001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingComplete (channelId, closerScript, closeeScript, 1105 sat, 0 , TlvStream (ClosingTlv .CloserAndCloseeOutputs (sig1))),
533+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 034002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 " -> ClosingComplete (channelId, closerScript, closeeScript, 1105 sat, 0 , TlvStream (ClosingTlv .CloserOutputOnly (sig1), ClosingTlv .CloserAndCloseeOutputs (sig2))),
534+ hex " 0028 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 024002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 034003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 " -> ClosingComplete (channelId, closerScript, closeeScript, 1105 sat, 0 , TlvStream (ClosingTlv .CloserOutputOnly (sig1), ClosingTlv .CloseeOutputOnly (sig2), ClosingTlv .CloserAndCloseeOutputs (sig3))),
535+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 " -> ClosingSig (channelId, closerScript, closeeScript, 1105 sat, 0 ),
536+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 024001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingSig (channelId, closerScript, closeeScript, 1105 sat, 0 , TlvStream (ClosingTlv .CloseeOutputOnly (sig1))),
537+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 034001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 " -> ClosingSig (channelId, closerScript, closeeScript, 1105 sat, 0 , TlvStream (ClosingTlv .CloserAndCloseeOutputs (sig1))),
538+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 034002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 " -> ClosingSig (channelId, closerScript, closeeScript, 1105 sat, 0 , TlvStream (ClosingTlv .CloserOutputOnly (sig1), ClosingTlv .CloserAndCloseeOutputs (sig2))),
539+ hex " 0029 58a00a6f14e69a2e97b18cf76f755c8551fea9947cf7b6ece9d641013eba5f86 0004deadbeef 0006d43db3ef1234 0000000000000451 00000000 014001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 024002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 034003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 " -> ClosingSig (channelId, closerScript, closeeScript, 1105 sat, 0 , TlvStream (ClosingTlv .CloserOutputOnly (sig1), ClosingTlv .CloseeOutputOnly (sig2), ClosingTlv .CloserAndCloseeOutputs (sig3))),
540+ )
541+ for ((encoded, expected) <- testCases) {
542+ val decoded = lightningMessageCodec.decode(encoded.bits).require.value
543+ assert(decoded == expected)
544+ val reEncoded = lightningMessageCodec.encode(expected).require.bytes
545+ assert(reEncoded == encoded)
546+ }
547+ }
548+
522549 test(" encode/decode all channel messages" ) {
523550 val unknownTlv = GenericTlv (UInt64 (5 ), ByteVector .fromValidHex(" deadbeef" ))
524551 val msgs = List (
0 commit comments