LND fork for the Bitcoin BLAKE2b chain: isolated from the SHA256d network by design
  • Go 99.3%
  • Shell 0.5%
  • Makefile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-08 05:20:38 -05:00
.claude/commands multi: add issue dedupe command and workflow 2026-02-11 13:06:42 +02:00
.gemini .gemini: ignore char wrapping during code review 2025-09-01 10:16:44 +02:00
.github offers: a chain-less invoice request or invoice is for mainnet's genesis, as an offer is 2026-10-03 10:20:07 -05:00
.vscode meta: add build tags to workspace settings for lsp support 2023-11-14 17:10:31 -08:00
actor build: bump Go versions 2026-08-19 11:17:05 -03:00
aezeed multi: Fix typos and grammar in multiple docs 2024-07-22 20:08:12 -07:00
aliasmgr multi: add base lookup option to AddLocalAlias 2025-09-25 11:15:27 +02:00
amp multi: fix make fmt 2022-08-23 22:10:24 +08:00
autopilot graph/db: add v2 fields to ChannelEdgePolicy model 2026-02-13 07:21:24 +02:00
batch multi: context.Background() -> t.Context() 2025-08-30 14:13:44 -03:00
blockcache blockcache: fix heap escape in GetBlock 2024-01-23 17:08:57 +08:00
bolt12 bridgerpc: what the review found 2026-10-03 05:22:15 -05:00
brontide brontide: clarify InitializeKey error-discard invariant 2026-08-20 19:21:41 -03:00
buffer lnwire: remove unused MaxMessagePayload const 2021-08-10 05:36:07 +08:00
build build: 0.21.3-beta-blake2b.17 2026-10-04 22:19:03 -05:00
cert build: bump Go versions 2026-08-19 11:17:05 -03:00
chainio chainio: use package logger instead of instance logger 2025-06-18 19:43:27 +08:00
chainntnfs mod+multi: bump neutrino to v0.16.2, btcwallet to 70a94ea39e9c 2026-03-10 17:19:29 -05:00
chainparams sqldb: add validate-network unit tests 2026-04-10 12:03:54 +02:00
chainreg chainreg: gofmt 2026-10-01 21:41:28 -05:00
chanacceptor chanacceptor: report a unified channel by its commitment type 2026-09-27 21:39:37 -05:00
chanbackup chanbackup: record the unified signature hash in the backup 2026-09-15 18:56:08 -05:00
chanfitness chanfitness: send peer online event when we see the first channel 2025-09-18 22:18:28 +08:00
channeldb channeldb: migration 37, what migration 36 left under the old chain_hash 2026-09-27 21:39:37 -05:00
channelnotifier channelnotifier: add NotifyEarlyClosedChannelEvent 2026-05-22 01:30:29 +00:00
clock build: bump Go versions 2026-08-19 11:17:05 -03:00
cluster multi: context.Background() -> t.Context() 2025-08-30 14:13:44 -03:00
cmd lncli bridge code: the label defaults to this node's alias 2026-10-04 19:38:10 -05:00
contractcourt contractcourt: fix stuck HTLC after confirmation 2026-08-29 08:27:36 +00:00
contrib offers: a chain-less invoice request or invoice is for mainnet's genesis, as an offer is 2026-10-03 10:20:07 -05:00
discovery discovery: re-sign from processRejectedEdge, and only for own channels 2026-09-30 19:28:24 -05:00
docker build: Go 1.26.8 2026-09-30 06:40:44 -05:00
docs docs/native-ubuntu.md: a first peer to connect to 2026-10-08 05:18:54 -05:00
feature feature: option_unified_sigs depends on option_blake2b 2026-09-30 05:54:45 -05:00
fn build: bump Go versions 2026-08-19 11:17:05 -03:00
funding funding: the peer-bit test uses realistic feature sets 2026-09-30 07:52:07 -05:00
graph graph/db: a replaced edge proof evicts the cached channel 2026-09-30 06:02:26 -05:00
healthcheck build: bump Go versions 2026-08-19 11:17:05 -03:00
htlcswitch htlcswitch: bound intercepted auto-fail height 2026-08-07 02:54:18 +00:00
input lnwallet: negotiate a channel whose bilateral signatures bind to this chain 2026-09-15 18:44:49 -05:00
internal/musig2v040 input+signrpc+lnwallet+multi: implement combined nonce support 2025-12-10 07:15:06 +02:00
invoices invoices: migrate legacy AMP invoice HTLCs 2026-08-20 19:57:41 +00:00
itest itest: cover XCreateAccount end to end 2026-08-17 18:01:56 -03:00
keychain lnwallet: use the wallet interface 2025-08-26 20:36:21 +08:00
kvdb build: bump Go versions 2026-08-19 11:17:05 -03:00
labels multi: fix make fmt 2022-08-23 22:10:24 +08:00
legacychain netann, discovery: gossip signed under the withdrawn chain_hash still counts 2026-09-27 21:39:37 -05:00
lncfg Take onion messages from peers without channels, and reply where the request went 2026-09-14 13:03:05 -05:00
lnencrypt lnencrypt: add ECDHEncryptor 2024-01-09 12:32:38 +01:00
lnmock lnwallet+walletrpc: add SubmitPackage for v3 CPFP package relay 2026-08-05 15:57:36 -07:00
lnpeer multi: extend lnpeer.Peer interface with Disconnect function 2024-08-27 14:11:06 -04:00
lnrpc bridgerpc: gofmt config_active.go 2026-10-08 05:20:38 -05:00
lntest itest: cover XCreateAccount end to end 2026-08-17 18:01:56 -03:00
lntypes refactor: replace min/max helpers with built-in min/max 2025-02-06 09:45:10 +08:00
lnutils peer: gate onion message ingress on having an open channel 2026-04-15 13:23:50 -07:00
lnwallet lnrpc, docs, lnwallet: say what the new fields mean when they are empty 2026-09-28 18:53:47 -05:00
lnwire lnwire: number ErrPeerNotBlake2b clear of upstream's funding errors 2026-09-30 07:49:06 -05:00
macaroons multi: golang.org/x/net/context -> context 2025-08-30 14:13:44 -03:00
make bridgerpc: a payer API, a rate that can change, and limits per participant 2026-10-02 19:14:34 -05:00
mobile offers: mint, list and decode BOLT 12 offers 2026-09-13 19:48:26 -05:00
monitoring multi: start updating various loggers to use the new v2 type 2024-10-22 17:03:55 +02:00
msgmux multi: actor-based onion message forwarding 2026-03-02 15:46:21 +01:00
multimutex multimutex: add unit tests 2025-03-24 00:40:35 -03:00
nat multi: Fix typos [skip ci] 2022-01-24 12:19:02 +02:00
netann netann: tell a proof signed under the withdrawn chain_hash apart 2026-09-30 06:24:45 -05:00
offerpay bolt12: an absent chain is ours where our chain is Bitcoin's genesis 2026-10-03 04:36:28 -05:00
offers offers: a chain-less invoice request or invoice is for mainnet's genesis, as an offer is 2026-10-03 10:20:07 -05:00
offerserve offers: no invoice path through a peer that cannot pay this node now 2026-10-03 15:10:06 -05:00
onionmessage Take onion messages from peers without channels, and reply where the request went 2026-09-14 13:03:05 -05:00
onionmsg Take onion messages from peers without channels, and reply where the request went 2026-09-14 13:03:05 -05:00
payments/db htlcswitch/hop: decode next_node_id blinded hops 2026-07-30 11:17:30 -03:00
peer config: keep silent peers by default, now that bit 68 separates the chains 2026-09-17 11:07:25 -05:00
peernotifier multi: start updating various loggers to use the new v2 type 2024-10-22 17:03:55 +02:00
pool multi: fix fmt.Errorf error wrapping 2024-02-27 11:13:40 +00:00
protofsm protofsm: implement the actor.ActorBehavior interface for StateMachine 2026-07-14 21:54:12 +00:00
queue queue: synchronize circular buffer 2026-08-28 15:18:36 -03:00
record htlcswitch/hop: decode next_node_id blinded hops 2026-07-30 11:17:30 -03:00
routing Pay through blinded paths that start at this node, in the router 2026-09-14 03:38:10 -05:00
rpcperms rpcperms: recover RPC handler panics 2026-06-22 23:43:51 +00:00
scripts native-ubuntu: the web dashboard, with lnd and it as systemd user services 2026-10-08 01:08:10 -05:00
shachain multi: use the "errors" package everywhere 2025-06-30 09:46:55 +02:00
signal multi: start updating various loggers to use the new v2 type 2024-10-22 17:03:55 +02:00
sqldb build: bump Go versions 2026-08-19 11:17:05 -03:00
subscribe trivial: Fix spelling errors 2023-09-21 22:35:33 -04:00
sweep sweep: wait for the spend of an input the backend says is missing 2026-09-27 22:38:45 -05:00
ticker build: bump Go versions 2026-08-19 11:17:05 -03:00
tlv build: bump Go versions 2026-08-19 11:17:05 -03:00
tools build: Go 1.26.8 2026-09-30 06:40:44 -05:00
tor build: bump Go versions 2026-08-19 11:17:05 -03:00
walletunlocker multi: context.Background() -> t.Context() 2025-08-30 14:13:44 -03:00
watchtower wtclient: warn when a tower does not set the blake2b bit 2026-09-30 18:47:33 -05:00
zpay32 zpay32: try the withdrawn invoice prefix before the standard one 2026-09-27 21:39:37 -05:00
.editorconfig .editorconfig: add editor settings for most editors 2022-07-06 13:33:02 +02:00
.gitignore Follow the Bitcoin BLAKE2b chain: identity, backend check, isolation 2026-09-12 23:45:05 -05:00
.golangci.yml build: Go 1.26.8 2026-09-30 06:40:44 -05:00
.protolint.yaml protolint: configure protolint and fix the protolinting issues 2024-01-22 22:00:00 +02:00
accessman.go accessman: fix structured logging formatting 2025-07-01 07:43:26 +02:00
accessman_test.go multi: context.Background() -> t.Context() 2025-08-30 14:13:44 -03:00
channel_notifier.go multi: thread context through to AddrsForNode 2025-06-17 19:20:59 +02:00
chanrestore.go chanrestore: store a channel restored from an old backup under our chain 2026-09-27 21:39:37 -05:00
chanrestore_blake2b_test.go chanrestore: store a channel restored from an old backup under our chain 2026-09-27 21:39:37 -05:00
chanrestore_test.go Adopt the chain_hash reversal, and name the chains by their proof of work 2026-09-17 06:10:19 -05:00
config.go config: keep silent peers by default, now that bit 68 separates the chains 2026-09-17 11:07:25 -05:00
config_blake2b.go Withdraw the chain's own BOLT 11 invoice prefix 2026-09-19 22:35:52 -05:00
config_blake2b_test.go Withdraw the chain's own BOLT 11 invoice prefix 2026-09-19 22:35:52 -05:00
config_bridge_active.go bridgerpc: what the release review found 2026-10-04 22:09:20 -05:00
config_bridge_active_test.go bridgerpc: a fixed rate only on test networks 2026-10-04 17:08:23 -05:00
config_bridge_default.go bridgerpc: the configuration, and refusing an incoherent one at startup 2026-09-16 19:39:23 -05:00
config_builder.go Follow the Bitcoin BLAKE2b chain: identity, backend check, isolation 2026-09-12 23:45:05 -05:00
config_onion_ratelimit_test.go lncfg+config: add tunable onion message rate limit options 2026-04-15 13:23:50 -07:00
config_prod.go lnd: add clarifiying comment when introducing a new db 2026-03-17 20:55:23 +01:00
config_test.go config: check cltv expiry policy range 2026-06-26 10:09:45 +00:00
config_test_native_sql.go lnd: use sql store for payments in normal build 2026-03-17 20:55:23 +01:00
dev.Dockerfile build: Go 1.26.8 2026-09-30 06:40:44 -05:00
doc.go lnd: rename package main->lnd 2019-04-23 20:57:33 +02:00
Dockerfile build: Go 1.26.8 2026-09-30 06:40:44 -05:00
go.mod build: 0.21.3-beta-blake2b.17 2026-10-04 22:19:03 -05:00
go.sum build: 0.21.3-beta-blake2b.17 2026-10-04 22:19:03 -05:00
intercepted_forward.go multi: update to fn v2 2024-12-04 13:19:00 -07:00
LICENSE multi: Update Licenses to 2022 [skip ci] 2022-02-09 00:25:20 +02:00
lnd.go Follow the Bitcoin BLAKE2b chain: identity, backend check, isolation 2026-09-12 23:45:05 -05:00
log.go bridgerpc: the node-side dependencies a cross-chain bridge needs 2026-09-16 15:35:42 -05:00
logo.png README: add logo to top portion of page 2017-09-29 14:06:31 -07:00
Makefile build: Go 1.26.8 2026-09-30 06:40:44 -05:00
pilot.go Follow the Bitcoin BLAKE2b chain: identity, backend check, isolation 2026-09-12 23:45:05 -05:00
README.md docs: run Lightning Fork from source next to a native Knots node 2026-10-08 00:37:31 -05:00
rpcserver.go btcwallet, rpcwallet: the immature coinbase balance in one pass, everywhere 2026-09-28 18:53:47 -05:00
rpcserver_test.go multi: update to fn v2 2024-12-04 13:19:00 -07:00
sample-lnd.conf config: keep silent peers by default, now that bit 68 separates the chains 2026-09-17 11:07:25 -05:00
SECURITY.md security: update security@ PGP key 2025-11-11 14:44:50 -08:00
server.go offers: no invoice path through a peer that cannot pay this node now 2026-10-03 15:10:06 -05:00
server_blake2b.go docs, server, build: the rest of what the review found 2026-09-30 18:49:04 -05:00
server_blake2b_test.go Report the block-size reduction, and warn about channels from before the fork 2026-09-13 02:33:03 -05:00
server_bridge.go bridgerpc: trade at the market's rate, read live; a fee per direction 2026-10-04 16:25:15 -05:00
server_bridge_test.go bridgerpc: what the supervised node's review found 2026-10-04 00:25:30 -05:00
server_test.go multi: drop tor v2 onion production, keep wire codec faithful 2026-05-26 10:25:30 +00:00
sqlc.yaml multi: add sqlc support 2023-07-10 17:36:58 -07:00
subrpcserver_config.go bridgerpc: the node-side dependencies a cross-chain bridge needs 2026-09-16 15:35:42 -05:00
sweeper_wallet.go lnd: skip canceling rebroadcast for neutrino backend 2023-04-26 10:38:13 +08:00
tls_manager.go tls_manager.go: handle case when either TLS pair files exist 2025-11-27 13:33:14 +00:00
tls_manager_test.go tls_manager_test.go: reproduce partial tls files handling 2025-11-27 13:33:06 +00:00
types.go cmd: make types.go accessible in lnd package 2026-01-07 10:25:29 +01:00
witness_beacon.go witness beacon: report node-ID next hop to the on-chain HTLC interceptor 2026-07-30 11:47:14 -03:00
witness_beacon_test.go witness beacon: report node-ID next hop to the on-chain HTLC interceptor 2026-07-30 11:47:14 -03:00

