<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>bolt7, branch HEAD</title>
<subtitle>Routing gossip protocol, per BOLT #7 (docs.ppad.tech/bolt7).
</subtitle>
<entry>
<id>7aa54cabff49e52ca9f4ea94f4e430eb18fd3cc7</id>
<published>2026-04-18T05:02:01Z</published>
<updated>2026-04-18T05:02:01Z</updated>
<title type="text">readme: badges</title>
<link rel="alternate" type="text/html" href="commit/7aa54cabff49e52ca9f4ea94f4e430eb18fd3cc7.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 7aa54cabff49e52ca9f4ea94f4e430eb18fd3cc7
parent d95b82031acc0fad06f113eb78de1d57c72056f0
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sat, 18 Apr 2026 13:02:01 +0800

readme: badges

</content>
</entry>
<entry>
<id>d95b82031acc0fad06f113eb78de1d57c72056f0</id>
<published>2026-04-18T05:00:12Z</published>
<updated>2026-04-18T05:00:12Z</updated>
<title type="text">flake: use remote</title>
<link rel="alternate" type="text/html" href="commit/d95b82031acc0fad06f113eb78de1d57c72056f0.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit d95b82031acc0fad06f113eb78de1d57c72056f0
parent 074a4581c2ae164b7fbc9fe6eca560ee29d335b3
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sat, 18 Apr 2026 13:00:12 +0800

flake: use remote

</content>
</entry>
<entry>
<id>074a4581c2ae164b7fbc9fe6eca560ee29d335b3</id>
<published>2026-04-18T04:57:41Z</published>
<updated>2026-04-18T04:57:41Z</updated>
<title type="text">meta: bolt1 bounds</title>
<link rel="alternate" type="text/html" href="commit/074a4581c2ae164b7fbc9fe6eca560ee29d335b3.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 074a4581c2ae164b7fbc9fe6eca560ee29d335b3
parent 9d5fa3330385ab70b28144e2a142a85a363bea5d
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sat, 18 Apr 2026 12:57:41 +0800

meta: bolt1 bounds

</content>
</entry>
<entry>
<id>9d5fa3330385ab70b28144e2a142a85a363bea5d</id>
<published>2026-04-18T04:57:31Z</published>
<updated>2026-04-18T04:57:31Z</updated>
<title type="text">readme: pre-release note</title>
<link rel="alternate" type="text/html" href="commit/9d5fa3330385ab70b28144e2a142a85a363bea5d.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 9d5fa3330385ab70b28144e2a142a85a363bea5d
parent bf284caaf7687fc8a09aa796bd781b89dd36002e
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sat, 18 Apr 2026 12:57:31 +0800

readme: pre-release note

</content>
</entry>
<entry>
<id>bf284caaf7687fc8a09aa796bd781b89dd36002e</id>
<published>2026-01-25T12:07:15Z</published>
<updated>2026-01-25T12:08:04Z</updated>
<title type="text">Merge impl/flags-adt: use ADTs for channel update flags</title>
<link rel="alternate" type="text/html" href="commit/bf284caaf7687fc8a09aa796bd781b89dd36002e.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit bf284caaf7687fc8a09aa796bd781b89dd36002e
parent b4ddfa7b4e40812d0f62082d531f88792620e8ab
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 16:07:15 +0400

Merge impl/flags-adt: use ADTs for channel update flags

</content>
</entry>
<entry>
<id>b4ddfa7b4e40812d0f62082d531f88792620e8ab</id>
<published>2026-01-25T12:05:01Z</published>
<updated>2026-01-25T12:05:01Z</updated>
<title type="text">Merge impl/routing-newtypes: use newtypes for routing parameters</title>
<link rel="alternate" type="text/html" href="commit/b4ddfa7b4e40812d0f62082d531f88792620e8ab.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit b4ddfa7b4e40812d0f62082d531f88792620e8ab
parent cf2177ebbb8c31b41f49fd99be95d597c7ffe08d
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 16:05:01 +0400

Merge impl/routing-newtypes: use newtypes for routing parameters

