What changed, and why it matters
This commit only updates user-facing documentation. It replaces hardcoded block heights with a new 'latest' shortcut URL for a third-party header-import service and removes an outdated warning about a broken testnet3 file. No code was changed, and there is no security issue in the commit itself.
No security action required. Treat as a normal documentation update.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff is limited to docs/neutrino_headers_import.md. It documents the new /import/latest endpoints on block-dn.org, removes the shell snippet that computed the end_block from /status, updates example lnd command lines and lnd.conf stanzas to use /latest, fixes a flag typo (–bitcoin.testnet → –bitcoin.testnet4), and removes the warning about a structurally broken testnet3 4900000 header file. No source code, configuration defaults, or cryptographic logic is modified.
Changed components
docs/neutrino_headers_import.mdInspect captured patch +21 / −33
diff --git a/docs/neutrino_headers_import.md b/docs/neutrino_headers_import.md
index 17093f8..f7364ee 100644
--- a/docs/neutrino_headers_import.md
+++ b/docs/neutrino_headers_import.md
@@ -52,26 +52,21 @@ whether the value starts with `http`.
The [block-dn.org](https://github.com/guggero/block-dn) service publishes
pre-built header files for multiple Bitcoin networks. Each network exposes
-two endpoints:
+four endpoints:
-- `/headers/import/<end_block>` — block headers.
-- `/filter-headers/import/<end_block>` — compact filter headers.
+- `/headers/import/<end_block>` — block headers up to a specific block.
+- `/headers/import/latest` — block headers up to the latest block.
+- `/filter-headers/import/<end_block>` — compact filter headers up to a specific
+ block.
+- `/filter-headers/import/latest` — compact filter headers up to the latest
+ block.
`<end_block>` is **non-inclusive** and must be divisible by the service's
`entries_per_header_file` (currently `100,000`). It identifies the highest
such boundary at or below the current chain tip.
Each service also publishes a `/status` JSON endpoint that reports
-`best_block_height` and `entries_per_header_file`, so the correct
-`<end_block>` for the moment can be computed dynamically:
-
-```sh
-end_block=$(curl -fsSL https://block-dn.org/status | \
- jq -r '((.best_block_height / .entries_per_header_file) | floor) * .entries_per_header_file')
-echo "$end_block"
-```
-
-Known-good targets at the time of writing are listed per-network below.
+`best_block_height` and `entries_per_header_file`.
#### Mainnet
@@ -84,8 +79,8 @@ lnd \
--bitcoin.mainnet \
--bitcoin.node=neutrino \
--fee.url=https://nodes.lightning.computer/fees/v1/btc-fee-estimates.json \
- --neutrino.blockheaderssource=https://block-dn.org/headers/import/900000 \
- --neutrino.filterheaderssource=https://block-dn.org/filter-headers/import/900000
+ --neutrino.blockheaderssource=https://block-dn.org/headers/import/latest \
+ --neutrino.filterheaderssource=https://block-dn.org/filter-headers/import/latest
```
The equivalent `lnd.conf` stanza:
@@ -99,8 +94,8 @@ bitcoin.mainnet=true
bitcoin.node=neutrino
[neutrino]
-neutrino.blockheaderssource=https://block-dn.org/headers/import/900000
-neutrino.filterheaderssource=https://block-dn.org/filter-headers/import/900000
+neutrino.blockheaderssource=https://block-dn.org/headers/import/latest
+neutrino.filterheaderssource=https://block-dn.org/filter-headers/import/latest
```
Without `fee.url`, lnd will complete the header import and then exit with
@@ -112,25 +107,18 @@ Without `fee.url`, lnd will complete the header import and then exit with
lnd \
--bitcoin.testnet \
--bitcoin.node=neutrino \
- --neutrino.blockheaderssource=https://testnet3.block-dn.org/headers/import/4700000 \
- --neutrino.filterheaderssource=https://testnet3.block-dn.org/filter-headers/import/4700000
+ --neutrino.blockheaderssource=https://testnet3.block-dn.org/headers/import/latest \
+ --neutrino.filterheaderssource=https://testnet3.block-dn.org/filter-headers/import/latest
```
-> ⚠️ The current testnet3 `4900000` block-headers file on block-dn.org is
-> structurally broken: the chain linkage breaks inside the file around
-> height `4,783,810` (the recorded `prev` hash at `4,783,810` does not
-> match the hash at `4,783,809`). Until the source is regenerated, pin
-> testnet3 imports to `4700000`, which is the most recent target
-> validated end-to-end against this build.
-
#### Testnet4
```sh
lnd \
- --bitcoin.testnet \
+ --bitcoin.testnet4 \
--bitcoin.node=neutrino \
- --neutrino.blockheaderssource=https://testnet4.block-dn.org/headers/import/200000 \
- --neutrino.filterheaderssource=https://testnet4.block-dn.org/filter-headers/import/200000
+ --neutrino.blockheaderssource=https://testnet4.block-dn.org/headers/import/latest \
+ --neutrino.filterheaderssource=https://testnet4.block-dn.org/filter-headers/import/latest
```
#### Signet
@@ -139,8 +127,8 @@ lnd \
lnd \
--bitcoin.signet \
--bitcoin.node=neutrino \
- --neutrino.blockheaderssource=https://signet.block-dn.org/headers/import/200000 \
- --neutrino.filterheaderssource=https://signet.block-dn.org/filter-headers/import/200000
+ --neutrino.blockheaderssource=https://signet.block-dn.org/headers/import/latest \
+ --neutrino.filterheaderssource=https://signet.block-dn.org/filter-headers/import/latest
```
Current service status and available end-block targets per network:
@@ -181,8 +169,8 @@ lnd \
--bitcoin.mainnet \
--bitcoin.node=neutrino \
--fee.url=https://nodes.lightning.computer/fees/v1/btc-fee-estimates.json \
- --neutrino.blockheaderssource=https://block-dn.org/headers/import/900000 \
- --neutrino.filterheaderssource=https://block-dn.org/filter-headers/import/900000
+ --neutrino.blockheaderssource=https://block-dn.org/headers/import/latest \
+ --neutrino.filterheaderssource=https://block-dn.org/filter-headers/import/latest
```
> ⚠️ `--configfile=/dev/null`, `--lnddir=/tmp/...`, `--no-macaroons`, and
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.