Lightning Network Daemon

Release build MIT licensed Irc Godoc Go Report Card

Lightning Fork

This is Lightning Fork (github.com/paulscode/lightning-fork), a fork of lnd that follows the Bitcoin BLAKE2b chain (Bitcoin Knots v29.4.1, mainnet activation at height 961640 on 2026-08-30). It refuses to run against a node on the SHA256d chain it shares a genesis block with, and refuses to connect to one. It does not refuse to pay one: an invoice carries nothing that says which of the two chains it belongs to, and what stops the payment is that the two graphs do not meet. Read docs/blake2b.md for what differs from lnd: the activation-header check, the init networks handshake, the feature bits, and the configuration options. It builds against paulscode/btcd-blake2b, which parses the 164-byte header and computes the BLAKE2b block id.

The identity constants another implementation needs to agree with are in docs/blake2b-chain-identity.md: the feature bit that says at init whether a node has upgraded, the gossip height floor, which signatures opt into SIGHASH_UNIFIED and under which channel type, and the same bit again in invoices and offers. chain_hash is the genesis hash both sides share. Section 8 of that document covers the two designs this daemon shipped and then withdrew, a chain_hash of its own and a BOLT 11 invoice prefix of its own, and what to do if you ran either.

The node mints BOLT 12 offers and serves and pays them over onion messages, which is how a mining pool that pays to offers pays a miner. Read docs/bolt12-offers.md.