</content>
</entry>
<entry>
<id>69a62c710f6da9d968d67d4876bb0d771fd017dc</id>
<published>2026-01-25T12:04:13Z</published>
<updated>2026-01-25T12:04:13Z</updated>
<title type="text">Refactor: use newtypes for routing parameters</title>
<link rel="alternate" type="text/html" href="commit/69a62c710f6da9d968d67d4876bb0d771fd017dc.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 69a62c710f6da9d968d67d4876bb0d771fd017dc
parent cf2177ebbb8c31b41f49fd99be95d597c7ffe08d
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 16:04:13 +0400

Refactor: use newtypes for routing parameters

Convert type aliases to newtypes for improved type safety:
- CltvExpiryDelta (Word16)
- FeeBaseMsat (Word32)
- FeeProportionalMillionths (Word32)
- HtlcMinimumMsat (Word64)
- HtlcMaximumMsat (Word64)

Each newtype includes accessor, NFData instance, and deriving
Eq/Ord/Show/Generic. Codec functions updated to wrap/unwrap,
validation updated for comparisons, tests updated to use
constructors.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5fbd48961c36baa346f0f5343ca3cd40ab0510cf</id>
<published>2026-01-25T12:04:11Z</published>
<updated>2026-01-25T12:04:11Z</updated>
<title type="text">Refactor: use ADTs for channel update flags</title>
<link rel="alternate" type="text/html" href="commit/5fbd48961c36baa346f0f5343ca3cd40ab0510cf.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 5fbd48961c36baa346f0f5343ca3cd40ab0510cf
parent cf2177ebbb8c31b41f49fd99be95d597c7ffe08d
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 16:04:11 +0400

Refactor: use ADTs for channel update flags

Replace raw Word8 message/channel flags with structured ADTs that provide
type-safe access to individual flag bits:

- MessageFlags: encapsulates htlc_maximum_msat presence (bit 0)
- ChannelFlags: encapsulates direction (bit 0) and disabled (bit 1)

Add encode/decode functions for wire format conversion. Update Codec.hs
to use the ADT accessor for htlc_max presence check. Update all tests
to use the new structured types.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>cf2177ebbb8c31b41f49fd99be95d597c7ffe08d</id>
<published>2026-01-25T11:58:57Z</published>
<updated>2026-01-25T11:58:57Z</updated>
<title type="text">Merge impl/validate-reply: complete validateReplyChannelRange</title>
<link rel="alternate" type="text/html" href="commit/cf2177ebbb8c31b41f49fd99be95d597c7ffe08d.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit cf2177ebbb8c31b41f49fd99be95d597c7ffe08d
parent d928a05a6e8b89d13eddbfa7a217fe5a61b1f069
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:58:57 +0400

Merge impl/validate-reply: complete validateReplyChannelRange

</content>
</entry>
<entry>
<id>d928a05a6e8b89d13eddbfa7a217fe5a61b1f069</id>
<published>2026-01-25T11:58:53Z</published>
<updated>2026-01-25T11:58:53Z</updated>
<title type="text">Merge impl/len-prefixed: extract encodeLenPrefixed helper</title>
<link rel="alternate" type="text/html" href="commit/d928a05a6e8b89d13eddbfa7a217fe5a61b1f069.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit d928a05a6e8b89d13eddbfa7a217fe5a61b1f069
parent 1d7de451be25581b74b4018415f75cb35338a469
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:58:53 +0400

Merge impl/len-prefixed: extract encodeLenPrefixed helper

</content>
</entry>
<entry>
<id>1d7de451be25581b74b4018415f75cb35338a469</id>
<published>2026-01-25T11:58:22Z</published>
<updated>2026-01-25T11:58:22Z</updated>
<title type="text">Merge impl/double-sha256: extract doubleSha256 helper</title>
<link rel="alternate" type="text/html" href="commit/1d7de451be25581b74b4018415f75cb35338a469.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 1d7de451be25581b74b4018415f75cb35338a469
parent aae5941247b82e02506648bd5a229e7c50baa8cd
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:58:22 +0400

Merge impl/double-sha256: extract doubleSha256 helper

</content>
</entry>
<entry>
<id>aae5941247b82e02506648bd5a229e7c50baa8cd</id>
<published>2026-01-25T11:58:19Z</published>
<updated>2026-01-25T11:58:19Z</updated>
<title type="text">Merge impl/decoder-combinator: extract decodeFixed combinator</title>
<link rel="alternate" type="text/html" href="commit/aae5941247b82e02506648bd5a229e7c50baa8cd.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit aae5941247b82e02506648bd5a229e7c50baa8cd
parent 1353cecbe771b61d2d1dbee207fe0b14e929b389
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:58:19 +0400

