Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
310 commits
Select commit Hold shift + click to select a range
4106a21
lightningd: add p2wpkh script for bip86 base
sangbida Jan 13, 2026
c175903
lightningd: use BIP86 derivation in p2wpkh_for_keyidx when available
sangbida Jan 13, 2026
5fdc56c
wallet/hsmd: fix signmessagewithkey for BIP86 wallets
sangbida Jan 13, 2026
e19fd5d
wallet: change dev_listaddrs to also list bip86 addresses
sangbida Jan 13, 2026
0269d0c
jsonrpc: fix recover command for BIP86 wallets
sangbida Jan 13, 2026
29465f5
wallet: use correct derivation for elements when using mnemonic hsm_s…
rustyrussell Jan 13, 2026
3f7565a
docker: Update Fedora base image to 40
ShahanaFarooqui Jan 15, 2026
ae0e108
doc: Update installation instruction on Fedora
ShahanaFarooqui Jan 15, 2026
9e49094
contrib: ignore cache when rebuilding docker builder images
endothermicdev Jan 15, 2026
12ccfb5
script: Add Fedora as target for SHASUMS verification
ShahanaFarooqui Jan 16, 2026
ec7d247
docker: Added fixed SOURCE_DATE_EPOCH flag for reproducible Fedora build
ShahanaFarooqui Jan 16, 2026
8bc2e76
msggen: add string_map type
daywalker90 Dec 22, 2025
d03cf82
clnrest: add clnrest-register-path method for dynamic paths
daywalker90 Jan 7, 2026
49049de
testing: Add TEST_LOG_IGNORE_ERRORS envvar to suppress logging errors
cdecker Jan 14, 2026
eae521b
chore: Ensure the logging library does not get upset when output capt…
cdecker Jan 14, 2026
6a1f467
doc: Add signmessagewithkey to generate documentation
ShahanaFarooqui Jan 6, 2026
79ffb3a
doc: Update json and markdowns to make them .mdx compatible
ShahanaFarooqui Jan 6, 2026
15081de
script: Change category slug for better Admin panel management
ShahanaFarooqui Jan 6, 2026
58a620a
script: API v2 accepts `position` param rather than `order`
ShahanaFarooqui Jan 6, 2026
9655f53
script: More error checks and logging
ShahanaFarooqui Jan 6, 2026
c8525a1
git: correctly mark contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py for…
rustyrussell Jan 20, 2026
9081499
libplugin: fix 'i-promise-to-fix-broken-api-user' parsing.
rustyrussell Jan 20, 2026
3af6fd2
doc: fix end deprecation date of `max_htlc_value_in_flight_msat`.
rustyrussell Jan 20, 2026
ee0175b
Makefile: update next and prev versions now we've released.
rustyrussell Jan 20, 2026
bcce29e
connectd: remove unused flag to connect_init.
rustyrussell Jan 20, 2026
af1c964
hsmd: remove unused "sign_local_htlc_tx" function which onchaind used…
rustyrussell Jan 20, 2026
9881e04
lightningd: remove the "listpeers.features.option_anchors_zero_fee_ht…
rustyrussell Jan 20, 2026
592f858
lightningd: remove `decodepay`.
rustyrussell Jan 20, 2026
9831467
lightningd: remove tx and txid fields from close response.
rustyrussell Jan 20, 2026
f8ef6e1
lightningd: removing comment insisting plugin hooks are an array of o…
rustyrussell Jan 20, 2026
95d8760
lightningd: remove support for long-deprecated old-style feerate resp…
rustyrussell Jan 20, 2026
d5f66ce
plugins: don't try to fetch max-locktime-blocks.
rustyrussell Jan 20, 2026
98c149c
devtools: Add shellcheck to pre-commit.
s373nZ Nov 29, 2024
a04fdb7
devtools: Add amount access check to pre-commit.
s373nZ Nov 30, 2024
6e50148
devtools: Add discouraged function check to pre-commit.
s373nZ Dec 1, 2024
969bd22
devtools: Add codespell to pre-commit.
s373nZ Dec 16, 2024
a22ba9b
devtools: Add doc JSON schema checks and formatting to pre-commit.
s373nZ Dec 17, 2024
e91625a
devtools: Add EOF fixer and trailing whitespace fix to pre-commit.
s373nZ Dec 9, 2025
2748295
devtools: Add `fix-style-errors` script by @sangbida.
s373nZ Dec 10, 2025
854dec0
devtools: Add pre-commit as a `dev` Python package.
s373nZ Dec 10, 2025
2bc67c3
doc: Add pre-commit section to Contributor Workflow documentation.
s373nZ Dec 10, 2025
ee94ba3
devtools: Add clang-format to pre-commit.
s373nZ Dec 12, 2025
70fe025
build: Replace PLUGIN_RENEPAY_HDRS json.c with json.h in Makefile.
s373nZ Dec 15, 2025
5ca181e
devtools: Add custom `include-order-fixer` to pre-commit.
s373nZ Dec 13, 2025
623300d
devtools: Add commitlint to pre-commit.
s373nZ Jan 12, 2026
2fa0fee
devtools: Replace Ruff with Flake8 in pre-commit.
s373nZ Jan 12, 2026
eba3305
devtools: Set pre-commit default versions for Python and NodeJS.
s373nZ Jan 22, 2026
cef86d1
gossmap: don't log every time we don't like a cupdate.
rustyrussell Jan 20, 2026
e383e14
connectd: don't be That Node when someone is gossipping crap.
rustyrussell Jan 20, 2026
16e9116
lightningd: move log_prefix and log_entry struct definitions into log.c.
rustyrussell Jan 20, 2026
6749c65
getlog: fix schema.
rustyrussell Jan 20, 2026
4d8f923
logging: switch to a simple ringbuffer.
rustyrussell Jan 20, 2026
6a9bdb8
pytest: determine scid direction dynamically
sangbida Jan 20, 2026
02bfa41
pyln-testing: add old_hsmsecret param to get_node.
sangbida Jan 20, 2026
81d1d4a
pytest: use old hsm secret whenever a canned database files is used
sangbida Jan 20, 2026
c7973b8
pytest: make sure to use old_hsmsecret on downgrade tests.
rustyrussell Jan 20, 2026
cb51b7e
pytest: test names for new nodes.
rustyrussell Jan 20, 2026
c076a10
test: use old hsmsecret format for hardcoded onion message
sangbida Jan 20, 2026
9d331f5
test: mark bookkeeper test to use old hsm secret
sangbida Jan 20, 2026
c653955
tests: update test so use both node ids
sangbida Jan 20, 2026
dae9140
pytest: parameterize test_payerkey and test_exposesecret.
rustyrussell Jan 20, 2026
129b207
pytest: test upfront_shutdown_script with new-style hsm_secret too.
sangbida Jan 20, 2026
b2b03e6
pytest: parameterize test_showrunes.
rustyrussell Jan 20, 2026
12bc5b0
pytest: use hsmtool's getsecret instead of deprecated getcodexsecret,…
rustyrussell Jan 20, 2026
1279a58
pytest: changed old_hsmsecret to default to false.
sangbida Jan 20, 2026
fe5c3c9
wallet: conduct unit tests with both bip86 and bip32.
rustyrussell Jan 20, 2026
ff60983
pytest: add askrene layer creation bench.
rustyrussell Jan 26, 2026
a394666
askrene: speed up when using large number of layers.
rustyrussell Jan 26, 2026
c7d313e
pytest: also make sure askrene doesn't suffer when reloading many lay…
rustyrussell Jan 26, 2026
c8eb54b
Makefile: improve print-binary-sizes to be more meaningful.
rustyrussell Jan 26, 2026
01c1264
patch configure-check-function-sections.patch
rustyrussell Jan 27, 2026
744432d
Build: add function sections.
rustyrussell Jan 27, 2026
bb7602c
configure: remove gratuitous CSANFLAGS print.
rustyrussell Jan 27, 2026
3917cee
fix: build on Alpine Linux
1ma Jan 3, 2026
3822a67
askrene: add auto.include_fees layer
Lagrang3 Jan 8, 2026
cc227ed
common: tighten restrictions on periods, as per latest draft.
rustyrussell Jan 7, 2026
4c10cb7
Docs: Update mac instructions to gmake
ddustin Jan 29, 2026
557a744
fuzz-tests: Make `fuzz-bolt12-offer-decode` roundrip
Jul 11, 2025
461ca68
fuzz-tests: Add coverage increasing inputs to seed corpora
Jul 11, 2025
bb3be7e
askrene: remove unnecessary print in test
Lagrang3 Jan 28, 2026
41a5c68
askrene: consider fees during *explain failure*
Lagrang3 Jan 30, 2026
597da1f
askrene: add test that triggers infinite loop
Lagrang3 Jan 30, 2026
f1bf66c
askrene: fixed a timeout corner case
Lagrang3 Jan 27, 2026
e2d17ce
pytest: test for crash when enableoffer called on a used single-use o…
rustyrussell Jan 28, 2026
d76e4e7
lightningd: don't allow enableoffer on single-use offer.
21M4TW Jan 28, 2026
ff34e48
feat: Enhance JUnit XML reporting with environment variables and add …
cdecker Jan 23, 2026
0173610
Fix Reckless search command not finding partial matches
TatianaMoroz Jan 26, 2026
1de4e1d
pytest: test for amountless offer with currency.
rustyrussell Jan 29, 2026
5053e2e
common: enforce currency-requires-amount check.
rustyrussell Jan 29, 2026
6a93730
decode: don't treat every failure as a rune.
rustyrussell Jan 29, 2026
2c0214f
common: remove unused type field.
rustyrussell Dec 9, 2025
5c31d33
common: remove legacy onion translation.
rustyrussell Dec 9, 2025
f799c4c
pytest: fix flake in test_sql.
rustyrussell Jan 30, 2026
cf3583f
pytest: mark renepay's self-pay test flaky
rustyrussell Jan 30, 2026
e36564f
pytest: make test_connect_ratelimit more robust
rustyrussell Jan 30, 2026
18a416b
connectd: unify IO logging calls.
rustyrussell Feb 3, 2026
9e8e85d
pytest: allow pushed after onchain_fee in test_bookkeeping_missed_cha…
rustyrussell Feb 3, 2026
db2a560
lightningd: fix spurious memleak in peer_connected_serialize.
rustyrussell Feb 3, 2026
63497b3
pytest: fix flake in test_even_sendcustommsg
rustyrussell Feb 3, 2026
1354512
pytest: fix flake in test_channel_lease_unilat_closes
rustyrussell Feb 3, 2026
23202b7
pytest: fix channeld_fakenet divide by zero bug.
rustyrussell Feb 4, 2026
c90c213
pytest: speed up channeld_fakenet tests.
rustyrussell Feb 4, 2026
95b63e4
Makefile: add "canned-gossmap" target
rustyrussell Feb 4, 2026
96adac4
pytest: update "real gossip map" tests to a recent snapshot.
rustyrussell Feb 4, 2026
2a5fbd1
pytest: speed up test_sql significantly.
rustyrussell Feb 5, 2026
1ad72fd
pytest: fix test_xpay flake.
rustyrussell Feb 8, 2026
939aec3
pytest: make hold_timeout.py test plugin release on a prompt, not tim…
rustyrussell Feb 8, 2026
1b1274d
CI: reduce parallelism for pytest.
rustyrussell Feb 9, 2026
eaf6fab
pytest: reproduce crash when node disconnects between hooks:
rustyrussell Feb 9, 2026
09781bd
lightningd: don't assume peer existrs in peer_connected_serialize.
rustyrussell Feb 9, 2026
e5e5998
devtools: enhance dump-gossipstore to show some details of messages.
rustyrussell Feb 11, 2026
ae95716
pytest: fix bogus test_gossip_store_compact_noappend test.
rustyrussell Feb 11, 2026
120c9d8
devtools/gossmap-compress: generate better scids.
rustyrussell Feb 11, 2026
5e1bbb0
gossmap: reduce load times by 20%
rustyrussell Feb 11, 2026
d4c62f8
tools: delete gossip_store of needed for downgrade even if db hasn't …
rustyrussell Feb 11, 2026
b1055aa
gossip_store: add UUID entry at front of the store.
rustyrussell Feb 11, 2026
25131d2
common/gossmap: use the UUID record on reopen.
rustyrussell Feb 11, 2026
5dcf398
gossipd: write uuid record on startup.
rustyrussell Feb 11, 2026
e8fd235
common: move gossip_store_wire.csv into common/ from gossipd/
rustyrussell Feb 11, 2026
1ad8ca9
gossmap: add callback for gossipd to see dying messages.
rustyrussell Feb 11, 2026
7d70e8b
gossmap: keep stats on live/deleted records.
rustyrussell Feb 11, 2026
900fd08
gossipd: use gossmap to load the dying entries.
rustyrussell Feb 11, 2026
dfc4ce2
gossipd: don't gather dying channels during compaction.
rustyrussell Feb 11, 2026
445bcd0
gossipd: don't compact on startup.
rustyrussell Feb 11, 2026
facf24b
devtools/gossmap-compress: create latest gossip_store version
rustyrussell Feb 11, 2026
1fb4da0
gossipd: put the last_writes array inside struct gossip_store.
rustyrussell Feb 11, 2026
a966dd7
common: expose gossip_store "header and type" single-read struct.
rustyrussell Feb 11, 2026
f56f8ad
gossipd: lightningd/lightning_gossip_compactd
rustyrussell Feb 11, 2026
15696d9
gossipd: code to invoke compactd and reopen store.
rustyrussell Feb 11, 2026
912b40a
gossipd: compact when gossip store is 80% deleted records.
rustyrussell Feb 11, 2026
88f3f97
gossipd: reset dying_channels array after compact.
rustyrussell Feb 11, 2026
acb8a8c
gossipd: dev-compact-gossip-store to manually invoke compaction.
rustyrussell Feb 11, 2026
b150309
pytest: test for crash when we have dying channels and compact the go…
rustyrussell Feb 11, 2026
2e8261e
pytest: test for bkpr_listbalances after emergencyrecover.
rustyrussell Feb 9, 2026
29e0a1d
bkpr: limp along if we lost our db.
rustyrussell Feb 9, 2026
4d030d8
pytest: fix flae int test_fetchinvoice_autoconnect.
rustyrussell Feb 16, 2026
cd7afb5
pytest: remove now-invalid test.
rustyrussell Feb 16, 2026
3693383
pytest: add fixture for checking packet sizes.
rustyrussell Feb 16, 2026
42bdb2d
CI: run tests in the `wireshark` group so we can test packet sizes
rustyrussell Feb 16, 2026
7577e59
connectd: refactor outgoing loop.
rustyrussell Feb 16, 2026
df1ae1d
connectd: refactor to break up "encrypt_and_send".
rustyrussell Feb 16, 2026
c23b7a4
connect: switch to using io_write_partial instead of io_write.
rustyrussell Feb 16, 2026
d45bc2d
connectd: don't toggle nagle on and off, leave it always off.
rustyrussell Feb 16, 2026
ca2d389
devtools/gossipwith: don't count "padding" pings towards max-messages…
rustyrussell Feb 16, 2026
8b90d40
connectd: pad messages with dummy pings if needed to make size uniform.
rustyrussell Feb 16, 2026
2436ee6
connectd: don't flush messages unless we have something important.
rustyrussell Feb 16, 2026
afdc92f
connectd: only do lazy transmission for *definitely* non-urgent messa…
rustyrussell Feb 16, 2026
963b353
connectd: use membuf for more efficient output queue.
rustyrussell Feb 16, 2026
fad0520
bcli: add synchronous `run_bitcoin_cli` for future refactor
dovgopoly Jan 5, 2026
f8c7a20
bcli: convert `getchaininfo` to synchronous execution
dovgopoly Jan 5, 2026
a3e07f4
bcli: convert `getutxout` to synchronous execution
dovgopoly Jan 5, 2026
0de1350
bcli: convert `sendrawtransaction` to synchronous execution
dovgopoly Jan 5, 2026
d06024c
bcli: convert `estimatefees` to synchronous execution
dovgopoly Jan 6, 2026
b5c300a
bcli: convert `getrawblockbyheight` to synchronous execution
dovgopoly Jan 8, 2026
7b1793f
lightningd: add `get_bitcoin_result` for bcli response handling
dovgopoly Jan 9, 2026
3e979d1
pytest: fix bcli tests after sync refactor
dovgopoly Jan 9, 2026
57d60c0
bcli: remove unused async code after sync refactor
dovgopoly Jan 9, 2026
d727946
bcli: return "not found" on any `getblockhash` exit status
dovgopoly Jan 13, 2026
4126f3b
bcli: refactor `wait_and_check_bitcoind` and `run_bitcoin_cli` to use…
dovgopoly Jan 17, 2026
2b39fc0
bcli: replace magic numbers with constants
dovgopoly Jan 17, 2026
edbad6c
pytest: add tests for bcli `getblockfrompeer` retry path
dovgopoly Jan 18, 2026
9bcac63
libplugin: add command_finish_rawstr() for when we're simply repeatin…
rustyrussell Feb 16, 2026
d9774e7
bitcoin: hash_scid and hash_scidd public functions.
rustyrussell Feb 16, 2026
e397b12
askrene: make minflow() static, and remove unused linear_flow_cost.
rustyrussell Feb 16, 2026
0ede29b
askrene: fork before calling the route solver.
rustyrussell Feb 16, 2026
da2f777
askrene: add child_log function so child can do logging.
rustyrussell Feb 16, 2026
8775b62
askrene: move routines only accessed by the child process into child/.
rustyrussell Feb 16, 2026
395261f
askrene: move fmt_flow_full from askrene.c into flow.c.
rustyrussell Feb 16, 2026
33e2f0a
askrene: move fork() entry point into its own file.
rustyrussell Feb 16, 2026
ac9aa97
askrene: make children use child_log() instead of rq_log.
rustyrussell Feb 16, 2026
0f575ac
askrene: remove non child-friendly fields from struct route_query.
rustyrussell Feb 16, 2026
85c9179
askrene: expose additional_costs htable so child can access it.
rustyrussell Feb 16, 2026
b002824
askrene: move route_query definition and functions into child/.
rustyrussell Feb 16, 2026
68b30b1
askrene: have child make `struct route_query` internally.
rustyrussell Feb 16, 2026
fb4232d
askrene: actually run children in parallel.
rustyrussell Feb 16, 2026
3c6504a
askrene: limit how many children we have.
rustyrussell Feb 16, 2026
6903cf2
askrene: make "child.c" to be the explicit child entry point.
rustyrussell Feb 16, 2026
d5c2c48
askrene: close files in child to isolate against bugs.
rustyrussell Feb 16, 2026
ab3e7c3
pytest: rework test_real_data and test_real_biases to be parallel.
rustyrussell Feb 17, 2026
a84ad10
common: fix `bad cupdates` count in gossmap.c
rustyrussell Feb 17, 2026
ffb8d86
pytest: fix flake in test_important_plugin node failure.
rustyrussell Feb 18, 2026
a9a72ad
pytest: make global exclusion for "That's weird: Request X took Y mse…
rustyrussell Feb 19, 2026
000462c
pytest: fix flakes in test_onchain_reestablish_reply and test_reestab…
rustyrussell Feb 19, 2026
21c2c0f
pytest: fix flake in test_gossip_force_broadcast_channel_msgs
rustyrussell Feb 19, 2026
10eb2c2
pytest: fix timeout flake in test_dataloss_protection
rustyrussell Feb 19, 2026
d0c158a
pytest: make test_no_delay more robust.
rustyrussell Feb 19, 2026
823a575
pytest: fix flake involving partial lines.
rustyrussell Feb 19, 2026
aa3f246
Add `-O2` in armv7 Docker build following bug fix
Raimo33 Feb 18, 2026
f2fcd6b
fuzz: fix uninitialized variable in fuzz-handle_onion_message
wqxoxo Nov 24, 2025
580c2f7
renepay: refactor and bugfixes
Lagrang3 Dec 19, 2025
f318c13
db: add STRICT tables with migration for old databases
wqxoxo Dec 10, 2025
0240882
pytest: fix flake in test_gossip_store_compact_while_extending and te…
rustyrussell Feb 23, 2026
7b69f5f
pytest: really fix race in test_buy_liquidity_ad_check_bookkeeping
rustyrussell Feb 23, 2026
113d2e8
pytest: fix test_sendpay_grouping regex.
rustyrussell Feb 23, 2026
1e60858
pytest: fix flake in test_reconnect_remote_sends_no_sigs
rustyrussell Feb 23, 2026
15ef2fd
Build: don't use HAVE_FUNCTION_SECTIONS for update-mocks.
rustyrussell Feb 17, 2026
611341d
lightningd: don't assert if plugin crashes early.
rustyrussell Feb 17, 2026
c168f6a
libplugin: support multi options.
rustyrussell Feb 17, 2026
2a1f647
lightningd: add payment-fronting-node option.
rustyrussell Feb 17, 2026
5ecb1ef
lightningd: honor `payment-fronting-node` when making bolt11 invoices.
rustyrussell Feb 17, 2026
572d4db
offers: encapsulate globals in plugin_get_data()
rustyrussell Feb 17, 2026
9eee744
lightningd: honor `payment-fronting-node` when making bolt12 offers.
rustyrussell Feb 17, 2026
25e2374
offers: modify find_best_peer() to only select from fronting nodes if…
rustyrussell Feb 17, 2026
ae21089
offers: honor `payment-fronting-nodes` when creating invoices.
rustyrussell Feb 17, 2026
cff488d
offers: honor `payment-fronting-nodes` when creating invoice_requests.
rustyrussell Feb 17, 2026
64e4519
offers: allow explicit fronting nodes for an offer.
rustyrussell Feb 17, 2026
9fa7c93
offers: only use blinded path nodes from offers when creating invoice…
rustyrussell Feb 20, 2026
6d252dc
ccan: import new version to change vsprintfs to vsnprintfs
sangbida Dec 4, 2025
c22538e
misc: fix uninitialised errors for macOS
sangbida Dec 4, 2025
77251ec
CI: use nproc + 1 for pytest parallelism..
rustyrussell Feb 20, 2026
932ba95
Makefile: don't build the sources in make check-source.
rustyrussell Feb 20, 2026
b3978d9
CI: Don't explicitly invoke .github/scripts/install-bitcoind.sh
rustyrussell Feb 20, 2026
aca70ee
connectd: teach dev_report_fds about Tor fds
rustyrussell Feb 20, 2026
bc51872
CI: do cargo test --all as part of post-build step
rustyrussell Feb 20, 2026
7baeb8f
CI: don't use /tmp/old-cln, use a local dir.
rustyrussell Feb 20, 2026
e50ea42
CI: Don't do release target build, create "small" profile
rustyrussell Feb 20, 2026
3812e74
Makefile: clean up a little.
rustyrussell Feb 20, 2026
5d444c6
Makefile: mark more things as intermediaries.
rustyrussell Feb 20, 2026
e9a7c94
plugins: neaten rust plugins, make them intermediate objects.
rustyrussell Feb 20, 2026
6c5883e
Makefile: make testpack.tar.gz from (almost) all changed files.
rustyrussell Feb 20, 2026
b1031e5
Makefile: support overriding of CC and CARGO for catching unintended …
rustyrussell Feb 20, 2026
740e35a
CI: avoid rebuilds on downloads using testpack.tar.gz.
rustyrussell Feb 20, 2026
d39ba34
CI: make downgrade and slow integration tests depend on check-compile…
rustyrussell Feb 20, 2026
1047c48
CI: use more optimized builds sometimes.
rustyrussell Feb 20, 2026
381f94a
ci: Enable sccache compiler cache for Rust and C
cdecker Feb 23, 2026
7a58575
pytest: mark test_partial_payment_restart slow.
rustyrussell Feb 23, 2026
201b684
CI: use -O1 optimized builds for sanitizer and valgrind runs.
rustyrussell Feb 23, 2026
9b07141
CI: Make 12 not 10 valgrind tests, and 6 not 12 sanitizer tests.
rustyrussell Feb 23, 2026
1d351e2
CI: split gcc+sqlite3 tests into 6 runners.
rustyrussell Feb 23, 2026
c1b2fde
CI: Use variable to make group counts neater.
rustyrussell Feb 23, 2026
31ad743
CI: Use -O3 builds for Liquid integration tests.
rustyrussell Feb 23, 2026
2971f5d
lightningd: add channel_id filter to listpeerchannels
nepet Dec 6, 2025
85fa8cf
gitignore: add lightningd/lightning_gossip_compactd
daywalker90 Feb 24, 2026
53a5512
schemas: fix ping requirements documentation
daywalker90 Feb 12, 2026
5174512
CI: Speed up 'min-btc-support' by compiling clang with -O3.
rustyrussell Feb 26, 2026
8bde4bb
CI: add more output to apt-get commands, to try to determine source o…
rustyrussell Feb 26, 2026
bda5195
CI: cache the apt packages, protoc and bitcoind/elements downloads.
rustyrussell Feb 26, 2026
acdda01
CI: Don't manually install bitcoind again.
rustyrussell Feb 26, 2026
8dce87f
CI: Remove setup useradd line, use eatmydata
rustyrussell Feb 26, 2026
303b876
CI: shorten job names.
rustyrussell Feb 27, 2026
0b10528
pytest: don't invoke the pcap test every session.
rustyrussell Feb 27, 2026
d73b756
CI: Disable flakiness tracking.
rustyrussell Feb 28, 2026
09585ee
currencyrate: new rust plugin to provide the `currencyconvert` API
daywalker90 Feb 25, 2026
db1ad9c
currencyrate: rename to cln-currencyrate, change options to currencyr…
rustyrussell Feb 25, 2026
1a6d458
doc: document default currencyconvert sources.
rustyrussell Feb 25, 2026
f3d12d7
cln-currencyrate: switch algorithm to a more lazy one
daywalker90 Feb 27, 2026
aaee193
installation.md: Fixed syntax in dependencies script for Fedora
ScuttoZ Mar 6, 2026
a03c9e5
crates: improved json codec decoding performance
daywalker90 Nov 24, 2025
376468f
cln-plugin: add a hook builder to make use of before, after and filte…
daywalker90 Nov 10, 2025
cb99987
splice: add zero-conf splice support per BOLT #2
vincenzopalazzo Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .codespellignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
connectd
crate
mut
4 changes: 4 additions & 0 deletions .codespellrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[codespell]