To build it from source and run it next to a Bitcoin Knots node on your own Linux machine, follow docs/native-ubuntu.md (scripts/native-ubuntu.sh does the steps for you). On StartOS and Umbrel, install it from their app stores.

Everything below this section is the upstream lnd README.

The Lightning Network Daemon (lnd) - is a complete implementation of a Lightning Network node. lnd has several pluggable back-end chain services including btcd (a full-node), bitcoind, and neutrino (a new experimental light client). The project's codebase uses the btcsuite set of Bitcoin libraries, and also exports a large set of isolated re-usable Lightning Network related libraries within it. In the current state lnd is capable of:

  • Creating channels.
  • Closing channels.
  • Completely managing all channel states (including the exceptional ones!).
  • Maintaining a fully authenticated+validated channel graph.
  • Performing path finding within the network, passively forwarding incoming payments.
  • Sending outgoing onion-encrypted payments through the network.
  • Updating advertised fee schedules.
  • Automatic channel management (autopilot).

Lightning Network Specification Compliance

lnd fully conforms to the Lightning Network specification (BOLTs). BOLT stands for: Basis of Lightning Technology. The specifications are currently being drafted by several groups of implementers based around the world including the developers of lnd. The set of specification documents as well as our implementation of the specification are still a work-in-progress. With that said, the current status of lnd's BOLT compliance is:

  • BOLT 1: Base Protocol
  • BOLT 2: Peer Protocol for Channel Management
  • BOLT 3: Bitcoin Transaction and Script Formats
  • BOLT 4: Onion Routing Protocol
  • BOLT 5: Recommendations for On-chain Transaction Handling
  • BOLT 7: P2P Node and Channel Discovery
  • BOLT 8: Encrypted and Authenticated Transport
  • BOLT 9: Assigned Feature Flags
  • BOLT 10: DNS Bootstrap and Assisted Node Location
  • BOLT 11: Invoice Protocol for Lightning Payments