Merge impl/decoder-combinator: extract decodeFixed combinator

</content>
</entry>
<entry>
<id>011fdb633264a59d10243e60c7bf403a84e519e3</id>
<published>2026-01-25T11:54:36Z</published>
<updated>2026-01-25T11:54:36Z</updated>
<title type="text">Refactor: extract encodeLenPrefixed helper</title>
<link rel="alternate" type="text/html" href="commit/011fdb633264a59d10243e60c7bf403a84e519e3.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 011fdb633264a59d10243e60c7bf403a84e519e3
parent 1353cecbe771b61d2d1dbee207fe0b14e929b389
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:54:36 +0400

Refactor: extract encodeLenPrefixed helper

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>6ba8404173c6d4e84d4c9a7443aca476aac6b2f9</id>
<published>2026-01-25T11:54:30Z</published>
<updated>2026-01-25T11:54:30Z</updated>
<title type="text">Complete validateReplyChannelRange implementation</title>
<link rel="alternate" type="text/html" href="commit/6ba8404173c6d4e84d4c9a7443aca476aac6b2f9.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 6ba8404173c6d4e84d4c9a7443aca476aac6b2f9
parent 1353cecbe771b61d2d1dbee207fe0b14e929b389
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:54:30 +0400

Complete validateReplyChannelRange implementation

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>26eb8e8d3459df0a3507e7e60ee7774c6099cfe4</id>
<published>2026-01-25T11:54:22Z</published>
<updated>2026-01-25T11:54:22Z</updated>
<title type="text">Refactor: extract decodeFixed combinator</title>
<link rel="alternate" type="text/html" href="commit/26eb8e8d3459df0a3507e7e60ee7774c6099cfe4.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 26eb8e8d3459df0a3507e7e60ee7774c6099cfe4
parent 1353cecbe771b61d2d1dbee207fe0b14e929b389
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:54:22 +0400

Refactor: extract decodeFixed combinator

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e5243245d79bb8e3cbce0ec83e7c9f691395a1f5</id>
<published>2026-01-25T11:54:15Z</published>
<updated>2026-01-25T11:54:15Z</updated>
<title type="text">Refactor: extract doubleSha256 helper</title>
<link rel="alternate" type="text/html" href="commit/e5243245d79bb8e3cbce0ec83e7c9f691395a1f5.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit e5243245d79bb8e3cbce0ec83e7c9f691395a1f5
parent 1353cecbe771b61d2d1dbee207fe0b14e929b389
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:54:15 +0400

Refactor: extract doubleSha256 helper

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>1353cecbe771b61d2d1dbee207fe0b14e929b389</id>
<published>2026-01-25T11:44:58Z</published>
<updated>2026-01-25T11:44:58Z</updated>
<title type="text">Add usage examples to README</title>
<link rel="alternate" type="text/html" href="commit/1353cecbe771b61d2d1dbee207fe0b14e929b389.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 1353cecbe771b61d2d1dbee207fe0b14e929b389
parent 8fb80be72c3ece50c1a6379bf47881b4b60f48b5
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:44:58 +0400

Add usage examples to README

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8fb80be72c3ece50c1a6379bf47881b4b60f48b5</id>
<published>2026-01-25T11:39:48Z</published>
<updated>2026-01-25T11:39:48Z</updated>
<title type="text">Merge impl/docs: Phase 8 documentation</title>
<link rel="alternate" type="text/html" href="commit/8fb80be72c3ece50c1a6379bf47881b4b60f48b5.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 8fb80be72c3ece50c1a6379bf47881b4b60f48b5
parent f206f2b3870a44a6b8592edbcb681fb0902f0cca
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:39:48 +0400

Merge impl/docs: Phase 8 documentation

Complete Haddock documentation for all BOLT #7 modules:

- Add comprehensive overview and usage examples to main BOLT7 module
- Add OPTIONS_HADDOCK prune to all public modules for cleaner docs
- Document protocol overview including decoding, encoding, validation,
  and signature verification workflows
- Haddock coverage: 100% on most modules, 82% on Types (12% missing are
  internal Generic-derived Rep_* types)