count = true
ignore-words = .codespellignore
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ statements_gettextgen.po linguist-generated=true
cln-grpc/proto/node.proto -text -diff linguist-generated=true
cln-grpc/src/convert.rs -text -diff linguist-generated=true
cln-rpc/src/model.rs -text -diff linguist-generated=true
contrib/pyln-testing/pyln/testing/node_pb2.py -text -diff linguist-generated=true
contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py -text -diff linguist-generated=true
16 changes: 14 additions & 2 deletions .github/scripts/install-bitcoind.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/bin/sh
# If an argument is specified, that dir is checked before downloading,
# and updated after successful install.

set -e

Expand All @@ -18,13 +20,23 @@ cd /tmp/
# testing against `bitcoind` but still believe that we ran against
# `elementsd`.
if [ "$TEST_NETWORK" = "liquid-regtest" ]; then
wget "https://github.com/ElementsProject/elements/releases/download/elements-${ELEMENTS_VERSION}/${EFILENAME}"
if [ -f "$1/${EFILENAME}" ]; then
cp "$1/${EFILENAME}" .
else
wget "https://github.com/ElementsProject/elements/releases/download/elements-${ELEMENTS_VERSION}/${EFILENAME}"
fi
tar -xf "${EFILENAME}"
[ "$1" = "" ] || cp "${EFILENAME}" "$1"/
sudo mv "${EDIRNAME}"/bin/* "/usr/local/bin"
rm -rf "${EFILENAME}" "${EDIRNAME}"
else
wget "https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/${FILENAME}"
if [ -f "$1/${FILENAME}" ]; then
cp "$1/${FILENAME}" .
else
wget "https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/${FILENAME}"
fi
tar -xf "${FILENAME}"
[ "$1" = "" ] || cp "${FILENAME}" "$1"/
sudo mv "${DIRNAME}"/bin/* "/usr/local/bin"
rm -rf "${FILENAME}" "${DIRNAME}"
fi
Expand Down
43 changes: 36 additions & 7 deletions .github/scripts/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,26 @@ set -e
export DEBIAN_FRONTEND=noninteractive
export RUST_VERSION=stable

sudo useradd -ms /bin/bash tester
sudo apt-get update -qq
sudo mkdir -p /var/cache/apt/archives
mkdir -p ~/ci-cache/apt/
sudo cp -a ~/ci-cache/apt/. /var/cache/apt/archives/ 2>/dev/null || true

sudo apt-get -qq install --no-install-recommends --allow-unauthenticated -yy \
sudo apt-get update

# Install eatmydata, then use it for the rest.
sudo apt-get install --no-install-recommends --allow-unauthenticated -yy \
-o APT::Keep-Downloaded-Packages=true \
eatmydata

sudo eatmydata apt-get install --no-install-recommends --allow-unauthenticated -yy \
-o APT::Keep-Downloaded-Packages=true \
autoconf \
automake \
binfmt-support \
build-essential \
clang \
cppcheck \
docbook-xml \
eatmydata \
gcc-aarch64-linux-gnu \
gcc-arm-linux-gnueabihf \
gcc-arm-none-eabi \
Expand Down Expand Up @@ -52,17 +60,19 @@ sudo apt-get -qq install --no-install-recommends --allow-unauthenticated -yy \
sudo \
tcl \
tclsh \
tshark \
unzip \
valgrind \
wget \
wireshark-common \
xsltproc \
systemtap-sdt-dev \
zlib1g-dev

echo "tester ALL=(root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/tester
sudo chmod 0440 /etc/sudoers.d/tester

"$(dirname "$0")"/install-bitcoind.sh
"$(dirname "$0")"/install-bitcoind.sh ~/ci-cache/

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- \
-y --default-toolchain ${RUST_VERSION}
Expand Down Expand Up @@ -90,10 +100,29 @@ uv tool install poetry

PROTOC_VERSION=29.4
PB_REL="https://github.com/protocolbuffers/protobuf/releases"
curl -LO $PB_REL/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip
sudo unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/
PROTOC_ZIP=protoc-${PROTOC_VERSION}-linux-x86_64.zip
if [ ! -f ~/ci-cache/$PROTOC_ZIP ]; then
curl -LO $PB_REL/download/v${PROTOC_VERSION}/$PROTOC_ZIP
# Check it before we commit it to the cache!
unzip -t $PROTOC_ZIP
cp $PROTOC_ZIP ~/ci-cache/
fi
sudo unzip ~/ci-cache/$PROTOC_ZIP -d /usr/local/
sudo chmod a+x /usr/local/bin/protoc
export PROTOC=/usr/local/bin/protoc
export PATH=$PATH:/usr/local/bin
env
ls -lha /usr/local/bin

# wireshark-common normally does this, but GH runners are special, so we
# do it explicitly
sudo groupadd -f wireshark
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

# Add ourselves to the wireshark group (still need "sg wireshark..." for it to take effect)
sudo usermod -aG wireshark "$(id -nu)"

# Copy archives back for caching
cp /var/cache/apt/archives/*.deb ~/ci-cache/apt/ || true
61 changes: 40 additions & 21 deletions .github/scripts/sync-rpc-cmds.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import os
from urllib.parse import quote
from time import sleep
import requests
import re
from enum import Enum

# readme url
URL = "https://api.readme.com/v2/branches/stable"
CATEGORY_SLUG = "JSON-RPC API Reference"
CATEGORY_SLUG = "JSON-RPC"


class Action(Enum):
Expand All @@ -17,10 +16,12 @@ class Action(Enum):


def getListOfRPCDocs(headers):
response = requests.get(f"{URL}/categories/reference/{quote(CATEGORY_SLUG)}/pages", headers=headers)
response = requests.get(f"{URL}/categories/reference/{CATEGORY_SLUG}/pages", headers=headers)
if response.status_code == 200:
return response.json().get('data', [])
else:
print(f"❌ Failed to get pages: {response.status_code}")
print(response.text)
return []


Expand All @@ -34,7 +35,7 @@ def check_renderable(response, action, title):

renderable = data.get("renderable")
if renderable is None:
# Some endpoints dont include renderable (e.g. DELETE)
# Some endpoints don't include renderable (e.g. DELETE)
return True

if not renderable.get("status", False):
Expand All @@ -46,53 +47,53 @@ def check_renderable(response, action, title):
return True


def publishDoc(action, title, body, order, headers):
def publishDoc(action, title, body, position, headers):
payload = {
"title": title,
"type": "basic",
"content": {
"body": body,
},
"category": {
"uri": f"/branches/1/categories/reference/{CATEGORY_SLUG}"
"uri": f"/branches/stable/categories/reference/{CATEGORY_SLUG}"
},
"hidden": False,
"order": order,
"position": position,
}

if action == Action.ADD:
payload["slug"] = title
response = requests.post(URL + "/reference", json=payload, headers=headers)
if response.status_code != 201:
print("❌ HTTP ERROR:", response.status_code)
print(f"❌ HTTP ERROR ({response.status_code}):", title)
print(response.text)
return

if not check_renderable(response, action, title):
raise RuntimeError(f"Renderable check failed for {title}")

print("✅ Created", title)
print(f"✅ Created '{title}' at position {position + 1}")

elif action == Action.UPDATE:
response = requests.patch(f"{URL}/reference/{title}", json=payload, headers=headers)
if response.status_code != 200:
print("❌ HTTP ERROR:", response.status_code)
print(f"❌ HTTP ERROR ({response.status_code}):", title)
print(response.text)
return

if not check_renderable(response, action, title):
raise RuntimeError(f"Renderable check failed for {title}")

print("✅ Updated", title)
print(f"✅ Updated '{title}' to position {position + 1}")

elif action == Action.DELETE:
response = requests.delete(f"{URL}/reference/{title}", headers=headers)

if response.status_code != 204:
print("❌ DELETE FAILED:", title)
print(f"❌ DELETE FAILED ({response.status_code}):", title)
print(response.text)
else:
print("🗑️ Deleted", title)
print(f"🗑️ Deleted '{title}' from position {position + 1}")

else:
print("Invalid action")
Expand Down Expand Up @@ -120,8 +121,18 @@ def main():
"Authorization": "Bearer " + os.environ.get("README_API_KEY"),
}

# Validate API key exists
if not os.environ.get("README_API_KEY"):
print("❌ ERROR: README_API_KEY environment variable not set")
return

# path to the rst file from where we fetch all the RPC commands
path_to_rst = "doc/index.rst"

if not os.path.exists(path_to_rst):
print(f"❌ ERROR: File not found: {path_to_rst}")
return

with open(path_to_rst, "r") as file:
rst_content = file.read()

Expand All @@ -130,23 +141,31 @@ def main():

# Compare local and server commands list to get the list of command to add or delete
commands_local_title = set(command[0] for command in commands_from_local)
commands_readme_title = set(command['title'] for command in commands_from_readme)
commands_readme_title = set(command['slug'] for command in commands_from_readme)
commands_to_delete = commands_readme_title - commands_local_title
commands_to_add = commands_local_title - commands_readme_title
for name in commands_to_delete:
publishDoc(Action.DELETE, name, "", 0, headers)
sleep(3)
sleep(1)

if commands_from_local:
order = 0
position = 0
for name, file in commands_from_local:
with open("doc/" + file) as f:
file_path = "doc/" + file
if not os.path.exists(file_path):
print(f"⚠️ WARNING: File not found: {file_path}, skipping {name}")
continue

with open(file_path) as f:
body = f.read()
publishDoc(Action.ADD if name in commands_to_add else Action.UPDATE, name, body, order, headers)
order = order + 1
sleep(3)
action = Action.ADD if name in commands_to_add else Action.UPDATE
publishDoc(action, name, body, position, headers)
position += 1
sleep(1)
else:
print("No commands found in the Manpages block.")
print("⚠️ No commands found in the Manpages block.")

print("\n✨ Sync complete!")


if __name__ == "__main__":
Expand Down
Loading