Developer Resources

The daemon has been designed to be as developer friendly as possible in order to facilitate application development on top of lnd. Two primary RPC interfaces are exported: an HTTP REST API, and a gRPC service. The exported APIs are not yet stable, so be warned: they may change drastically in the near future.

An automatically generated set of documentation for the RPC APIs can be found at api.lightning.community. A set of developer resources including guides, articles, example applications and community resources can be found at: docs.lightning.engineering.

Finally, we also have an active Slack where protocol developers, application developers, testers and users gather to discuss various aspects of lnd and also Lightning in general.

First-time contributors are highly encouraged to start with code review first, before creating their own Pull Requests.

Installation

In order to build from source, please see the installation instructions.

Docker

To run lnd from Docker, please see the main Docker instructions

IRC

  • irc.libera.chat
  • channel #lnd
  • webchat

Safety

When operating a mainnet lnd node, please refer to our operational safety guidelines. It is important to note that lnd is still beta software and that ignoring these operational guidelines can lead to loss of funds.

Security

The developers of lnd take security very seriously. The disclosure of security vulnerabilities helps us secure the health of lnd, privacy of our users, and also the health of the Lightning Network as a whole. If you find any issues regarding security or privacy, please disclose the information responsibly by sending an email to security at lightning dot engineering, preferably encrypted using our designated PGP key (91FE464CD75101DA6B6BAB60555C6465E5BCB3AF) which can be found here.

Further reading