</content>
</entry>
<entry>
<id>44a0e91dd1d55eafe0acd6b247490b5c4afd8390</id>
<published>2026-01-25T11:38:11Z</published>
<updated>2026-01-25T11:38:11Z</updated>
<title type="text">Enhance Haddock documentation</title>
<link rel="alternate" type="text/html" href="commit/44a0e91dd1d55eafe0acd6b247490b5c4afd8390.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 44a0e91dd1d55eafe0acd6b247490b5c4afd8390
parent f206f2b3870a44a6b8592edbcb681fb0902f0cca
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:38:11 +0400

Enhance Haddock documentation

- Add comprehensive module overview and usage examples to BOLT7.hs
- Add OPTIONS_HADDOCK prune to all public modules
- Document protocol overview, usage patterns, and code examples

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>f206f2b3870a44a6b8592edbcb681fb0902f0cca</id>
<published>2026-01-25T11:36:16Z</published>
<updated>2026-01-25T11:36:16Z</updated>
<title type="text">Merge impl/bench: Phase 7 complete benchmarks</title>
<link rel="alternate" type="text/html" href="commit/f206f2b3870a44a6b8592edbcb681fb0902f0cca.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit f206f2b3870a44a6b8592edbcb681fb0902f0cca
parent f2ac5cfa92776112fe03cf08487633e203e6eeeb
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:36:16 +0400

Merge impl/bench: Phase 7 complete benchmarks

Add comprehensive benchmark coverage for all BOLT #7 operations:

Criterion timing benchmarks (bench/Main.hs):
- All 9 message types: encode/decode
- SCID list encoding/decoding (100 items)
- Hash functions: channelAnnouncementHash, nodeAnnouncementHash,
  channelUpdateHash, channelUpdateChecksum
- Validation functions for all message types

Weigh allocation benchmarks (bench/Weight.hs):
- All message types: construct/encode/decode
- SCID list encoding/decoding
- Hash functions
- Validation functions

</content>
</entry>
<entry>
<id>3ffa1b251cb8fb921b8f769f53ba3249432b3be3</id>
<published>2026-01-25T11:35:59Z</published>
<updated>2026-01-25T11:35:59Z</updated>
<title type="text">Add comprehensive benchmarks for all BOLT #7 operations</title>
<link rel="alternate" type="text/html" href="commit/3ffa1b251cb8fb921b8f769f53ba3249432b3be3.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 3ffa1b251cb8fb921b8f769f53ba3249432b3be3
parent f2ac5cfa92776112fe03cf08487633e203e6eeeb
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:35:59 +0400

Add comprehensive benchmarks for all BOLT #7 operations

- Add benchmarks for all 9 message types (encode/decode)
- Add benchmarks for SCID list encoding/decoding (100 items)
- Add benchmarks for signature hash functions
  - channelAnnouncementHash, nodeAnnouncementHash, channelUpdateHash
  - channelUpdateChecksum (CRC-32C)
- Add benchmarks for validation functions
- Update both criterion (timing) and weigh (allocation) benchmarks

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>f2ac5cfa92776112fe03cf08487633e203e6eeeb</id>
<published>2026-01-25T11:27:37Z</published>
<updated>2026-01-25T11:27:37Z</updated>
<title type="text">Merge impl/validate: Phase 5 validation module</title>
<link rel="alternate" type="text/html" href="commit/f2ac5cfa92776112fe03cf08487633e203e6eeeb.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit f2ac5cfa92776112fe03cf08487633e203e6eeeb
parent 47fc2e8a6671ba98336b3d1a18a2011b42a6d605
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:27:37 +0400

Merge impl/validate: Phase 5 validation module

Phase 5 of IMPL1 implementation plan - add validation module.

New module:
- Validate: Message validation functions per BOLT #7 spec

Validation functions:
- validateChannelAnnouncement: node_id_1 &lt; node_id_2
- validateNodeAnnouncement: feature bit validation
- validateChannelUpdate: htlc amount constraints
- validateQueryChannelRange: block range overflow check
- validateReplyChannelRange: SCID ordering

All 49 tests pass.

</content>
</entry>
<entry>
<id>f696a7f98d3742a68c66e64ee6d01214397cbd8e</id>
<published>2026-01-25T11:26:16Z</published>
<updated>2026-01-25T11:26:16Z</updated>
<title type="text">Phase 5: Add validation module</title>
<link rel="alternate" type="text/html" href="commit/f696a7f98d3742a68c66e64ee6d01214397cbd8e.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit f696a7f98d3742a68c66e64ee6d01214397cbd8e
parent 47fc2e8a6671ba98336b3d1a18a2011b42a6d605
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:26:16 +0400

Phase 5: Add validation module

Add Validate module with message validation functions:
- validateChannelAnnouncement: check node_id ordering
- validateNodeAnnouncement: feature bit validation (placeholder)
- validateChannelUpdate: check htlc_minimum_msat &lt;= htlc_maximum_msat
- validateQueryChannelRange: check block range overflow
- validateReplyChannelRange: SCID ordering check (placeholder)

Add ValidationError type for structured error reporting.

Add validation tests:
- Channel announcement valid/invalid node_id order
- Channel update valid/invalid htlc amounts
- Query channel range valid/overflow

All 49 tests pass.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>47fc2e8a6671ba98336b3d1a18a2011b42a6d605</id>
<published>2026-01-25T11:23:58Z</published>
<updated>2026-01-25T11:23:58Z</updated>
<title type="text">Merge impl/hash: Phase 4 signature hash and checksum</title>
<link rel="alternate" type="text/html" href="commit/47fc2e8a6671ba98336b3d1a18a2011b42a6d605.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 47fc2e8a6671ba98336b3d1a18a2011b42a6d605
parent 0c4cf4e90876f7fbcc3c1ed10e12e0a24067f1fe
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:23:58 +0400

Merge impl/hash: Phase 4 signature hash and checksum

Phase 4 of IMPL1 implementation plan - add signature hash and
checksum computation.

New modules:
- CRC32C: Pure Haskell CRC-32C (Castagnoli) implementation
- Hash: Signature verification hashes and checksums

New functions:
- crc32c: CRC-32C computation
- channelAnnouncementHash: double-SHA256 for channel_announcement
- nodeAnnouncementHash: double-SHA256 for node_announcement
- channelUpdateHash: double-SHA256 for channel_update
- channelUpdateChecksum: CRC-32C for reply_channel_range checksums

Dependencies:
- Added ppad-sha256 for cryptographic hash computation

All 43 tests pass.

</content>
</entry>
<entry>
<id>4b9ae7011c609655b2d5c14038617dc56b358d44</id>
<published>2026-01-25T11:23:28Z</published>
<updated>2026-01-25T11:23:28Z</updated>
<title type="text">Phase 4: Add signature hash and checksum computation</title>
<link rel="alternate" type="text/html" href="commit/4b9ae7011c609655b2d5c14038617dc56b358d44.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 4b9ae7011c609655b2d5c14038617dc56b358d44
parent 0c4cf4e90876f7fbcc3c1ed10e12e0a24067f1fe
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:23:28 +0400

Phase 4: Add signature hash and checksum computation

Add CRC32C module:
- Pure Haskell implementation of CRC-32C (Castagnoli polynomial)
- Used for channel_update checksums in reply_channel_range

Add Hash module:
- channelAnnouncementHash: double-SHA256 for channel_announcement
- nodeAnnouncementHash: double-SHA256 for node_announcement
- channelUpdateHash: double-SHA256 for channel_update
- channelUpdateChecksum: CRC-32C excluding signature and timestamp

Add ppad-sha256 dependency for hash computation.

Add tests:
- CRC32C known test vectors
- Hash function output length verification
- Checksum consistency and timestamp invariance

All 43 tests pass.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>0c4cf4e90876f7fbcc3c1ed10e12e0a24067f1fe</id>
<published>2026-01-25T11:19:52Z</published>
<updated>2026-01-25T11:19:52Z</updated>
<title type="text">Merge impl/codec: Phase 3 Codec module completion</title>
<link rel="alternate" type="text/html" href="commit/0c4cf4e90876f7fbcc3c1ed10e12e0a24067f1fe.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 0c4cf4e90876f7fbcc3c1ed10e12e0a24067f1fe
parent 07341e4e7f4546a61fb5e667660c04e02b6ba42b
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:19:52 +0400

Merge impl/codec: Phase 3 Codec module completion

Phase 3 of IMPL1 implementation plan - complete Codec module.

New functionality:
- encodeShortChannelIdList: encode list of SCIDs as encoded_short_ids
- decodeShortChannelIdList: decode encoded_short_ids to SCID list

The core encode/decode functions for all 9 message types were already
implemented. This phase adds the SCID list helpers needed for query
message payloads.

All 36 tests pass.

</content>
</entry>
<entry>
<id>6408ff8c1bceb5669220e5a2617bd16e0709a3c9</id>
<published>2026-01-25T11:18:08Z</published>
<updated>2026-01-25T11:18:08Z</updated>
<title type="text">Phase 3: Add SCID list encoding helpers</title>
<link rel="alternate" type="text/html" href="commit/6408ff8c1bceb5669220e5a2617bd16e0709a3c9.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 6408ff8c1bceb5669220e5a2617bd16e0709a3c9
parent 07341e4e7f4546a61fb5e667660c04e02b6ba42b
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:18:08 +0400

Phase 3: Add SCID list encoding helpers

Add encodeShortChannelIdList/decodeShortChannelIdList for working with
encoded_short_ids data in query messages.

- Encoding type 0 (uncompressed) is supported
- Unknown encoding types are rejected
- Functions work with the raw encoded_short_ids payload format

Add tests for SCID list encoding:
- Empty list roundtrip
- Single and multiple SCID roundtrip
- Format verification (encoding type byte)
- Unknown encoding type rejection

All 36 tests pass.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>07341e4e7f4546a61fb5e667660c04e02b6ba42b</id>
<published>2026-01-25T11:16:07Z</published>
<updated>2026-01-25T11:16:07Z</updated>
<title type="text">Merge impl/types: Phase 2 Types module completion</title>
<link rel="alternate" type="text/html" href="commit/07341e4e7f4546a61fb5e667660c04e02b6ba42b.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 07341e4e7f4546a61fb5e667660c04e02b6ba42b
parent 9d7951bead7f00e5f4c1ad2067cb1f543b7af9d0
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:16:07 +0400

Merge impl/types: Phase 2 Types module completion

Phase 2 of IMPL1 implementation plan - complete Types module.

New functionality:
- mkShortChannelId: construct SCID from components
- formatScid: human-readable &quot;block x tx x output&quot; format
- mainnetChainHash: Bitcoin mainnet chain hash constant
- NodeId Ord instance: lexicographic comparison

All 31 tests pass.

</content>
</entry>
<entry>
<id>7ce163855ecf9ddc4fd69a0572d4310a9ca8545c</id>
<published>2026-01-25T11:12:52Z</published>
<updated>2026-01-25T11:12:52Z</updated>
<title type="text">Phase 2: Complete Types module</title>
<link rel="alternate" type="text/html" href="commit/7ce163855ecf9ddc4fd69a0572d4310a9ca8545c.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 7ce163855ecf9ddc4fd69a0572d4310a9ca8545c
parent 9d7951bead7f00e5f4c1ad2067cb1f543b7af9d0
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:12:52 +0400

Phase 2: Complete Types module

Add ShortChannelId helpers:
- mkShortChannelId: construct from block/tx/output components
- formatScid: human-readable &quot;539268x845x1&quot; format

Add Bitcoin mainnet chain hash constant (mainnetChainHash).

Add Ord instance for NodeId (lexicographic comparison required by
spec for channel announcements where node_id_1 &lt; node_id_2).

Add tests for new functionality:
- mkShortChannelId roundtrip
- formatScid formatting
- mainnetChainHash length
- NodeId ordering

All 31 tests pass.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>9d7951bead7f00e5f4c1ad2067cb1f543b7af9d0</id>
<published>2026-01-25T11:09:21Z</published>
<updated>2026-01-25T11:09:21Z</updated>
<title type="text">Merge impl/build-fix: Phase 1 skeleton fixes</title>
<link rel="alternate" type="text/html" href="commit/9d7951bead7f00e5f4c1ad2067cb1f543b7af9d0.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 9d7951bead7f00e5f4c1ad2067cb1f543b7af9d0
parent a090604b82f24d72328a4e58b47a2e912fb93d2e
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:09:21 +0400

Merge impl/build-fix: Phase 1 skeleton fixes

Phase 1 of IMPL1 implementation plan - fix skeleton build errors.

Changes:
- Fix bolt1 API usage (unsafeTlvStream, Prim encode/decode functions)
- Add NFData instances for EncodeError/DecodeError
- Clean up unused imports

All 26 tests pass. Library and benchmarks build cleanly.

</content>
</entry>
<entry>
<id>04eb598fb74908ec1e9a941e0f701d1215acc0a7</id>
<published>2026-01-25T11:04:34Z</published>
<updated>2026-01-25T11:04:34Z</updated>
<title type="text">Phase 1: Fix skeleton build errors</title>
<link rel="alternate" type="text/html" href="commit/04eb598fb74908ec1e9a941e0f701d1215acc0a7.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit 04eb598fb74908ec1e9a941e0f701d1215acc0a7
parent a090604b82f24d72328a4e58b47a2e912fb93d2e
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 15:04:34 +0400

Phase 1: Fix skeleton build errors

Fix bolt1 API usage:
- Use unsafeTlvStream [] instead of TlvStream []
- Use correct Prim.encodeU16/decodeU16 API (not u16/word16)
- Fix decodeTlvStreamRaw pattern matching (returns Either, not tuple)

Add NFData instances for EncodeError and DecodeError to support
criterion/weigh benchmarks.

Remove unused imports (Word64, Word8, Base16, TlvStream).

Library, tests, and benchmarks all build cleanly.
All 26 tests pass.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>a090604b82f24d72328a4e58b47a2e912fb93d2e</id>
<published>2026-01-25T10:50:30Z</published>
<updated>2026-01-25T10:50:30Z</updated>
<title type="text">Update IMPL1: CRC32C as internal helper module</title>
<link rel="alternate" type="text/html" href="commit/a090604b82f24d72328a4e58b47a2e912fb93d2e.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit a090604b82f24d72328a4e58b47a2e912fb93d2e
parent e1c410743f7c24488045c7ba8c6347c84c45c8e8
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 14:50:30 +0400

Update IMPL1: CRC32C as internal helper module

Resolve CRC32C dependency question: implement in internal module
Lightning.Protocol.BOLT7.CRC32C, refactor to separate library later
if needed.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e1c410743f7c24488045c7ba8c6347c84c45c8e8</id>
<published>2026-01-25T10:43:40Z</published>
<updated>2026-01-25T10:43:40Z</updated>
<title type="text">Add implementation plan and cache BOLT #7 spec</title>
<link rel="alternate" type="text/html" href="commit/e1c410743f7c24488045c7ba8c6347c84c45c8e8.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit e1c410743f7c24488045c7ba8c6347c84c45c8e8
parent b93640a812a1f57867b89299ce9c08179804a20b
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 14:43:40 +0400

Add implementation plan and cache BOLT #7 spec

- plans/IMPL1.md: 8-phase implementation plan covering types, codec,
  signature hashing, validation, tests, benchmarks, and docs
- etc/07-routing-gossip.md: cached BOLT #7 specification

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b93640a812a1f57867b89299ce9c08179804a20b</id>
<published>2026-01-25T10:37:02Z</published>
<updated>2026-01-25T10:37:02Z</updated>
<title type="text">Initial project skeleton for BOLT #7 implementation</title>
<link rel="alternate" type="text/html" href="commit/b93640a812a1f57867b89299ce9c08179804a20b.html" />
<author>
<name>Jared Tobin</name>
<email>jared@jtobin.io</email>
</author>
<content type="text">commit b93640a812a1f57867b89299ce9c08179804a20b
Author: Jared Tobin &lt;jared@jtobin.io&gt;
Date:   Sun, 25 Jan 2026 14:37:02 +0400

Initial project skeleton for BOLT #7 implementation

Add library structure for Lightning Network routing gossip protocol:

- Types: ChainHash, ShortChannelId, NodeId, Signature, Point,
  RgbColor, Alias, FeatureBits, Address types
- Messages: All 9 BOLT #7 message types (channel_announcement,
  node_announcement, channel_update, announcement_signatures,
  query_short_channel_ids, reply_short_channel_ids_end,
  query_channel_range, reply_channel_range, gossip_timestamp_filter)
- Codec: Encode/decode functions for all message types
- Test skeleton with roundtrip tests
- Benchmark skeletons (criterion + weigh)

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
</feed>
