All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
24.05 - 2024-06-04: "The Infinitely Divisible Satoshi"
This release named by @daywalker90.
- JSON-RPC:
createrune
new restrictionpinv
to examine bolt11/bolt12 invoice fields (e.g. amount of invoice). (#7165) - Plugins:
cln-plugin
adds dynamic configs and a callback for changes (#7293) - JSON-RPC:
pay
has a new parameterpartial_msat
to only pay part of an invoice (someone else presumably will pay the rest at the same time!) (#7145) - JSON-RPC:
check
keysend
now checks with HSM that it will approve it. (#7111) - Plugins: Can now opt in to handle
check
command on their commands, for more thorough checking. (#7111) - JSON-RPC:
check
setconfig
now checks that the new config setting would be valid. (#7111) - JSON-RPC:
check
setconfig
on plugin options can now check the config value would be accepted. (#7111) - Plugins:
cln-grpc
adds notifications over the grpc interface. Configurable with config parametergrpc-msg-buffer-size
. ([#7084]) - Plugins: Added
wss-proxy
, a WSS Proxy server withwss-bind-addr
andwss-certs
configurations. (#7225) - Plugins:
cln-grpc
added GRPC support for remaining methods:dev-forget-channel
,emergencyrecover
,recover
,recoverchannel
,funderupdate
,help
,invoicerequest
,listinvoicerequests
,disableinvoicerequest
,listconfigs
,makesecret
,multiwithdraw
,showrunes
,createrune
,blacklistrune
,checkrune
(#7317), addpsbtoutput (#7108),openchannel_init
,openchannel_abort
,openchannel_bump
,openchannel_signed
,openchannel_update
(#7230),delpay
(#7232),delforward
(#7260),autoclean-once
,autoclean-status
(#7238),fundchannel_start
,fundchannel_complete
,fundchannel_cancel
(#7231),bkpr-channelsapy
,bkpr-dumpincomecsv
,bkpr-inspect
,bkpr-listaccountevents
,bkpr-listbalances
(#7256),disableoffer
(#7233),parsefeerate
,plugin
,renepay
,renepaystatus
,sendinvoice
(#7272),reserveinputs
,unreserveinputs
,splice_init
,splice_signed
,splice_update
(#7273),sendonionmessage
,setconfig
,setpsbtversion
,upgradewallet
(#7274). - Plugins:
cln_plugin
adds rust plugin support for wildcard*
subscriptions. ([#7106]) - Config: Add
bitcoin-rpcclienttimeout
config parameter. (#7095) - Plugins: new
log
notification when a log line is emitted. (#6990) - Config: new log level
trace
where we moved the very noisiestdebug
logs. (#7280) - Plugins:
clnrest
added a new configurationclnrest-swagger-root
to change the default Swagger UI path from/
to custom url. (#7256)
- Documentation: great documentation rewrite, all reference pages now generated from the fully-tested JSON schemas and include examples. (#6995)
- Protocol:
--ignore-fee-limits
/setchannel ignorefeelimits
no longer applies to mutual close. (#7252) - Plugins:
bcli
: Add a path that tries to fetch blocks (#7240) - Plugins: libplugin now shows plugin option default values (where they're non-trivial) (#7306)
- Runes: named parameters (e.g.
pnameamountmsat
) no longer need to remove underscores (i.e.pnameamount_msat
now works as expected). (#7124) - lightningd: we now try to increase the number of file descriptors, if it's less than twice the number of channels at startup (and log if we cannot!). (#7237)
- connectd: prioritize peers with channels (and log!) if we run low on file descriptors. (#7237)
- lightningd: Processing blocks should now be faster (#7101)
- Plugins:
cln-grpc
adds routes todecode
anddecodepay
results (#7317) - hsmd: the hsmd now supports
HSM_VERSION 6
(#7178) - hsmd:
HSM_VERSION 6
:get_per_commitment_point
does not imply index - 2 is revoked, makes it safe to call on any index. (#7178) - Documentation: Merged
example_json_request
andexample_json_response
in a singlejson_examples
array to maintain the request and its corresponding response together. (#7181) - JSON-RPC:
stop
andrecover
now return a JSON object (not a raw string!) like every other command does. (#6995) - Plugins:
pay
payments are more robust for nodes that are currently syncing. (#7190)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- Plugins: no longer allow missing
id
field in commando requests (deprecated v23.02, EOL v24.02) (#7094) - JSON-RPC:
createrune
restrictions as raw strings (use arrays) (deprecated v23.05, EOL 24.02). (#7094) - JSON-RPC:
listpeers
channels
(deprecated v23.02, EOL v24.02) (#7094) - JSON-RPC:
sendpay
ignoring first channel (deprecated v0.12, EOL v24.02) (#7094) - Config:
experimental-websocket-port
(deprecated 23.08, EOL 24.02) (#7094) - Plugins:
funding_locked
fromchannel_opened
notification (deprecated v22.11, EOL v24.02) (#7094) - JSON-RPC:
feerates
output fieldsdelayed_to_us
andhtlc_resolution
. (#7094) - Config:
autocleaninvoice-cycle
andautocleaninvoice-expired-by
(deprecated v22.11, EOL v24.02) (#7094) - JSON-RPC:
delexpiredinvoice
(deprecated v22.11, EOL v24.02) (#7094) - JSON-RPC feerates by internal names ("opening", "mutual_close", "delayed_to_us", "htlc_resolution", "penalty", "min_acceptable", "max_acceptable") (deprecated v23.05, EOL v24.02). (#7094)
- Plugins:
invoice_payment
andhtlc_accepted
hookfailure_code
response (deprecated v22.08 and v0.8, EOL v23.02) (#7094)
- Plugins:
pay
now correctly estimates channel capacity (#7188) - lightningd: avoid crash on signing failure when trying to spend anchor outputs. (#7291)
- Plugins:
renepay
fixed a race condition leading to a crash. ([#7125]) - JSON-RPC:
fundchannel_start
now disallows a non-zeromindepth
parameter if you ask for a zeroconfchannel_type
. (#7175) - pyln-client: Fix Plugin.notify_message() not to ignore
level
parameter. (#7287) - JSON-RPC:
multifundchannel
withall
as an amount works as expected. (#7037) - Plugins:
pay
crash fixed, caused by parsing uncommitted dual open channels (#7235) - Plugins:
clnrest
now correctly self-disables if Python not present at all. (#7211) - lightningd: slow memory leak when using plugin hooks fixed (introduced in v23.11) (#7192)
- Plugins:
recovery
is less noisy. (#7116) - Plugins:
renepay
handles htlc_max correctly for local channels. (#7159) - Plugins: The recover plugin now avoids trying to recover closed channels. ([#7216])
- Gossmap: Avoid adding redundant channel announcements to the gossip_store. (#7330)
- Protocol: forward legacy non-TLV onions which we removed in 22.11 and spec itself in Feb 2022. Still sent by LND nodes who haven't seen our node_announcement. (#7352)
- Protocol: we once again send CHANNEL_REESTABLISH responses on closing channels. (#7353)
- gossipd: Fixed a crash when processing pending node announcements. (#7368)
- offers: We will now reply to invoice_request messages even if reply path requires us to make an outgoing connection (LDK does this) (#7304)
- offers: we now understand blinded paths which use a short-channel-id(+direction) as entry point. (#7212)
- offers: Fix blinded paths in invoices - use node_id and set final node's CLTV delta. (#7311)
This release named by Erik de Smedt (@ErikDeSmedt).
- Plugins:
pay
route algorithm doesn't bias against our own "expensive" channels any more. (#7127) - pay: Prevent repeating the preapproveinvoice check (#7121)
- Plugins:
pay
would occasionally crash on routing. (#7127) - Plugins:
pay
route algorithm fixed and refined to balance fees and capacity far better. (#7127) - renepay: bugfix situation with htlcmax=htlcmin
24.02 - 2024-02-27: "uint needs signature"
This release named by Erik de Smedt (@ErikDeSmedt).
- JSON-RPC:
listpeerchannels
fieldlast_stable_connection
andlistclosedchannels
fieldlast_stable_connection
showing when we last held an established channel for a minute or more. (#6904) - JSON-RPC:
listpeerchannels
new fieldreestablished
set once we've exchangedchannel_reestablish
messages. (#6904) - JSON-RPC:
fundchannel
,multifundchannel
,fundchannel_start
andopenchannel_init
: new fieldchannel_type
. (#6864) - JSON-RPC:
fundchannel
andmultifundchannel
now take an optionalchannel_type
parameter. (#6864) - JSON-RPC:
fundchannel_start
andopenchannel_init
now take an optionalchannel_type
parameter. (#6864) - Plugin: options and commands can specify deprecation start (and optional end) versions. (#6936)
- Plugins: rpcmethods and options can set
deprecated
to a pair of version strings, not just a boolean. (#6936) - JSON-RPC:
deprecations
to enable/disable deprecated APIs from this caller. (#6936) - config:
i-promise-to-fix-broken-api-user
allows for a one-release re-enablement of long-deprecated features. (#6936) - Protocol:
option_anchors_zero_fee_htlc_tx
enabled, no longer experimental. (#6785) - Plugins:
deprecated_oneshot
notifiction subscription to change deprecated status for a single command. (#6936) - hsmd: Added hsmd_forget_channel to enable explicit channel deletion. ([#6987]) (#6988)
- tracing: It is now possible to inject a parent for the startup trace by setting the
CLN_TRACEPARENT
envvar (#6912) - Plugins: notification custommsg for receiving an unknown protocol message (#6899)
- JSON-RPC:
listpeerchannels
now shows gossip update contents (even if channel unannounced). (#6869)
- lightningd: Speed up blocksync by not parsing unused parts of the transactions (#6984)
- Config:
experimental-anchors
now does nothing (it's enabled by default). (#6785) - reckless installs python plugins into virtual environments (#7018)
- Protocol:
option_gossip_queries
is now required (advertized by all but 16 nodes) (#6864) - Protocol:
option_gossip_queries
is now required (advertized by all but 11 nodes) (#6864) - Protocol:
option_data_loss_protect
is now required (advertized by all but 11 nodes) (#6864) - core: Processing blocks should now be faster (#6983)
- Enable optimizations for libwally/libsecp256k1-zkp (#6983)
- Update libwally to 1.2.0 (#6983)
- pyln-client: no longer autoconverts _msat field to Millisatoshi class (leaves as ints). (#6865)
- JSON-RPC:
listnodes
no longer shows private (peer) nodes: use listpeers (#6869) - startup_regtest.sh:
fund_nodes
will now make balanced channels (#6898) - startup_regtest.sh PATH_TO_LIGHTNING + PATH_TO_BITCOIN are no more. Use LIGHTNING_BIN and BITCOIN_DIR (#6898)
Note: You should always set allow-deprecated-apis=false
to test for changes.
listchannels
no longer uses local knowledge to setactive
to false if disconnected. (#6869)- JSON-RPC:
listchannels
listing private channels: use listpeerchannels (#6869)
- Protocol: we no longer ratelimit gossip messages by channel, making our code far simpler. (#6941)
- Config:
disable-ip-discovery
(deprecated in v23.02): useannounce-addr-discovered
(#6936) - wallet: removal of p2sh-segwit addresses; newaddr won't issue them, we won't watch them for new funds (deprecated in 23.02) (#6936)
- JSON-RPC:
invoice
,sendonion
,sendpay
,pay
,keysend
,fetchinvoice
,sendinvoice
:msatoshi
argument (deprecated 0.12.0). Useamount_msat
. (#6936)
- JSON-RPC:
close
withdestination
works even if priordestination
was rejected. (#7072) - JSON-RPC:
channel_type
reflects option_zeroconf if explicitly negotiated. (#6864) - configure: We now respect the
PKG_CONFIG_PATH
environment variable (#6967) - Default bolt11 invoices are payable by LND nodes. (#6957)
- channeld: We could crash
closingd
by sending it achanneld
message (#6937) bkpr-listbalances
would crash for nodes on signet with payments in channels, because onchain events were using a different currency than inchannel events. (#6888)- Hsmtool: Fix segmentation fault when calling
getcodexsecret
without id. (#6895)
- JSON-RPC: Deprecated
offer
parameterrecurrence_base
with@
prefix: userecurrence_start_any_period
. (#7034) - JSON-RPC: Added
offer
parameterrecurrence_start_any_period
. (#7034) - Plugins:
funder
option "lease-fee-base-msat" removed (deprecated in v0.11, use "lease-fee-base-sat") (#6936)
23.11 - 2023-11-28: "Bitcoin Orangepaper"
This release named by Shahana Farooqui
- JSON-RPC:
wait
now works forforwards
infrastructure. (#6753) - JSON-RPC:
wait
now works forsendpays
infrastructure. (#6753) - JSON-RPC:
check
now does much more checking on every command (not just basic parameter types). (#6772) hsmtool
: new commandgetemergencyrecover
to extract emergency.recover in bech32 format (clnemerge1...) (#6773)- JSON-RPC:
datastoreusage
: returns the total bytes that are stored under a given key. (#6442) - JSON-RPC:
decode
can now decode emergency.recover files (clnemerg1...) (#6773) - Option: --commit-fee-offset to potentially reduce feerate update disagreements (#6833)
- Runes:
per=Nsec/min/hour/msec/usec/nsec
for general ratelimiting (#6617) - JSON-RPC:
showrunes
new fieldlast_used
(#6617) - JSON-RPC:
listforwards
new parametersindex
,start
andlimit
. (#6753) - JSON-RPC:
listforwards
fieldscreated_index
(old:id
) andupdated_index
. (#6753) - JSON-RPC:
listsendpays
new parametersindex
,start
andlimit
. (#6753) - JSON-RPC:
sendpay
,listsendpays
,delpay
new fieldscreated_index
(old:id
) andupdated_index
. (#6753) - JSON-RPC:
listinvoices
new fieldpaid_outpoint
if an invoice is paid onchain. (#6421) - JSON-RPC: New
addpsbtoutput
command for creating a PSBT that can receive funds to the on-chain wallet. (#6676) - Config:
invoices-onchain-fallback
to automatically add an onchain p2tr address to invoices, and allow that for payment. (#6421) - JSON-RPC:
recover
command to force (unused) lightningd node to restart with--recover
flag. (#6772) - Config:
--recover
can take a 32-byte hex string, as well as codex32. (#6772) - Config:
--developer
enables developer options and changes default to be "disable deprecated APIs". (#6311) - Cln-RPC: Implement send_custom_notification to allow sending custom notifications to other plugins. (#6135)
- Cln-RPC: Add
wait
system to cln-rpc and cln-grpc. (#6850) - Cln-RPC: Add
fetchinvoice
method to cln-rpc and cln-grpc. (#6850) - Plugins: plugins can now specify (unknown) even messages we should accept from peers. (#6689)
- New configurable Content-Security-Policy (CSP) header for clnrest (#6686)
- New configurable Cross-Origin-Resource-Sharing(CSP) header for clnrest (#6686)
- hsmd protocol: Added hsmd_check_outpoint and hsmd_lock_outpoint (#6760)
- JSON-RPC time fields now have full nanosecond precision (i.e. 9 decimals not 3):
listfowards
received_time
resolved_time
listpays
/listsendpays
created_at
. (#6617) - Config:
large-channels
is now the default, wumbology for all. (#6783) - Plugins:
clnrest
config optionsrest-certs
,rest-protocol
,rest-host
,rest-port
,rest-cors-origins
,rest-csp
are all now prefixed withcln
in order to avoid clashing with c-lightning-REST. (i.e., rest-port to clnrest-port) (#6857) - JSON-RPC
listpeerchannels
.inflights
may sometimes not includescratch_txid
(mandatory -> optional) (#6824) - JSON-RPC:
openchannel_update
will now echo back a result if there's a matching inflight record for this open. (#6824) - JSON-RPC:
openchannel_signed
will now remember the details of a signed PSBT even if the peer is disconnected. (#6824) - Plugins:
clnrest
can suppress the internal logging handler viawith_logging(false)
now (#6797) - JSON-RPC:
checkrune
rate
restriction is slightly stricter (exact division of time likeper
) (#6710) - Protocol: use CPFP on peer's commitment tx if we can't broadcast our own. (#6752)
- Plugins:
clnrest
is upgraded to a poetry project. (#6651) - Protocol: dual-funding now follows the next-funding-id rules. (#6824)
- Protocol: we no longer disconnect every time we receive a warning message. (#6668)
- Protocol:
invoice
no longer explicitly encodesc
if it's the default (18) (#6668)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- Plugins:
clnrest
parametersrest-port
,rest-protocol
,rest-host
andrest-certs
: prefixcln
to them (#6876)
- Build:
--enable-developer
arg to configure (and DEVELOPER variables): use./configure --enable-debugbuild
anddeveloper
setting at runtime. (#6311) - JSON-RPC:
dev-sendcustommsg
(usesendcustommsg
, which was added in v0.10.1) (#6311)
- Protocol: Some peer disconnects due to update_fee disagreements are avoided. (#6833)
- Plugins:
clnrest
websocket server notifications are available with restriction ofreadonly
runes (#6749) - Protocol: Issue splicing with pending / stuck HTLCs fixed. (#6748)
- Protocol: Implemented splicing restart logic for tx_signature and commitment_signed. Splice commitments are reworked in a manner incompatible with the last version. (#6840)
- Wallet: close change outputs show up immediately in
listfunds
so you can CPFP. (#6734) - Restore any missing metadata that resource constrained signers stripped (#6767)
- JSON-RPC: Plugin notification
msat
fields ininvoice_payment
andinvoice_created
hooks now a number, not a string with "msat" suffix. (#6884) - JSON-RPC: Plugin hook
payment
msat
field is now a number, not a string with "msat" suffix. (#6884) - JSON-RPC: fix
checkrune
whenmethod
parameter is the empty string. (#6759) - JSON-RPC:
getroute
now documents that it ignoresfuzzpercent
. (#6697) - Rune: use runes table
id
insteadrunes_uniqueid
fromvars
because it returns incorrect unique id if rune/s migrated from datastore. (#6715) - Added docs, testing, and some fixes related to splicing out, insufficent balance handling, and restarting during a splice. (#6677)
- The WIRE_HSMD_SIGN_SPLICE_TX HSM capability is now correctly checked. (#6867)
- Hsmtool: Fix segmentation fault when calling
getcodexsecret
without id. (#6895)
- Fixed anchor spending to be able to use more than one UTXO. (#6780)
- JSON-RPC: added new dual-funding state
DUALOPEND_OPEN_COMMITTED
(#6628)
Bugfix release for bad issues found since 23.08 which can't wait for 23.11, and some minor low-impact fixes (e.g. docker images, documentation, CI).
- cln-rpc:
ShortChannelId
has Eq, PartialOrd, Ord and Hash traits (#6662) - doc: documentation for REST interface (clnrest) (#6631)
- JSON-RPC:
checkrune
nodeid
parameter now optional (#6622)
- Protocol: Fixed a wrong number type being used in routes (#6642)
- JSON-RPC:
showrunes
on a specific rune would always saystored
: false. (#6640) - MacOS:
clnrest
now works (#6605) - Build: test for
python3
orpython
, rather than assumingpython3
(#6630)
- Plugins:
renepay
: various minor fixes. (#6632)
v23.08 - 2023-08-23: "Satoshi's Successor"
This release named by Matt Morehouse.
- Plugins:
renepay
: an experimental pay plugin implementing Pickhardt payments (renepay
andrenepaystatus
). (#6376) - Plugins:
clnrest
: a lightweight python rest API service. (#6389) - JSON-RPC:
wait
: new generic command to wait for events. (#6127) - JSON-RPC:
setchannel
adds a newignorefeelimits
parameter to allow peer to set arbitrary commitment transaction fees on a per-channel basis. (#6398) - Config: A new opentracing system with minimal performance impact for performance tracing in productive systems: see doc/developers-guide/tracing-cln-performance.md (#5492)
- Plugins:
pay
will now pay your own invoices if you try. (#6399) - JSON-RPC:
checkrune
: check rune validity for authorization;createrune
to create/modify rune;showrunes
to list existing runes;blacklistrune
to revoke permission of rune (#6403) - Protocol: When we send our own gossip when a peer connects, also send any incoming channel_updates. (#6412)
- Config:
log-level
can be specified on a per-logfile basis. (#6406) - Config:
--recover
can restore a node from a codex32 secret (#6302) - Tools:
hsmtool
getcodexsecret
to extract node secret as codex32 secret (#6466) - JSON-RPC: newaddr: p2tr option to create taproot addresses. (#6035)
- JSON-RPC: new command
setconfig
allows a limited number of configuration settings to be changed without restart. (#6303) - JSON-RPC:
listconfigs
now hasconfigs
subobject with more information about each config option. (#6243) - Config:
--regtest
option as alias for--network=regtest
(#6243) - Config:
accept-htlc-tlv-type
(replaces awkward-to-useaccept-htlc-tlv-types
) (#6243) - Config:
bind-addr=ws:...
to explicitly listen on a websocket. (#6173) - Config:
bind
can now takedns:
prefix to advertize DNS records. (#6173) - Plugins:
sendpay
now allows self-payment of invoices, by specifying an empty route. (#6399) - Plugins: plugins can subscribe to all notifications using "*". (#6347)
- Plugins: Pass the current known block height down to the getchaininfo call. (#6181)
- JSON-RPC:
listinvoices
haslimit
parameter for listing control. (#6127) - JSON-RPC:
listinvoices
hasindex
andstart
parameters for listing control. (#6127) - JSON-RPC:
listpeerchannels
has a new fieldignore_fee_limits
(#6398) - JSON-RPC:
shutdown
notification containsshutdown
object (notification consistency) (#6347) - JSON-RPC:
block_added
notification wraps fields inblock_added
object (notification consistency) (#6388) - JSON-RPC:
connect
anddisconnect
notifications now wrapid
field in aconnect
/disconnect
object (consistency with other notifications) (#6388) - JSON-RPC:
fundpsbt
andutxopsbt
new parameteropening_anchor_channel
so lightningd knowns it needs emergency reserve for anchors. (#6334) - Config:
min-emergency-msat
setting for (currently experimental!) anchor channels, to keep funds in reserve for forced closes. (#6334) - JSON-RPC:
feerates
has new fieldsunilateral_anchor_close
to show the feerate used for anchor channels (currently experimental), andunilateral_close_nonanchor_satoshis
. (#6334) - cln-grpc: Added
staticbackup
support to cln-grpc (#6507)
- Tools: Reckless can now install directly from local sources. (#6393)
- Protocol: We allow update_fail_malformed_htlc with invalid error codes (LND?) (#6425)
- Protocol:
invoice
will use channels for routehints even if peer says they're "disabled" (LND compat) (#6556) - pyln-testing: The grpc dependencies are now optional. (#6417)
- Protocol: commando commands now allow a missing params field, instead of requiring an empty field. (#6405)
- Wallet: we now use taproot change addresses. (#6035)
- Plugins:
autoclean
configuration variables now settable withsetconfig
. (#6303) - JSON-RPC:
fundchannel
andmultifundchannel
will refuse to spend funds belowmin-emergency-msat
if we have any anchor channels (or are opening one). (#6334) - JSON-RPC:
withdraw
will refuse to spend funds belowmin-emergency-msat
if we have any anchor channels (andall
will be reduced appropriately). (#6334) - JSON-RPC:
fundpsbt
andutxopsbt
will refuse to spend funds belowmin-emergency-msat
if we have any anchor channels. (#6334) - JSON-RPC:
feerates
unilateral_close_satoshis
now assumes anchor channels if enabled (currently experimental). (#6334)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON-RPC:
commando-rune
,commando-listrunes
andcommando-blacklist
(usecreaterune
,showrunes
andblacklistrune
(#6403) - JSON-RPC:
connect
,disconnect
andblock_added
notification fields outside the same-named object (use .connect/.disconnect/.block_added sub-objects) (#6388) pay
has undeprecated paying a description-hash invoice without providing the description. (#6337)- JSON-RPC:
listconfigs
direct fields, useconfigs
sub-object andset
,value_bool
,value_str
,value_int
, orvalue_msat
fields. (#6243) - Config: boolean plugin options set to
1
or0
(usetrue
andfalse
like non-plugin options). (#6243) - Config:
accept-htlc-tlv-types
(useaccept-htlc-tlv-type
multiple times) (#6243) - Config:
experimental-websocket-port
: use--bind-addr=ws::<portnum>
. (#6173) - Config: bind-addr=xxx.onion and addr=xxx.onion, use announce-addr=xxx.onion (which was always equivalent). (#6173)
- Config: addr=/socketpath, use listen=/socketpath (which was always equivalent). (#6173)
- Config:
announce-addr-dns
; use--bind-addr=dns:ADDR
for finer control. (#6173)
- Plugins:
commando
no longer allows datastore ['commando', 'secret'] to override master secret (re-issue runes if you were using that!). (#6431) - Plugins: pay:
pay
no longer splits based on common size, as it was causing issues in various scenarios. (#6400) - Build: Support for python v<=3.7 & Ubuntu bionic (#6414)
- Protocol: Fix incompatibility with LND which prevented us opening private channels (#6304)
- Protocol: We no longer gossip about recently-closed channels (Eclair gets upset with this). (#6413)
- Protocol: We will close incoming HTLCs early if the outgoing HTLC is stuck onchain long enough, to avoid cascating failure. (#6378)
- JSON-RPC:
close
returns atx
field with witness data populated (i.e. signed). (#6468) - Protocol: When we send our own gossip when a peer connects, send our node_announcement too (regression in v23.05) (#6412)
- Protocol:
dualopend
: Fix behavior for tx-aborts. No longer hangs, appropriately continues re-init of RBF requests without reconnection msg exchange. (#6461) - Protocol: Node announcements are refreshed more reliably. (#6454)
- Build: Small fix for Mac OS building (#6253)
- msggen:
listpays
now includes the missingamount_msat
andamount_sent_msat
fields (#6441) - Protocol: Adding a >0 version witness program to a fallback address now is just the witness program, as per bolt11 spec (#6435)
- JSON-RPC:
sendonion
andsendpay
will now consider amounts involved when using picking one channel for a peer (#6428) - Plugins: pay: We now track spendable amounts when routing on both the local alias as well as the short channel ID (#6428)
- Plugins: pay: will still use an invoice routehint if path to it doesn't take 1-msat payments. (#6579)
- Config:
log-level
filters now apply correctly to messages fromconnectd
. (#6406) - Lightnind: don't infinite loop on 32 bit platforms if only invoices are expiring after 2038. (#6361)
- JSON-RPC:
pay
anddecodepay
with description now correctly handle JSON escapes (e.g " inside description) (#6337) - Plugins:
commando
runes can now compare integer parameters using '<' and '>' as expected. (#6295) - Plugins: reloaded plugins get passed any vars from configuration files. (#6243)
- JSON-RPC:
listconfigs
rpc-file-mode
no longer has gratuitous quotes (e.g. "0600" not ""0600""). (#6243) - JSON-RPC:
listconfigs
htlc-minimum-msat
,htlc-maximum-msat
andmax-dust-htlc-exposure-msat
fields are now numbers, not strings. (#6243) - Protocol: We may propose mutual close transaction which has a slightly higher fee than the final commitment tx (depending on the outputs, e.g. two taproot outputs). (#6547)
- Protocol: We now close connection with a peer if adding an HTLC times out (which may be a TCP connectivity issue). (#6520)
- Plugins: we clean up properly if a plugin fails to start, and we don't kill all processes if it's from
plugin startdir
. (#6570) - lightning-cli: properly returns help without argument (#6568)
- Build: all experimental features are now runtime-enabled; no more
./configure --enable-experimental-features
(#6209) - Protocol:
experimental-splicing
to enable splicing & resizing of active channels. (#6253) - protocol:
experimental-anchors
to support zero-fee-htlc anchors (option_anchors_zero_fee_htlc_tx
). (#6334) - Protocol: Removed support for advertizing websocket addresses in gossip. (#6173)
- Crash: Fixed crash in dual-funding. (#6273)
- Config:
experimental-upgrade-protocol
enables simple channel upgrades. (#6209) - Config:
experimental-quiesce
enables quiescence, for testing. (#6209)
Bugfix release for bad issues found since 23.05.1 which can't wait for 23.08.
- JSON-RPC:
pay
anddecodepay
with description now correctly handle JSON escapes (e.g " inside description) - JSON-RPC:
pay
has undeprecated paying a description-hash invoice without providing the description (since it didn't work reliably until now!) - GRPC:
listpeers
sometimes could fail on unknown HTLC states.
- Fixed compilation error when
--enable-experimental-features
configured.
Bugfix release for bad issues found since 23.05 which can't wait for 23.08.
- Fixed crash (memory corruption!) in
listtransactions
(#6304) - Don't crash on gossip store deletion fail (#6297)
- Fix incompatibility with LND which prevented us opening private channels (#6304)
- Fixed crash in dual-funding. (#6273)
23.05 - 2023-05-10: "Austin Texas Agreement(ATXA)"
This release named by @instagibbs
NOTE 1: This release contains breaking changes of the Great Msat migration started in v0.12.0, so "msat" fields are no longer strings with "msat" appended, but simply integers.
- Protocol: blinded payments are now supported by default (not just with
--experimental-onion-messages
) (#6138) - Protocol: we now always double-check bitcoin addresses are correct (no memory errors!) before issuing them. (#5708)
- JSON-RPC: PSBTv2 support for
fundchannel_complete
,openchannel_update
,reserveinputs
,sendpsbt
,signpsbt
,withdraw
andunreserveinputs
parameterpsbt
,openchannel_init
andopenchannel_bump
parameterinitialpsbt
,openchannel_signed
parametersigned_psbt
andutxopsbt
parameterutxopsbt
(#5898) - Plugins:
commando-blacklist
new command to disable select runes. (#6124) - Plugins:
commando-listrunes
new command to show issued runes. (#6124) - JSON-RPC:
listclosedchannels
new command to show old, dead channels we previously had with peers. (#5967) - JSON-RPC:
close
,fundchannel
,fundpsbt
,multifundchannel
,multiwithdraw
,txprepare
,upgradewallet
,withdraw
now allow "minimum" and NN"blocks" asfeerate
(feerange
forclose
). (#6120) - JSON-RPC:
feerates
addedfloor
field for current minimum feerate bitcoind will accept (#6120) - JSON-RPC:
feerates
estimates
array shows fee estimates by blockcount from underlying plugin (usually bcli). (#6120) - Plugins:
estimatefees
can return explicitfee_floor
andfeerates
by block number. (#6120) - JSON-RPC:
listfunds
now has achannel_id
field. (#6029) - JSON-RPC:
listpeerchannels
now haschannel_type
field. (#5967) - JSON-RPC:
sql
now includeslistclosedchannels
. (#5967) pyln-client
: Improvements on the gossmap implementation (#6012)hsmtool
:makerune
new command to make a master rune for a node. (#6097)- JSON-RPC:
setpsbtversion
: new command to aid debugging and compatibility (#5898) grpc
: Added mapping forlistpeerchannels
,listclosedchannels
,decode
anddecodepay
RPC methods (#6229)
reckless
: Added support for node.js plugin installation (#6158)reckless
: Added support for networks beyond bitcoin and regtest (#6110)- JSON-RPC: elements network PSET now only supports PSETv2. (#5898)
- JSON-RPC:
close
,fundchannel
,fundpsbt
,multifundchannel
,multiwithdraw
,txprepare
,upgradewallet
,withdraw
feerate
(feerange
forclose
) value slow is now 100 block-estimate, not half of 100-block estimate. (#6120) - Protocol: spending unilateral close transactions now use dynamic fees based on deadlines (and RBF), instead of fixed fees. (#6120)
- Protocol: Allow slight overpaying, even with MPP, as spec now recommends. (#6138)
msggen
: The generated interfacescln-rpc
anccln-grpc
can now work with a range of versions rather than having to match the CLN version (#6142)grpc
: The mTLS private keys are no longer group-readable (#6075)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON-RPC:
close
,fundchannel
,fundpsbt
,multifundchannel
,multiwithdraw
,txprepare
,upgradewallet
,withdraw
feerate
(feerange
forclose
) expressed as, "delayed_to_us", "htlc_resolution", "max_acceptable" or "min_acceptable". Use explicit block counts or slow/normal/urgent/minimum. (#6120) - Plugins:
estimatefees
returning feerates by name (e.g. "opening"); usefee_floor
andfeerates
. (#6120) - Protocol: Not setting
option_scid_alias
inoption_channel
channel_type
for unannounced channels. (#6136)
- JSON-RPC: the "msat" suffix on millisatoshi fields, as deprecated in v0.12.0. (#5986, #6245)
- JSON-RPC: all the non-msat-named millisatoshi fields deprecated in v0.12.0. (#5986)
- JSON-RPC:
listpeers
.local_msat
andlistpeers
.remote_msat
(deprecated v0.12.0) (#5986) - JSON-RPC:
checkmessage
now always returns an error when the pubkey is not specified and it is unknown in the network graph (deprecated v0.12.0) (#5986) - JSON-RPC: require the
"jsonrpc": "2.0"
property (requests without this deprecated in v0.10.2). (#5986)
- Plugins:
bcli
now tells us the minimal possible feerate, such as with mempool congestion, rather than assuming 1 sat/vbyte. (#6120) lightningd
: don't log gratuitous "Peer transient failure" message on first connection after restart. (#6140)channeld
: no longer spin and spam logs when waiting for revoke_and_ack. (#6107)- Plugin:
autoclean
now also cleans forwards with statuslocal_failed
(#6109) - Protocol: we will upfront reject channel_open which asks for a zeroconf channel unless we are going to do a zerconf channel. (#6136)
- Protocol: We now correctly accept the
option_scid_alias
bit inopen_channel
channel_type
. (#6136) - JSON-RPC:
feerates
document correctly that urgent means 6 blocks (not 2), and give better feerate examples. (#6170) wallet
: we no longer make txs below minrelaytxfee or mempoolminfee. (#6073)delpay
: be more pedantic about delete logic by allowing delete payments by status directly on the database. (#6115)- Plugins:
bookkeeper
onchain fees calculation was incorrect with PostgresQL. (#6128) clnrs
: Fixed an issue converting routehints in keysend (#6154)- Build: Compilation with upcoming gcc 13 (#6184)
- fetchinvoice: fix: do not ignore the
quantity
field (#6090)
- JSON-RPC: Restore
pay
for a bolt11 which uses adescription_hash
, without settingdescription
(still deprecated, but the world is not ready) [
23.02.1 - 2023-03-10: "CBDC Backing Layer II"
This release named by @whitslack
- gossipd: Revert zombification change, keep all gossip for now. (#6069)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- Plugins:
sql
nodes table now gets refreshed when gossip changes. (#6068) - connectd: Fixed a crash on new connections. (#6070)
- wallet: Don't crash on broken database migrations. (#6071)
experimental-peer-storage
: only send to peers which support it. (#6072)
23.02 - 2023-03-01: "CBDC Backing Layer"
This release named by @whitslack
NOTE 1: This release contains breaking protocol changes to dual-funding and
offers, making them incompatible with previous releases.
NOTE 2: Periodic pruning of channels now keeps track of them as 'zombies.' This
behavior is in line with the lightning specification but results in
fewer nodes and channels listed by listnodes
/listpeers
. These
channels will resume as soon as the missing side broadcasts a recent
channel update.
- Plugins:
sql
plugin command to perform server-side complex queries. (#5679) - JSON-RPC:
preapprovekeysend
: New command to preapprove payment details with an HSM. (#5821) - JSON-RPC:
preapproveinvoice
: New command to preapprove a BOLT11 invoice with an HSM. (#5821) - JSON-RPC:
listpeerchannels
: New command to return information on direct channels with our peers. (#5825) - JSON-RPC:
signinvoice
: New command to sign a BOLT11 invoice. (#5697) - JSON-RPC:
upgradewallet
: New command to sweep all p2sh-wrapped outputs to a native segwit output. (#5670) - JSON-RPC:
fundpsbt
optionnonwrapped
filters out p2sh wrapped inputs. (#5670) - JSON-RPC:
listpeers
output now hasnum_channels
aschannels
is deprecated (seelistpeerchannels
). (#5968) - JSON-RPC:
listchannels
added adirection
field (0 or 1) as per gossip specification. (#5679) - cli:
--commando=peerid:rune
(or-c peerid:rune
) as convenient shortcut for running commando commands. (#5866) - Plugins:
commando
now supportsfilter
as a parameter (for send and receive). (#5866) - Config: Added config option
announce-addr-discovered-port
to set custom port for IP discovery. (#5842) - Config: Added config switch
announce-addr-discovered
: on/off/auto (#5841) - doc: we now annotate what versions JSON field additions and deprecations happenened. (#5867)
- SECURITY.md: Where to send sensitive bug reports, and dev GPG fingerprints. (#5960)
- JSON-RPC:
sendcustommsg
can now be called by a plugin from within thepeer_connected
hook. (#5361) - JSON-RPC:
getinfo
address
array is always present (though may be empty.) (#5904) - postgres: Ordering of HTLCs in
listhtlcs
are now ordered by time of creation. (#5863)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- Config: The --disable-ip-discovery config switch: use
announce-addr-discovered
. (#5841) - JSON-RPC:
newaddr
:addresstype
p2sh-segwit
(use default, orbech32
.) (#5751) - JSON-RPC:
listpeers
channels
array: uselistpeerchannels
. (#5825) - plugins:
commando
JSON commands without anid
(see doc/lightningd-rpc.7.md for how to construct a good id field). (#5866)
- JSON-RPC:
sendpay
route
argumentstyle
"legacy" (deprecated v0.11.0) (#5747) - JSON-RPC:
close
destination
no longer allows p2pkh or p2sh addresses. (deprecated v0.11.0) (#5747) - JSON-RPC:
fundpsbt
/utxopsbt
reserve
must be a number, not bool. (deprecated v0.11.0) (#5747) - JSON-RPC:
invoice
expiry
no longer allowed to be a string with suffix, use an integer number of seconds. (deprecated v0.11.0) (#5747) - JSON-RPC:
pay
for a bolt11 which uses adescription_hash
, without settingdescription
. (deprecated v0.11.0) (#5747)
- gossip: We removed a warning for old
node_announcement
that was causing LND peers to disconnect (#5925) - gossip: We removed a warning for malformed
channel_update
that was causing LND peers to disconnect (#5897) - cli: accepts long paths as options (#5883)
- JSON-RPC:
getinfo
blockheight
no longer sits on 0 while we sync with bitcoind the first time. (#5963) - keysend: Keysend would strip even allowed extra TLV types before resolving, this is no longer the case. ([#6031])
- lightningd: we no longer stack multiple reconnection attempts if connections fail. (#5946)
- Plugins:
pay
uses the correct local channel for payments when there are multiple available (not just always the first!) (#5947) - Pruned channels are more reliably restored. (#5839)
delpay
: Actually delete the specified payment (mainly found byautoclean
). ([#6043])- pay: Don't assert() on malformed BOLT11 strings. (#5891)
- gossmap: Fixed
FATAL SIGNAL 11
on gossmap node announcement parsing. (#6005) - channeld no longer retains dead HTLCs in memory. (#5882)
- database: Correctly identity official release versions for database upgrade. (#5880)
- Plugins:
commando
now responds to remote JSON calls with the correct JSONid
field. (#5866) - JSON-RPC:
datastore
handles escapes instring
parameter correctly. (#5994) - JSON-RPC:
sendpay
now can send to a short-channel-id alias for the first hop. (#5846) - topology: Fixed memleak in
listchannels
(#5865)
- Protocol: Peer Storage: Distribute your encrypted backup to your peers, which can be retrieved to recover funds upon complete dataloss. (#5361)
- Protocol:
offers
breaking blinded payments change (total_amount_sat required, update_add_tlvs fix, Eclair compat.) (#5892) - Protocol: Dual-funding spec changed in incompatible ways, won't work with old versions (but maybe soon with Eclair!!) (#5956)
- Experimental-Dual-Fund: Open failures don't disconnect, but instead fail the opening process. (#5767)
- JSON-RPC:
listtransactions
channel
andtype
field removed at top level. (#5679)
22.11.1 - 2022-12-09: "Alameda Yield Generator II"
- JSON-RPC: reverts requirement for "jsonrpc" "2.0" inside requests (still deprecated though, just for a while longer!) (#5783)
- config:
announce-addr-dns
needs to be set to true to put DNS names into node announcements, otherwise they are suppressed.
Note: You should always set allow-deprecated-apis=false
to test for changes.
- config:
announce-addr-dns
(currently defaults tofalse
). This will default totrue
once enough of the network has upgraded to understand DNS entries. (#5796)
- Build: arm32 compiler error in fetchinvoice, due to bad types on 32-bit platforms. (#5785)
- JSON-RPC:
autoclean-once
responseuncleaned
count is now correct. (#5775) - Plugin:
autoclean
could misperform or get killed due to lightningd's invalid handling of JSON batching. (#5775) - reckless verbosity properly applied. (#5781)
- wireaddr: #5657 allow '_' underscore in hostname part of DNS FQDN (#5789)
22.11 - 2022-11-30: "Alameda Yield Generator"
This release named by @endothermicdev.
- Reckless - a Core Lightning plugin manager (#5647)
- Config:
--database-upgrade=true
required if a non-release version wants to (irrevocably!) upgrade the db. (#5550) - Documentation:
lightningd-rpc
manual page describes details of our JSON-RPC interface, including compatibility and filtering. (#5681) - JSON-RPC:
filter
object allows reduction of JSON response to (most) commands. (#5681) - cli: new
--filter
parameter to reduce JSON output. (#5681) - pyln: LightningRpc has new
reply_filter
context manager for reducing output of RPC commands. (#5681) - JSON-RPC:
listhtlcs
new command to list all known HTLCS. (#5594) - Plugins:
autoclean
can now delete old forwards, payments, and invoices automatically. (#5594) - Plugins:
autoclean-once
command for a single cleanup. (#5594) - Plugins:
autoclean-status
command to see what autoclean is doing. (#5594) - Config:
accept-htlc-tlv-types
lets us accept unknown even HTLC TLV fields we would normally reject on parsing (was EXPERIMENTAL-onlyexperimental-accept-extra-tlv-types
). (#5619) - JSON-RPC: The
extratlvs
argument forkeysend
now allows quoting the type numbers in string (#5674) - JSON-RPC:
batching
command to allow database transactions to cross multiple back-to-back JSON commands. (#5594) - JSON-RPC:
channel_opened
notificationchannel_ready
flag. (#5490) - JSON-RPC:
delforward
command to delete listforwards entries. (#5594) - JSON-RPC:
delpay
takes optionalgroupid
andpartid
parameters to specify exactly what payment to delete. (#5594) - JSON-RPC:
fundchannel
,multifundchannel
andfundchannel_start
now accept areserve
parameter to indicate the absolute reserve to impose on the peer. (#5315) - Plugins:
keysend
will now attach the longest valid text field in the onion to the invoice (so you can have Sphinx.chat users spam you!) (#5619) - JSON-RPC:
keysend
now hasextratlvs
option in non-EXPERIMENTAL builds. (#5619) - JSON-RPC:
listforwards
now showsin_htlc_id
andout_htlc_id
(#5594) - JSON-RPC:
makesecret
can take a string argument instead of hex. (#5633) - JSON-RPC:
pay
andlistpays
now lists the completion time. (#5398) - Plugins: Added notification topic "block_processed". (#5581)
- Plugins:
keysend
now exposes theextratlvs
field (#5674) - Plugins: The
openchannel
hook may return a custom absolutereserve
value that the peer must not dip below. (#5315) - Plugins:
getmanfest
response can containnonnumericids
to indicate support for modern string-based JSON request ids. (#5727) - Protocol: We now delay forgetting funding-spent channels for 12 blocks (as per latest BOLTs, to support splicing in future). (#5592)
- Protocol: We now set the
dont_forward
bit on private channel_update's message_flags (as per latest BOLTs). (#5592) - cln-plugin: Options are no longer required to have a default value (#5369)
- Protocol: We now require all channel_update messages include htlc_maximum_msat (as per latest BOLTs) (#5592)
- Protocol: Bolt7 #911 DNS annoucenent support is no longer EXPERIMENTAL (#5487)
- JSON-RPC:
listfunds
now lists coinbase outputs as 'immature' until they're spendable (#5664) - JSON-RPC: UTXOs aren't spendable while immature (#5664)
- Plugins:
openchannel2
now always includes thechannel_max_msat
(#5650) - JSON-RPC:
createonion
no longer allows non-TLV-style payloads. (#5639) - cln-plugin: Moved the state binding to the plugin until after the configuration step (#5493)
- pyln-spec: package updated to latest spec version. (#5621)
- JSON-RPC:
listforwards
now never showspayment_hash
; uselisthtlcs
. (#5594) - cln-rpc: The
wrong_funding
argument forclose
was changed frombytes
tooutpoint
(#5444) - JSON-RPC: Error code from bcli plugin changed from 400 to 500. (#5596)
- Plugins:
balance_snapshot
notification does not send balances for channels that aren't locked-in/opened yet (#5587) - Plugins: RPC operations are now still available during shutdown. (#5577)
- JSON-RPC:
listpeers
status
now refers to "channel ready" rather than "funding locked" (BOLT language change for zeroconf channels) (#5490) - Protocol:
funding_locked
is now calledchannel_ready
as per latest BOLTs. (#5490)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON-RPC:
autocleaninvoice
(use optionautoclean-expiredinvoices-age
) (#5594) - JSON-RPC:
delexpiredinvoice
: useautoclean-once
. (#5594) - JSON-RPC:
commando-rune
restrictions is always an array, each element an array of alternatives. Replaces a string with|
-separators, so no escaping necessary except for\\
. (#5539) - JSON-RPC:
channel_opened
notificationfunding_locked
flag (usechannel_ready
: BOLTs namechange). (#5490) - Plugins: numeric JSON request ids: modern ones will be strings (see doc/lightningd-rpc.7.md!) (#5727)
- Protocol: we no longer forward HTLCs with legacy onions. (#5639)
hsmtool
: hsm_secret (ignored) on cmdline for dumponchaindescriptors (deprecated in v0.9.3) (#5490)- Plugins: plugin init
use_proxy_always
(deprecated v0.10.2) (#5490) - JSON-RPC: plugins must supply
usage
parameter (deprecated v0.7) (#5490) - Old order of the
status
parameter in thelistforwards
rpc command (deprecated in v0.10.2) (#5490) - JSONRPC: RPC framework now requires the
"jsonrpc"
property inside the request (deprecated in v0.10.2) (#5490) - JSON API: Removed double wrapping of
rpc_command
payload inrpc_command
JSON field (deprecated v0.8.2) (#5490)
- plugins:
pay
now knows it can use locally-connected wumbo channels for large payments. (#5746) - lightningd: do not abort while parsing hsm pwd (#5725)
- plugins: on large/slow nodes we could blame plugins for failing to answer init in time, when we were just slow. (#5741)
- ld: Reduce identification of own transactions to not slow down over time, reducing block processing time (#5715)
- Fixed gossip_store corruption from duplicate private channel updates (#5661)
- Fixed a condition for newly created channels that could trigger a need for reconnect. (#5601)
- proper gossip_store operation may resolve some previous gossip propagation issues (#5591)
- onchaind: Witness weight estimations could be slightly lower than the VLS signer (#5669)
- Protocol: we now correctly decrypt non-256-length onion errors (we always forwarded them fine, now we actually can parse them). (#5698)
- devtools:
mkfunding
command no longer crashes (abort) (#5677) - plugins: on large/slow nodes we could blame plugins for failing to answer init in time, when we were just slow. (#5741)
- Plugins:
funder
now honors lease requests across RBFs (#5650) - Plugins:
keysend
now removes unknown even (technically illegal!) fields, to try to accept more payments. (#5645) - channeld: Channel reinitialization no longer fails when the number of outstanding outgoing HTLCs exceeds
max_accepted_htlcs
. (#5640) - pay: Squeezed out the last
msat
from our local view of the network (#5315) - peer_control: getinfo shows the correct port on discovered IPs (#5585)
- bcli: don't expose bitcoin RPC password on commandline (#5509)
- Plugins: topology plugin could crash when it sees duplicate private channel announcements. (#5593)
- JSON-RPC:
commando-rune
now handles \ escapes properly. (#5539) - peer_control: getinfo showing unannounced addresses. (#5584)
- JSON-RPC:
pay
andsendpay
localofferid
is nowlocalinvreqid
. (#5676) - Protocol: Support for forwarding blinded payments (as per latest draft) (#5646)
- offers: complete rework of spec from other teams (yay!) breaks previous compatibility (boo!) (#5646)
- offers: old
payer_key
proofs won't work. (#5646) - bolt12: remove "vendor" (use "issuer") and "timestamp" (use "created_at") fields (deprecated v0.10.2). (#5490)
Point release with some bugfixes and patches.
- build:
mrkd
andmistune
not required to build project
- lnprototest: builds for lnprototest tests now use 22.04 LTS, which fixes a problem with loading
mako
. (#5583) - Plugins: topology plugin could crash when it sees duplicate private channel announcements (#5593)
- connectd: proper
gossip_store
operation may resolve some previous gossip propagation issues and connectd crashes (#5591) - connectd: Fixed a condition for newly created channels that could trigger a need for reconnect. (#5601)
peer_control
: getinfo showing unannounced addresses. (#5584)peer_control
: getinfo shows the correct port on discovered IPs (#5585)
0.12.0 - 2022-08-23: Web-8 init
This release named by @adi2011.
Developers please note the Great Msat Migration has begun:
- All JSON amount field names now end in "_msat" (others are deprecated)
- Their values are strings ending in "msat", but will soon be normal integers.
- You should accept both: set
allow-deprecated-apis=false
to test!
- NEW:
commando
a new builtin plugin to send/recv peer commands over the lightning network, using runes. (#5370) - NEW: New built-in plugin
bookkeeper
w/ commandsbkpr-listaccountevents
,bkpr-listbalances
,bkpr-listincome
,bkpr-channelsapy
,bkpr-dumpincomecsv
,bkpr-inspect
(#5071) - NEW: Emergency channel backup ("static backup") which allows us to seek fund recovery from honest peers in case of complete data loss (#5422)
- Config:
log-level=debug:<partial-nodeid>
supported to get debug-level logs for everything about a peer. (#5349) - JSON-RPC:
connect
use the standard port derivation when the port is not specified. (#5242) - JSON-RPC:
fetchinvoice
changes
amount_msat
(#5306) - JSON-RPC: Added
mindepth
argument to specify the number of confirmations we require forfundchannel
andmultifundchannel
(#5275) - JSON-RPC:
listpeers
new fields forfunding
(remote_funds_msat
,local_funds_msat
,fee_paid_msat
,fee_rcvd_msat
). (#5477) - JSON-RPC:
listpeers
add optionalremote_addr
(#5244) - JSON-RPC:
listforwards
now showsout_channel
in more cases: even if it couldn't actually send to it. (#5330) - JSON-RPC:
pay
attempts
amount_msat
field. (#5306) - Protocol: private channels will only route using short-channel-ids if channel opened with option_scid_alias-supporting peer. (#5501)
- Protocol: invoice routehints will use fake short-channel-ids for private channels if channel opened with option_scid_alias-supporting peer. (#5501)
- Protocol: we now advertize the
option_channel_type
feature (which we actually supported since v0.10.2) (#5455) - Plugins:
channel_state_changed
now triggers for a v1 channel's initial "CHANNELD_AWAITING_LOCKIN" state transition (from prior state "unknown") (#5381) - Plugins:
htlc_accepted_hook
amount_msat
field. (#5306) - Plugins:
htlc_accepted
now exposes theshort_channel_id
for the channel from which that HTLC is coming from and the low-level per-channel HTLCid
, which are necessary for bridging two different Lightning Networks when MPP is involved. (#5303) - Plugins: The
openchannel
hook may return amindepth
indicating how many confirmations are required. (#5275) - msggen: introduce chain of responsibility pattern to make msggen extensible (#5216)
- cln_plugin: persist cln configuration from init msg (#5279)
- pyln-testing: Added utilities to read and parse
gossip_store
file for nodes. (#5275) hsmtool
: new commandcheckhsm
to check BIP39 passphrase against hsm_secret. (#5441)- contrib: Added
fund_ln
to the contrib/startup_regtest.sh (#5062) - build: Added m1 architecture support for macos (#4988)
- build: Reproducible builds now include rust binaries such as the
cln-grpc
plugin (#5421)
lightningd
: will refuse to start with the wrong node_id (i.e. hsm_secret changes). (#5425)connectd
: prefer IPv6 connections when available. (#5244)connectd
: Only use IP discovery as fallback when no addresses would be announced (#5344)connectd
: give busy peers more time to respond to pings. (#5347)gossipd
: now accepts spam gossip, but squelches it for (#5239)- gossip: gossip_store updated to version 10. (#5239)
- Options:
log-file
option specified multiple times opens multiple log files. (#5281) - JSON-RPC:
sendpay
andsendonion
now obey the first hop "channel" short_channel_id, if specified. (#5505) - JSON-RPC:
signpsbt
no longer crashes if it doesn't like what your PSBT is (#5506) - JSON-RPC:
signpsbt
will now add redeemscript + witness-utxo to the PSBT for an input that we can sign for, before signing it. (#5506) - JSON-RPC:
plugin start
now assumes relative path to default plugins dir if the path is not found in absolute context. i.e. lightning-cli plugin start my_plugin.py (#5211) - JSON-RPC:
fundchannel
: now errors if you try to buy a liquidity ad but dont' haveexperimental-dual-fund
enabled (#5389) - JSON-RPC: "_msat" fields can be raw numbers, not "123msat" strings (please handle both!) (#5306)
- JSON-RPC:
invoice
,sendonion
,sendpay
,pay
,keysend
,fetchinvoice
,sendinvoice
:msatoshi
argument is now calledamount_msat
to match other fields. (#5306)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON-RPC:
listpeers
.funded
fieldslocal_msat
andremote_msat
. (#5477) - JSON-RPC:
listtransactions
msat
(useamount_msat
) (#5306) - JSON-RPC: checkmessage return an error when the pubkey is not specified and it is unknown in the network graph. (#5252)
- JSON-RPC: "_msat" fields as "123msat" strings (will be only numbers) (#5306)
- JSON-RPC:
sendpay
route
elementsmsatoshi
(useamount_msat
) (#5306) - JSON-RPC:
pay
,decode
,decodepay
,getroute
,listinvoices
,listpays
andlistsendpays
msatoshi
fields (useamount_msat
). (#5306) - JSON-RPC:
getinfo
msatoshi_fees_collected
field (usefees_collected_msat
). (#5306) - JSON-RPC:
listpeers
channels
:msatoshi_to_us
,msatoshi_to_us_min
,msatoshi_to_us_max
,msatoshi_total
,dust_limit_satoshis
,our_channel_reserve_satoshis
,their_channel_reserve_satoshis
,spendable_msatoshi
,receivable_msatoshi
,in_msatoshi_offered
,in_msatoshi_fulfilled
,out_msatoshi_offered
,out_msatoshi_fulfilled
,max_htlc_value_in_flight_msat
andhtlc_minimum_msat
(useto_us_msat
,min_to_us_msat
,max_to_us_msat
,total_msat
,dust_limit_msat
,our_reserve_msat
,their_reserve_msat
,spendable_msat
,receivable_msat
,in_offered_msat
,in_fulfilled_msat
,out_offered_msat
,out_fulfilled_msat
,max_total_htlc_in_msat
andminimum_htlc_in_msat
). (#5306) - JSON-RPC:
listinvoices
andpay
msatoshi_received
andmsatoshi_sent
(useamount_received_msat
,amount_sent_msat
) (#5306) - JSON-RPC:
listpays
andlistsendpays
msatoshi_sent
(useamount_sent_msat
) (#5306) - JSON-RPC:
listforwards
in_msatoshi
,out_msatoshi
andfee
(usein_msat
,out_msat
andfee_msat
) (#5306) - JSON-RPC:
listfunds
outputs
value
(useamount_msat
) (#5306) - JSON-RPC:
fetchinvoice
changes
msat
(useamount_msat
) (#5306) - JSON-RPC:
pay
attempts
amount
field (useamount_msat
). (#5306) - JSON-RPC:
invoice
,sendonion
,sendpay
,pay
,keysend
,fetchinvoice
,sendinvoice
msatoshi
(useamount_msat
) (#5306) listconfigs
plugins
options
which are not set are omitted, notnull
. (#5306)- Plugins:
htlc_accepted_hook
amount
field (useamount_msat
) (#5306) - Plugins:
coin_movement
notification:balance
,credit
,debit
andfees
(usebalance_msat
,credit_msat
,debit_msat
andfees_msat
) (#5306) - Plugins:
rbf_channel
andopenchannel2
hookstheir_funding
(usetheir_funding_msat
) (#5306) - Plugins:
openchannel2
hookdust_limit_satoshis
(usedust_limit_msat
) (#5306) - Plugins:
openchannel
hookfunding_satoshis
(usefunding_msat
) (#5306) - Plugins:
openchannel
hookdust_limit_satoshis
(usedust_limit_msat
) (#5306) - Plugins:
openchannel
hookchannel_reserve_satoshis
(usechannel_reserve_msat
) (#5306) - Plugins:
channel_opened
notificationamount
(usefunding_msat
) (#5306) - Plugins:
htlc_accepted
forward_amount
(useforward_msat
) (#5306)
- Protocol: We no longer create gossip messages which use zlib encoding (we still understand them, for now!) (#5226)
- JSON-RPC:
getsharedsecret
API: usemakesecret
(#5430) - JSON-RPC: removed
listtransactions
outputs
satoshis
field (deprecated v0.10.1) (#5264) - JSON-RPC: removed
listpeers
channels
deprecated fields (deprecated v0.10.1) (#5264) - JSON-RPC: removed
listpeers
channels
closer
now omitted, rather thannull
(deprecated v0.10.1) (#5264) - libhsmd: Removed the
libhsmd_python
wrapper as it was unused (#5415) - Options: removed
enable-autotor-v2-mode
option (deprecated v0.10.1) (#5264)
- db: postgresql crash on startup when dual-funding lease open is pending with "s32 field doesn't match size: expected 4, actual 8" (#5513)
connectd
: various crashes and issues fixed by simplification and rewrite. (#5261)connectd
: Port of a DNS announcement can be 0 if unspecified (#5434)dualopend
: Issue if the number of outputs decreases in a dualopen RBF or splice. (#5378)channeld
: Enforce our ownminimum_depth
beyond just confirming (#5275)- logging:
log-prefix
now correctly prefixes all log messages. (#5349) - logging:
log-level
io
shows JSONRPC output, as well as input. (#5306) - PSBT: Fix signature encoding to comply with BIP-0171. (#5307)
- signmessage: improve the UX of the rpc command when zbase is not a valid one (#5297)
- JSON-RPC: Adds dynamically detected public IP addresses to
getinfo
(#5244) - cln-rpc: naming mismatch for
ConnectPeer
causingconnectpeer
to be called on the JSON-RPC (#5362) - pyln-spec: update the bolts implementation (#5168)
- Plugins: setting the default value of a parameter to
null
is the same as not setting it (pyln plugins did this!). (#5460) - Plugins: plugins would hang indefinitely despite
lightningd
closing the connection (#5362) - Plugins:
channel_opened
notificationfunding_locked
field is now accurate: was alwaystrue
. (#5489) - Upgrade docker base image from Debian buster to bullseye to work with glibc 2.29+ #5276 (#5278)
- docker: The docker images are now built with the rust plugins
cln-grpc
(#5270)
0.11.2 - 2022-06-24: Simon's Carefully Chosen Release Name III
Regressions since 0.10.2 which could not wait for the 0.12 release, which especially hurt larger nodes.
- Protocol: treat LND "internal error" as warnings, not force close events (like v0.10) (#5326)
- connectd: no longer occasional crashes when peers reconnect. (#5300)
- connectd: another crash fix on trying to reconnect to disconnecting peer. (#5340)
- topology: Under some circumstances we were considering the limits on the wrong direction for a channel (#5286)
- routing: Fixed an issue where we would exclude the entire channel if either direction was disabled, or we hadn't seen an update yet. (#5286)
- connectd: large memory usage with many peers fixed. (#5312)
- connectd: reduce initial CPU load when connecting to peers. (#5328)
- lightnind: fix failed startup "Could not load channels from the database" if old TORv2 addresses were present. (#5331)
0.11.1 - 2022-05-13: Simon's Carefully Chosen Release Name II
Single change which fixed a bug introduced in 0.11.0 which could cause
unwanted unilateral closes (bad reestablish revocation_number: 0 vs 3
)
- connectd: make sure we don't keep stale reconnections around. (#5256)
- connectd: fix assert which we could trigger. (#5256)
0.11.0.1 - 2022-04-04: Simon's Carefully Chosen Release Name
This release would have been named by Simon Vrouwe, had he responded to my emails!
This marks the name change to core-lightning (#CLN).
- Protocol: we now support opening multiple channels with the same peer. (#5078)
- Protocol: we send/receive IP addresses in
init
, and send updated node_announcement when two peers report the same remote_addr (disable-ip-discovery
suppresses this announcement). (#5052) - Protocol: we more aggressively send our own gossip, to improve propagation chances. (#5200)
- Plugins:
cln-grpc
first class GRPC interface for remotely controlling nodes over mTLS authentication; setgrpc-port
to activate (#5013) - Database: With the
sqlite3://
scheme for--wallet
option, you can now specify a second file path for real-time database backup by separating it from the main file path with a:
character. (#4890) - Protocol:
pay
(and decode, etc) supports bolt11 payment_metadata a-la lightning/bolts#912 (#5086) - JSON-RPC:
invoice
has a new parameterdeschashonly
to put hash of description in bolt11. (#5121) - JSON-RPC:
pay
has new parameterdescription
, will be required if bolt11 only has a hash. (#5122) - JSON-RPC:
pay
has new parametermaxfee
for setting absolute fee (instead of usingmaxfeepercent
and/orexemptfee
) (#5122) - JSON-RPC:
listforwards
has new entrystyle
, currently "legacy" or "tlv". (#5146) - JSON-RPC:
delinvoice
has a new parameterdesconly
to remove description. (#5121) - JSON-RPC: new
setchannel
command generalizessetchannelfee
: you can now alter thehtlc_minimum_msat
andhtlc_maximum_msat
your node advertizes. (#5103) - Config:
htlc-minimum-msat
andhtlc-maximum-msat
to set default values to advertizes for new channels. (#5136) - JSON-RPC:
listpeers
now includes apushed_msat
value. For leased channels, is the total lease_fee. (#5043) - JSON-RPC:
getinfo
result now includesour_features
(bits) for various Bolt #9 contexts (#5047) - Docker build for ARM defaults to
bitcoin
, but can be overridden with theLIGHTNINGD_NETWORK
envvar. (#4896) - Developer: A new Rust library called
cln-rpc
can be used to interact with the JSON-RPC (#5010) - JSON-RPC: A new
msggen
library allows easy generation of language bindings for the JSON-RPC from the JSON schemas (#5010) - JSON-RPC:
listchannels
now includes thefunding_outnum
(#5016) - JSON-RPC:
coin_movement
to 'external' accounts now include an 'originating_account' field (#5019) - JSON-RPC: Add
exclude
option forpay
command to manually exclude channels or nodes when finding a route. (#4906) - Database: Speed up loading of pending HTLCs during startup by using a partial index. (#4925)
- JSON-RPC:
close
by peer id will fail if there is more than one live channel (usechannel_id
orshort_channel_id
as id arg). (#5078) - JSON_RPC:
sendcustommsg
now works with any connected peer, even when shutting down a channel. (#4985) - JSON_RPC:
ping
now works with connected peers, even without a channel. (#4985) - cli: Addition of HSM specific error code in lightning-cli (#4908)
- config: If the port is unspecified, the default port is chosen according to used network similarly to Bitcoin Core. (#4900)
- Plugins:
shutdown
notification is now send when lightningd is almost completely shutdown, RPC calls then fail with error code -5. (#4897) - Protocol:
signet
addresses and invoices now usetbs
instead oftb
. (#4929)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON-RPC:
pay
for a bolt11 which uses adescription_hash
, without settingdescription
. (#5122) - JSON-RPC:
invoice
expiry
no longer allowed to be a string with suffix, use an integer number of seconds. (#5104) - JSON-RPC:
fundpsbt
/utxopsbt
reserve
must be a number, not bool (fortrue
use 72/don't specify, forfalse
use 0). Numbers have been allowed since v0.10.1. (#5104) - JSON-RPC:
shutdown
no longer allows p2pkh or p2sh addresses. (#5086) - JSON-RPC:
sendpay
route
argumentstyle
"legacy" (don't use it at all, we ignore it now and always use "tlv" anyway). (#5120) - JSON-RPC:
setchannelfee
(usesetchannel
). (#5103)
- JSON-RPC:
legacypay
(pay
replaced it in 0.9.0). (#5122) - Protocol: support for legacy onion format removed, since everyone supports the new one. (#5058)
- Protocol: ... but we still forward legacy HTLC onions for now. (#5146)
- Plugins: The
message
field on thecustommsg
hook (deprecated in v0.10.0) (#4902) - JSON-RPC:
fundchannel_complete
txid
andtxout
parameters (deprecated in v0.10.0) (#4902)
- onchaind: we sometimes failed to close upstream htlcs if more than one HTLC is in flight during unilateral close. (#5130)
- JSON-RPC:
listpays
always includesbolt11
orbolt12
field. (#5122) - cli: don't ask to confirm the password if the
hsm_secret
is already encrypted. (#5085) - cli: check if the
hsm_secret
password and the confirmation match from the command line (#5085) - JSON-RPC:
connect
notification now called even if we already have a live channel. (#5078) - docker: The docker image is now built with postgresql support (#5081)
- hsmd: Fixed a significant memory leak (#5051)
- closingd: more accurate weight estimation helps mutual closing near min/max feerates. (#5004)
- Protocol: Always flush sockets to increase chance that final message get to peer (esp. error packets). (#4984)
- JSON-RPC: listincoming showed incoming_capacity_msat field 1000 times actual value. (#4913)
- Options: Respect --always-use-proxy AND --disable-dns when parsing wireaddresses to listen on. (#4829)
- lightningd: remove slow memory leak in DEVELOPER builds. (#4931)
- JSON-RPC:
paystatus
entries no longer have two identicalamount_msat
entries. (#4911) - We really do allow providing multiple addresses of the same type. (#4902)
- Fixed
experimental-websocket
intermittent read errors (#5090) - Fixed
experimental-websocket-port
not to leave zombie processes. (#5101) - Config option
--lease-fee-base-msat
renamed to--lease-fee-base-sat
(#5047) - Config option
--lease-fee-base-msat
deprecated and will be removed next release (#5047) - Fixed
experimental-websocket-port
to work with default addresses. (#4945) - Protocol: removed support for v0.10.1 onion messages. (#4921)
- Protocol: Ability to announce DNS addresses (#4829)
- Protocol: disabled websocket announcement due to LND propagation issues (#5200)
0.10.2 - 2021-11-03: Bitcoin Dust Consensus Rule
This release named by @vincenzopalazzo.
- config: new option
--max-dust-htlc-exposure-msat
, which limits the total amount of sats to be allowed as dust on a channel (#4837) - With
sqlite3
db backend we now use a 60-second busy timer, to allow backup processes likelitestream
to operate safely. (#4867) - pay: Payment attempts are now grouped by the pay command that initiated them (#4567)
- JSON-RPC:
setchannelfee
gives a grace period (enforcedelay
) before rejecting old-fee payments: default 10 minutes. (#4806) - Support filtering
listpays
by their status. (#4595) close
now notifies about the feeranges each side uses. (#4784)- Protocol: We now send and support
channel_type
in channel open (not dual-funding though). (#4616) - Protocol: We now perform quick-close if the peer supports it. (#4599)
- JSONRPC:
close
now takes afeerange
parameter to set min/max fee rates for mutual close. (#4599) - Protocol: Allow sending large HTLCs if peer offers
option_support_large_channel
(> 4294967295msat) (#4599) - pyln-client: routines for direct access to the gossip store as Gossmap (#4582)
- Plugins:
shutdown
notification for clean exits. (#4754) - Plugins: Added
channel_id
andcommitnum
tocommitment_revocation
hook (#4760) - JSON-RPC:
datastore
,deldatastore
andlistdatastore
for plugins to store simple persistent key/value data. (#4674)
- pay: The route selection will now use the log-propability-based channel selection to increase success rate and reduce time to completion (#4771)
- Plugins:
pay
now biases towards larger channels, improving success probability. (#4771) - db: removal of old HTLC information and vacuuming shrinks large lightningd.sqlite3 by a factor of 2-3. (#4850)
- JSON-RPC:
ping
now only works if we have a channel with the peer. (#4804) - Protocol: Send regular pings to detect dead connections (particularly for Tor). (#4804)
- Build: Python is now required to build, as generated files are no longer checked into the repository. (#4805)
- pyln-spec: updated to latest BOLT versions. (#4763)
- JSON-RPC: Change order parameters in the
listforwards
command (#4668) - db: We now set a busy timeout to safely allow others to access sqlite3 db (e.g. litestream) (#4554)
- connectd: Try non-TOR connections first (#4731)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- Protocol: No longer restrict HTLCs to less than 4294967295msat (#4599)
- Change order of the
status
parameter in thelistforwards
rpc command. (#4668) - RPC framework now requires the
"jsonrpc"
property inside the request. (#4742) - Plugins: Renames plugin init
use_proxy_always
toalways_use_proxy
(#4731)
- peer: Fixed a crash when a connection is lost outside of a DB transaction (#4894)
- We now no longer self-limit the number of file descriptors (which limits the number of channels) in sufficiently modern systems, or where we can access
/proc
or/dev/fd
. We still self-limit on old systems where we cannot find the list of open files on/proc
or/dev/fd
, so if you need > ~4000 channels, upgrade or mount/proc
. (#4872) - errors: Errors returning a
channel_update
no longer return an outdated one. (#4876) - pay:
listpays
returns payments orderd by their creation date (#4567) - pay:
listpays
no longer groups attempts from multiple attempts to pay an invoice (#4567) - sqlite3: Relaxed the version match requirements to be at least a minimum version and a major version match (#4852)
- pay:
pay
would sometimes misreport a final state ofpending
instead offailed
(#4803) - Plugins: C plugins would could leak memory on every command (esp. seen when hammering topology's
listchannels
). (#4737) - libplugin: Fatal error messages from
plugin_exit()
now logged in lightningd. (#4754) openchannel_signed
would fail on PSBT comparison of materially identical PSBTs (#4752)- doc:
listnodes
fields now correctly documented. (#4750) - EXPERIMENTAL: crash for some users while requesting dual funding leases. (#4751)
- Plugins: Don't drop complaints about silly channels to
stderr
. (#4730) - connectd: Do not try address hint twice (#4731)
- channel_upgrade draft upgraded: cannot upgrade channels until peers also upgrade. (#4830)
- bolt12:
chains
ininvoice_request
and invoice is deprecated,chain
is used instead. (#4849) - bolt12:
vendor
is deprecated: the field is now calledissuer
. (#4849) - Protocol: Updated
onion_message
support to match updated draft specification (with backwards compat for old version) (#4800) - Anchor output mutual close allow a fee higher than the final commitment transaction (as per lightning-rfc #847) (#4599)
0.10.1 - 2021-08-09: "eltoo: Ethereum Layer Too"
This release named by @nalinbhardwaj.
NOTE ONE: Both the dual-funding and offers protocols have changed, and are incompatible with older releases (they're both still draft) #reckless
NOTE TWO: rebalance
and drain
plugins will need to be redownloaded as
older versions will no longer work -- payment_secret
is now compulsory.
- JSON-RPC:
invoice
now outputs explicitpayment_secret
as its own field. (#4646) - JSON-RPC:
listchannels
can be queried bydestination
. (#4614) - JSON-RPC:
invoice
now giveswarning_private_unused
if unused unannounced channels could have provided sufficient capacity. (#4585) - JSON-RPC:
withdraw
,close
(and others) now accept taproot (and other future) segwit addresses. (#4591) - JSON-RPC: HTLCs in
listpeers
are now annotated with a status if they are waiting on anhtlc_accepted
hook of a plugin. (#4580) - JSON-RPC:
close
returnstype
"unopened" if it simply discards channel instead of empty object. (#4501) - JSON-RPC:
listfunds
has a newreserved_to_block
field. (#4510) - JSON-RPC:
createonion
RPC command now accepts an optionalonion_size
. (#4519) - JSON-RPC: new command
parsefeerate
which takes a feerate string and returns the calculated perkw/perkb (#4639) - Protocol:
option_shutdown_anysegwit
allows future segwit versions on shutdown transactions. (#4556) - Protocol: We now send and accept
option_shutdown_anysegwit
so you can close channels to v1+ segwit addresses. (#4591) - Plugins: Plugins may now send custom notifications that other plugins can subscribe to. (#4496)
- Plugins: Add
funder
plugin, which allows you to setup a policy for funding v2 channel open requests. Requres --experimental-dual-fund option (#4489) - Plugins:
funder
plugin includes commandfunderupdate
which will show current funding configuration and allow you to modify them (#4489) - Plugins: Restart plugin on
rescan
when binary was changed. (#4609) - keysend:
keysend
can now reach non-public nodes by providing theroutehints
argument if they are known. (#4611) - keysend: You can now add extra TLVs to a payment sent via
keysend
(#4610) - config:
force_feerates
option to allow overriding feerate estimates (mainly for regtest). (#4629) - config: New option
log-timestamps
allow disabling of timestamp prefix in logs. (#4504) - hsmtool: allow piped passwords (#4571)
- libhsmd: Added python bindings for
libhsmd
(#4498) - libhsmd: Extracted the
hsmd
logic into its own library for other projects to use (#4497) - lightningd: we now try to restart if subdaemons are upgraded underneath us. (#4471)
- JSON-RPC:
invoice
now allows creation of giant invoices (>= 2^32 msat) (#4606) - JSON-RPC:
invoice
warnings are now better defined, andwarning_mpp_capacity
is no longer included (sincewarning_capacity
covers that). (#4585) - JSON-RPC:
getroute
is now implemented in a plugin. (#4585) - JSON-RPC:
sendonion
no longer requires the gratuitousdirection
andchannel
fields in thefirsthop
parameter. (#4537) - JSON-RPC: moved dev-sendcustommsg to sendcustommsg (#4650)
- JSON-RPC:
listpays
output is now ordered by thecreated_at
timestamp. (#4518) - JSON-RPC:
listsendpays
output is now ordered byid
. (#4518) - JSON-RPC:
autocleaninvoice
now returns an object, not a raw string. (#4501) - JSON-RPC:
fundpsbt
will not include UTXOs that aren't economic (can't pay for their own fees), unless 'all' (#4509) - JSON-RPC:
close
now always returns notifications on delays. (#4465) - Protocol: All new invoices require a
payment_secret
(i.e. modern TLV format onion) (#4646) - Protocol: Allow out-of-bound fee updates from peers, as long as they're not getting worse (#4681)
- Protocol: We can no longer connect to peers which don't support
payment_secret
. (#4646) - Protocol: We will now reestablish and negotiate mutual close on channels we've already closed (great if peer has lost their database). (#4559)
- Protocol: We now assume nodes support TLV onions (non-legacy) unless we have a
node_announcement
which says they don't. (#4646) - Protocol: Use a more accurate fee for mutual close negotiation. (#4619)
- Protocol: channel feerates reduced to bitcoind's "6 block ECONOMICAL" rate. (#4507)
- keysend now uses 22 for the final CLTV, making it rust-lightning compatible. (#4548)
- Plugins:
fundchannel
andmultifundchannel
will now reserve funding they use for 2 weeks instead of 12 hours. (#4510) - Plugins: we now always send
allow-deprecated-apis
in getmanifest. (#4465)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- lightningd:
enable-autotor-v2-mode
option. Use v3. See https://blog.torproject.org/v2-deprecation-timeline. (#4549) - lightningd: v2 Tor addresses. Use v3. See https://blog.torproject.org/v2-deprecation-timeline. (#4549)
- JSON-RPC:
listtransactions
outputs
satoshis
field (usemsat
instead). (#4594) - JSON-RPC:
listfunds
channels
funding_allocation_msat
andfunding_msat
: usefunding
. (#4594) - JSON-RPC:
listfunds
channels
last_tx_fee
: uselast_tx_fee_msat
. (#4594) - JSON-RPC:
listfunds
channels
closer
is now omitted if it does not apply, not JSONnull
. (#4594)
- JSON-RPC:
newaddr
no longer includesaddress
field (deprecated in 0.7.1) (#4465) - pyln: removed deprecated
fundchannel
/fundchannel_start
satoshi
arg. (#4465) - pyln: removed deprecated pay/sendpay
description
arg. (#4465) - pyln: removed deprecated close
force
variant. (#4465)
- JSON-RPC:
listinvoice
no longer crashes if given an invalid (or bolt12)invstring
argument. (#4625) - JSON-RPC:
listconfigs
would list some boolean options as strings"true"
or"false"
instead of using JSON booleans. (#4594) - Protocol: don't ever send 0
fee_updates
(regtest bug). (#4629) - Protocol: We could get stuck on signature exchange if we needed to retransmit the final
revoke_and_ack
. (#4559) - Protocol: Validate chain hash for
gossip_timestamp_filter
messages (#4514) - Protocol: We would sometimes gratuitously disconnect 30 seconds after an HTLC failed. (#4550)
- Protocol: handle complex feerate transitions correctly. (#4480)
- Protocol: Don't create more than one feerate change at a time, as this seems to desync with LND. (#4480)
- Build: Fixes
make full-check
errors on macOS (#4613) - Build: Fixes
make
with--enable-developer
option on macOS. (#4613) - Docs: Epic documentation rewrite: each now lists complete and accurate JSON output, tested against testsuite. (#4594)
- Config:
addr
autotor and statictor /torport arguments now advertized correctly. (#4603) - pay: Fixed an issue when filtering routehints when we can't find ourselves in the local network view. (#4581)
- pay: The presplitter mod will no longer exhaust the HTLC budget. (#4563)
- pay: Fix occasional crash paying an invoice with a routehint to us. (#4555)
- Compat: Handle windows-style newlines and other trailing whitespaces correctly in bitcoin-cli interface (#4502)
- bolt12 decode
timestamp
field deprecated in favor of new namecreated_at
. (#4669) - JSON-RPC:
listpeers
now includes thescratch_txid
for every inflight (if is a dual-funded channel) (#4521) - JSON-RPC: for v2 channels, we now list the inflights information for a channel (#4521)
- JSON-RPC:
fetchinvoice
can take a payer note, andlistinvoice
will show thepayer_notes
received. (#4625) - JSON-RPC:
fetchinvoice
andsendinvoice
will connect directly if they can't find an onionmessage route. (#4625) - JSON-RPC:
openchannel_init
now takes arequested_amt
, which is an amount to request from peer (#4639) - JSON-RPC:
fundchannel
now takes optionalrequest_amt
parameter (#4639) - JSON-RPC:
fundchannel
,multifundchannel
, andopenchannel_init
now accept acompact_lease
for any requested funds (#4639) - JSON-RPC: close now has parameter to force close a leased channel (
option_will_fund
) (#4639) - JSON-RPC:
listnodes
now includes thelease_rates
, if available (#4639) - JSON-RPC: new RPC
setleaserates
, for passing in the rates to advertise for a channel lease (option_will_fund
) (#4639) - JSON-RPC:
decode
now gives avalid
boolean (it does partial decodes of some invalid data). (#4501) - JSON-RPC:
listoffers
now showslocal_offer_id
when listing all offers. (#4625) - Protocol: we can now upgrade old channels to
option_static_remotekey
. See lightning/bolts#868 (#4532) - Protocol: we support the quiescence protocol from lightning/bolts#869 (#4520)
- Protocol: Replaces
init_rbf
'sfee_step
for RBF of v2 opens withfunding_feerate_perkw
, breaking change (#4648) - Protocol: BOLT12 offers can now be unsigned, for really short QR codes. (#4625)
- Protocol: offer signature format changed. (#4630)
- Plugins:
rbf_channel
hook haschannel_max_msat
parameter (#4489) - Plugins:
openchannel2
hook now includes optional fields for a channel lease request (#4639) - Plugins: add a
channel_max_msat
value to theopenchannel2
hook. Tells you the total max funding this channel is allowed to have. (#4489) - funder:
funderupdate
command to view and update params for contributing our wallet funds to v2 channel openings. Provides params for enablingoption_will_fund
. (#4664)
0.10.0 - 2021-03-28: Neutralizing Fee Therapy
This release named by @jsarenik.
- Protocol: we treat error messages from peer which refer to "all channels" as warnings, not errors. (#4364)
- Protocol: we now report the new (draft) warning message. (#4364)
- JSON-RPC:
connect
returnsaddress
it actually connected to (#4436) - JSON-RPC:
connect
returns "direction" ("in": they initiated, or "out": we initiated) ([#4452]) - JSON-RPC:
txprepare
andwithdraw
now return apsbt
field. (#4428) - JSON-RPC:
fundchannel_complete
takes a psbt parameter. (#4428) - pay:
pay
will now remove routehints that are unusable due to the entrypoint being unknown or unreachable. (#4404) - Plugins:
peer_connected
hook andconnect
notifications have "direction" field. ([#4452]) - Plugins: If there is a misconfiguration with important plugins we now abort early with a more descriptive error message. (#4418)
- pyln: Plugins that are run from the command line print helpful information on how to configure c-lightning to include them and print metadata about what RPC methods and options are exposed. (#4419)
- JSON-RPC:
listpeers
now shows latest feerate and unilateral close fee. (#4407) - JSON-RPC:
listforwards
can now filter by status, in and out channel. (#4349) - JSON-RPC: Add new parameter
excess_as_change
to fundpsbt+utxopsbt (#4368) - JSON-RPC:
addgossip
allows direct injection of network gossip messages. (#4361) - pyln-testing: The RPC client will now pretty-print requests and responses to facilitate log-based debugging. (#4357)
- Plugins: the
rpc_command
hook is now chainable. (#4384) - JSON-RPC: If bitcoind won't give a fee estimate in regtest, use minimum. (#4405)
- Protocol: we use
sync_complete
for gossip range query replies, with detection for older spec nodes. (#4389) - Plugins:
peer_connected
rejections now send a warning, not an error, to the peer. (#4364) - Protocol: we now send warning messages and close the connection, except on unrecoverable errors. (#4364)
- JSON-RPC:
sendpay
no longer extracts updates from errors, the caller should do it from theraw_message
. (#4361) - Plugins:
peer_connected
hook is now chainable (#4351) - Plugins:
custommsg
hook is now chainable (#4358)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON-RPC:
fundchannel_complete
txid
andtxout
parameters (usepsbt
) (#4428) - Plugins: The
message
field on thecustommsg
hook is deprecated in favor of thepayload
field, which skips the internal prefix. (#4394)
bcli
replacements must allowallowhighfees
argument (deprecated 0.9.1). (#4362)listsendpays
will no longer addamount_msat
null
(deprecated 0.9.1). (#4362)
- Protocol: overzealous close when peer sent more HTLCs than they'd told us we could send. (#4432)
- pay: Report the correct decoding error if bolt11 parsing fails. (#4404)
- pay:
pay
will now abort early if the destination is not reachable directly nor via routehints. (#4404) - pay:
pay
was reporting in-flight parts as failed (#4404) - pay:
pay
would crash on corrupt gossip store, which (if version was ever wrong) we'd corrupt again ([#4453]) - pyln: Fixed an error when calling
listfunds
with an older c-lightning version causing an error about an unknownspent
parameter (#4417) - Plugins:
dev-sendcustommsg
included the type and length prefix when sending a message. (#4413) - Plugins: The
custommsg
hook no longer includes the internal type prefix and length prefix in itspayload
(#4394) - db: Fixed an access to a NULL-field in the
channel_htlcs
table and resulting warning. (#4378) - pay: Payments with an empty route (self-payment) are now aborted. (#4379)
- Protocol: always accept channel_updates from errors, even they'd otherwise be rejected as spam. (#4361)
- connectd: Occasional crash in connectd due to use-after-free (#4360)
- lightningd: JSON failures when --daemon is used without --log-file. (#4350)
- lightningd: don't assert if time goes backwards temporarily. ([#4449])
These options are either enabled by explicit experimental config
parameters, or building with --enable-experimental-features
.
- lightningd:
experimental-dual-fund
runtime flag will enable dual-funded protocol on this node ([#4427]) - lightningd:
experimental-shutdown-wrong-funding
to allow remote nodes to close incorrectly opened channels. (#4421) - JSON-RPC: close has a new
wrong_funding
option to try to close out unused channels where we messed up the funding tx. (#4421) - JSON-RPC: Permit user-initiated aborting of in-progress opens. Only valid for not-yet-committed opens and RBF-attempts (#4424)
- JSON-RPC:
listpeers
now includes 'last_feerate', 'next_feerate', 'initial_feerate' and 'next_fee_step' for channels in state DUALOPEND_AWAITING_LOCKIN (#4399)
0.9.3 - 2021-01-20: Federal Qualitative Strengthening
This release named by Karol Hosiawa.
- JSON-RPC: The
listfunds
method now includes spent outputs if thespent
parameter is set to true. (#4296) - JSON-RPC:
createinvoice
new low-level invoice creation API. (#4256) - JSON-RPC:
invoice
now takes an optionalcltv
parameter. (#4320) - JSON-RPC:
listinvoices
can now query for an invoice matching apayment_hash
or abolt11
string, in addition tolabel
(#4312) - JSON-RPC: fundpsbt/utxopsbt have new param,
min_witness_utxo
, which sets a floor for the weight calculation of an added input (#4211) - docs:
doc/BACKUP.md
describes how to back up your C-lightning node. (#4207) - fee_base and fee_ppm to listpeers (#4247)
- hsmtool: password must now be entered on stdin. Password passed on the command line are discarded. (#4303)
- plugins:
start
command can now take plugin-specific parameters. (#4278) - plugins: new "multi" field allows an option to be specified multiple times. (#4278)
- pyln-client:
fundpsbt
/utxopsbt
now supportmin_witness_weight
param (#4295) - pyln: Added support for command notifications to LightningRpc via the
notify
context-manager. (#4311) - pyln: Plugin methods can now report progress or status via the
Request.notify
function (#4311) - pyln: plugins can now raise RpcException for finer control over error returns. (#4279)
- experimental-offers: enables fetch, payment and creation of (early draft) offers. (#4328)
- libplugin: init can return a non-NULL string to disable the plugin. (#4328)
- plugins: plugins can now disable themselves by returning
disable
, even if marked important. (#4328) - experimental-onion-messages enables send, receive and relay of onion messages. (#4328)
- JSON-RPC: invalid UTF-8 strings now rejected. (#4227)
- bitcoin: The default network was changed from "testnet" to "mainnet", this only affects new nodes (#4277)
- cli:
lightning-cli
now performs better sanity checks on the JSON-RPC requests it sends. (#4259) - hsmd: we now error at startup on invalid hsm_secret (#4307)
- hsmtool: all commands now error on invalid hsm_secret (#4307)
- hsmtool: the
encrypt
now asks you to confirm your password (#4307) - lightningd: the
--encrypted-hsm
now asks you to confirm your password when first set (#4307) - plugins: Multiple plugins can now register
db_write
hooks. (#4220) - plugins: more than one plugin can now register
invoice_payment
hook. (#4226) - pyln: Millisatoshi has new method,
to_whole_satoshi
; rounds value up to the nearest whole satoshi (#4295) - pyln:
txprepare
no longer supports the deprecateddestination satoshi feerate utxos
call format. (#4259)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- plugins: options to
init
are no longer given as strings if they are bool or int types (deprecated in 0.8.2). (#4278)
- JSON-RPC: The status of the shutdown meesages being exchanged is now displayed correctly. (#4263)
- JSONRPC:
setchannelfee
would fail an assertion if channel wasn't in normal state. (#4282) - db: Fixed a performance regression during block sync, resulting in many more queries against the DB than necessary. (#4319)
- hsmtool: the
generatehsm
command now generates an appropriately-sized hsm_secret (#4304) - keysend: Keysend now checks whether the destination supports keysend before attempting a payment. If not a more informative error is returned. (#4236)
- log: Do not terminate on the second received SIGHUP. (#4243)
- onchaind is much faster when unilaterally closing old channels. (#4250)
- onchaind uses much less memory on unilateral closes for old channels. (#4250)
- pay: Fixed an issue where waiting for the blockchain height to sync could time out. (#4317)
- pyln: parsing msat from a float string (#4237)
- hsmtool: fix a segfault on
dumponchaindescriptors
without network parameter (#4341) - db: Speed up deletion of peer especially when there is a long history with that peer. (#4337)
0.9.2 - 2020-11-20: Now with 0-of-N Multisig
This release named by Sergi Delgado Segura.
- Note: PSBTs now require bitcoind v0.20.1 or above *
- JSON-RPC: Added 'state_changes' history to listpeers channels (4126)
- JSON-RPC: Added 'opener' and 'closer' to listpeers channels (4126)
- JSON-RPC:
close
now sends notifications for slow closes (ifallow-deprecated-apis
=false) (4046) - JSON-RPC:
notifications
command to enable notifications. (4046) - JSON-RPC:
multifundchannel
has a new optional argument, 'commitment_feerate', which can be used to differentiate between the funding feerate and the channel's initial commitment feerate (4139) - JSON-RPC
fundchannel
now accepts an optional 'close_to' param, a bitcoin address that the channel funding should be sent to on close. Requiresopt_upfront_shutdownscript
(4132) - Plugins: Channel closure resaon/cause to channel_state_changed notification (4126)
- Plugins:
htlc_accepted
hook can now return customfailure_onion
. (4187) - Plugins: hooks can now specify that they must be called 'before' or 'after' other plugins. (4168)
- hsmtool: a new command was added to hsmtool for dumping descriptors of the onchain wallet (4171)
- hsmtool:
hsm_secret
generation from a seed-phrase following BIP39. (4065) - cli: print notifications and progress bars if commands provide them. (4046)
- pyln-client: pyln.client handles and can send progress notifications. (4046)
- pyln-client: Plugin method and hook requests prevent the plugin developer from accidentally setting the result multiple times, and will raise an exception detailing where the result was first set. (4094)
- pyln-client: Plugins have been integrated with the
logging
module for easier debugging and error reporting. (4101) - pyln-proto: Added pure python implementation of the sphinx onion creation and processing functionality. (4056)
- libplugin: routines to send notification updates and progress. (4046)
- build: clang build now supports --enable-address-sanitizer . (4013)
- db: Added support for key-value DSNs for postgresql, allowing for a wider variety of configurations and environments. (4072)
-
- Requires bitcoind v0.20.1 or above * (4179)
- Plugins:
pay
will now try disabled channels as a last resort. (4093) - Protocol: mutual closing feerate reduced to "slow" to avoid overpaying. (4113)
- In-memory log buffer reduced from 100MB to 10MB (4087)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- cli: scripts should filter out '^# ' or use
-N none
, as commands will start returning notifications soon (4046)
- Protocol: Support for receiving full gossip from ancient LND nodes. (4184)
- JSON-RPC:
plugin stop
result with an empty ("") key (deprecated 0.8.1) (4049) - JSON-RPC: The hook
rpc_command
returning{"continue": true}
(deprecated 0.8.1) (4049) - JSON-RPC: The hook
db_write
can no longer returntrue
(deprecated in 0.8.1) (4049) - JSON-RPC:
htlc_accepted
hookper_hop_v0
object removed (deprecated 0.8.0) (4049) - JSON-RPC:
listconfigs
duplicated "plugin" paths (deprecated 0.8.0) (4049) - Plugin: Relative plugin paths are not relative to startup (deprecated v0.7.2.1) (4049)
- Network: Fixed a race condition when us and a peer attempt to make channels to each other at nearly the same time. (4116)
- Protocol: fixed retransmission order of multiple new HTLCs (causing channel close with LND) (4124)
- Protocol:
signet
is now compatible with the final bitcoin-core version (4078) - Crash: assertion fail at restart when source and destination channels of an HTLC are both onchain. (4122)
- We are now able to parse any amount string (XXXmsat, XX.XXXbtc, ..) we create. (4129)
- Some memory leaks in transaction and PSBT manipulate closed. (4071)
- openingd now uses the correct dust limit for determining the allowable floor for a channel open (affects fundee only) (4141)
- Plugin: Regression with SQL statement expansion that could result in invalid statements being passed to the
db_write
hook. (4090) - build: no longer spuriously regenerates generated sources due to differences in
readdir
(3) sort order. (4053) - db: Fixed a broken migration on postgres DBs that had really old channels. (4064)
0.9.1 - 2020-09-15: The Antiguan BTC Maximalist Society
This release named by Jon Griffiths.
- JSON-RPC:
multiwithdraw
command to batch multiple onchain sends in a single transaction. Note it shuffles inputs and outputs, does not use BIP69. (3812) - JSON-RPC:
multifundchannel
command to fund multiple channels to different peers all in a single onchain transaction. (3763) - JSON-RPC:
delpay
command to delete a payment once completed or failed. (3899) - Plugins:
channel_state_changed
notification (4020) - JSON-RPC:
listpays
can be used to query payments using thepayment_hash
(3888) - JSON-RPC:
listpays
now includes thepayment_hash
(3888) - JSON-RPC:
listpays
now includes the timestamp of the first part of the payment (3909) - Build: New reproducible build system now uses docker: try it at home with
doc/REPRODUCIBLE.md
! (4021) - Plugins: Proxy information now provided in
init.configuration
. (4010) - Plugins:
openchannel_hook
is now chainable (3960) - JSON-RPC:
listpeers
showsfeatures
list for each channel. (3963) - JSON-RPC:
signpsbt
takes an optionalsignonly
array to limit what inputs to sign. (3954) - JSON-RPC:
utxopsbt
takes a newlocktime
parameter (3954) - JSON-RPC:
fundpsbt
takes a newlocktime
parameter (3954) - JSON-RPC: New low-level command
utxopsbt
to create PSBT from existing utxos. (3845) - JSON-RPC:
listfunds
now has aredeemscript
field for p2sh-wrapped outputs. (3844) - JSON-RPC:
fundchannel
has newoutnum
field indicating which output of the transaction funds the channel. (3844) - pyln-client: commands and options can now mark themselves deprecated. (3883)
- Plugins: can now mark their options and commands deprecated. (3883)
- plugins:
getmanifest
may now include "allow-deprecated-apis" boolean flag. (3883) - JSON-RPC:
listpays
now lists thedestination
if it was provided (e.g., via thepay
plugin orkeysend
plugin) (3888) - config: New option
--important-plugin
loads a plugin is so important that if it dies,lightningd
will exit rather than continue. You can still--disable-plugin
it, however, which trumps--important-plugin
and it will not be started at all. (3890) - Plugins: We now explicitly check at startup that our default Bitcoin backend (bitcoind) does relay transactions. (3889)
- Plugins: We now explicitly check at startup the version of our default Bitcoin backend (bitcoind). (3889)
- Build: we no longer require extra Python modules to build. (3994)
- Build: SQLite3 is no longer a hard build requirement. C-Lightning can now be built to support only the PostgreSQL back-end. (3999)
- gossipd: The
gossipd
is now a lot quieter, and will log only when a message changed our network topology. (3981) - Protocol: We now make MPP-aware routehints in invoices. (3913)
- onchaind: We now scorch the earth on theft attempts, RBFing up our penalty transaction as blocks arrive without a penalty transaction getting confirmed. (3870)
- Protocol:
fundchannel
now shuffles inputs and outputs, and no longer follows BIP69. (3769) - JSON-RPC:
withdraw
now randomizes input and output order, not BIP69. (3867) - JSON-RPC:
txprepare
reservations stay across restarts: usefundpsbt
/reservepsbt
/unreservepsbt
(3867) - config:
min-capacity-sat
is now stricter about checking usable capacity of channels. (3969) - Protocol: Ignore (and log as "unusual") repeated
WIRE_CHANNEL_REESTABLISH
messages, to be compatible with buggy peer software that sometimes does this. (3964) - contrib: startup_regtest.sh
startup_ln
now takes a number of nodes to create as a parameter (3992) - JSON-RPC:
invoice
no longer accepts zero amounts (did you mean "any"?) (3974) - Protocol: channels now pruned after two weeks unless both peers refresh it (see lightning-rfc#767) (3959)
- Protocol: bolt11 invoices always include CLTV fields (see lightning-rfc#785) (3959)
- config: the default CLTV expiry is now 34 blocks, and final expiry 18 blocks as per new BOLT recommendations. (3959)
- Plugins: Builtin plugins are now marked as important, and if they crash, will cause C-lightning to stop as well. (3890)
- Protocol: Funding timeout is now based on the header count reported by the bitcoin backend instead of our current blockheight which might be lower. (3897)
- JSON-RPC:
delinvoice
will now report specific error codes: 905 for failing to find the invoice, 906 for the invoice status not matching the parameter. (3853)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- Plugins:
bcli
replacements should note thatsendrawtransaction
now has a second required Boolean argument,allowhighfees
, which iftrue
, means ignore any fee limits and just broadcast the transaction. (3870) - JSON-RPC:
listsendpays
will no longer addnull
if we don't know theamount_msat
for a payment. (3883) - Plugins:
getmanifest
without any parameters; plugins should accept any parameters for future use. (3883)
- JSON-RPC: txprepare
destination
satoshi
argument form removed (deprecated v0.7.3) (3867)
- Plugins:
pay
presplit
modifier now supports large payments without exhausting the available HTLCs. (3986) - Plugins:
pay
corrects a case where we put the sub-payment value instead of the total value in thetotal_msat
field of a multi-part payment. (3914) - Plugins:
pay
is less aggressive with forgetting routehints. (3914) - Plugins:
pay
no longer ignores routehints if the payment exceeds 10,000 satoshi. This is particularly bad if the payee is only reachable via routehints in an invoice. (3908) - Plugins:
pay
limits the number of splits if the payee seems to have a low number of channels that can enter it, given the max-concurrent-htlcs limit. (3936) - Plugins:
pay
will now make reliable multi-part payments to nodes it doesn't have a node_announcement for. (4035) - JSON-RPC: significant speedups for plugins which create large JSON replies (e.g. listpays on large nodes). (3957)
- doc: Many missing manual pages were completed (3938)
- Build: Fixed compile error on macos (4019)
- pyln: Fixed HTLCs hanging indefinitely if the hook function raises an exception. A safe fallback result is now returned instead. (4031)
- Protocol: We now hang up if peer doesn't respond to init message after 60 seconds. (4039)
- elementsd: PSBTs include correct witness_utxo struct for elements transactions (4033)
- cli: fixed crash with
listconfigs
in-H
mode (4012) - Plugins:
bcli
significant speedups for block synchronization (3985) - Build: On systems with multiple installed versions of the PostgreSQL client library, C-Lightning might link against the wrong version or fail to find the library entirely.
./configure
now usespg_config
to locate the library. (3995) - Build: On some operating systems the postgresql library would not get picked up.
./configure
now usespg_config
to locate the headers. (3991) - libplugin: significant speedups for reading large JSON replies (e.g. calling listsendpays on large nodes, or listchannels / listnodes). (3957)
0.9.0 - 2020-07-31: "Rat Poison Squared on Steroids"
This release was named by Sebastian Falbesoner.
- plugin:
pay
was rewritten to use the new payment flow. Seelegacypay
for old version (3809) - plugin:
pay
will split payments that are failing due to their size into smaller parts, if recipient supports thebasic_mpp
option (3809) - plugin:
pay
will split large payments into parts of approximately 10k sat if the recipient supports thebasic_mpp
option (3809) - plugin: The pay plugin has a new
--disable-mpp
flag that allows opting out of the above two multi-part payment addition. (3809) - JSON-RPC: new low-level coin selection
fundpsbt
routine. (3825) - JSON-RPC: The
pay
command now uses the new payment flow, the newlegacypay
command can be used to issue payment with the legacy code if required. (3826) - JSON-RPC: The
keysend
command allows sending to a node without requiring an invoice first. (3792) - JSON-RPC:
listfunds
now has a 'scriptpubkey' field. (3821) - docker: Docker build now includes
LIGHTNINGD_NETWORK
ENV variable which defaults to "bitcoin". An user can override this (e.g. by-e
option indocker run
) to run docker container in regtest or testnet or any valid argument to--network
. (3813) - cli: We now install
lightning-hsmtool
for yourhsm_secret
needs. (3802) - JSON-RPC: new call
signpsbt
which will add the wallet's signatures to a provided psbt (3775) - JSON-RPC: new call
sendpsbt
which will finalize and send a signed PSBT (3775) - JSON-RPC: Adds two new rpc methods,
reserveinputs
andunreserveinputs
, which allow for reserving or unreserving wallet UTXOs (3775) - Python:
pyln.spec.bolt{1,2,4,7}
packages providing python versions of the spec text and defined messages. (3777) - pyln: new module
pyln.proto.message.bolts
(3733) - cli: New
--flat
mode for easy grepping oflightning-cli
output. (3722) - plugins: new notification type,
coin_movement
, which tracks all fund movements for a node (3614) - plugin: Added a new
commitment_revocation
hook that provides the plugin with penalty transactions for all revoked transactions, e.g., to push them to a watchtower. (3659) - JSON-API:
listchannels
now shows channelfeatures
. (3685) - plugin: New
invoice_creation
plugin event (3658) - docs: Install documentation now has information about building for Alpine linux (3660)
- plugin: Plugins can opt out of having an RPC connection automatically initialized on startup. (3857)
- JSON-RPC:
sendonion
has a new optionalbolt11
argument for when it's used to pay an invoice. (3878) - JSON-RPC:
sendonion
has a new optionalmsatoshi
that is used to annotate the payment with the amount received by the destination. (3878)
- JSON-RPC:
fundchannel_cancel
no longer requires its undocumentedchannel_id
argument afterfundchannel_complete
. (3787) - JSON-RPC:
fundchannel_cancel
will now succeed even when executed while afundchannel_complete
is ongoing; in that case, it will be considered as cancelling the funding after thefundchannel_complete
succeeds. (3778) - JSON-RPC:
listfunds
'outputs' now includes reserved outputs, designated as 'reserved' = true (3764) - JSON-RPC:
txprepare
now prepares transactions whosenLockTime
is set to the tip blockheight, instead of using 0.fundchannel
will usenLockTime
set to the tip blockheight as well. (3797) - build: default compile output is prettier and much less verbose (3686)
- config: the
plugin-disable
option now works even if specified before the plugin is found. (3679) - plugins: The
autoclean
plugin is no longer dynamic (you cannot manage it with theplugin
RPC command anymore). (3788) - plugin: The
paystatus
output changed as a result of the payment flow rework (3809)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON-RPC: the
legacypay
method from the pay plugin will be removed afterpay
proves stable (3809)
- protocol: support for optional fields of the reestablish message are now compulsory. (3782)
- JSON-RPC: Reject some bad JSON at parsing. (3761)
- JSON-RPC: The
feerate
parameters now correctly handle the standardness minimum when passed asperkb
. (3772) - JSON-RPC:
listtransactions
now displays all txids as little endian (3741) - JSON-RPC:
pay
now respects maxfeepercent, even for tiny amounts. (3693) - JSON-RPC:
withdraw
andtxprepare
feerate
can be a JSON number. (3821) - bitcoin:
lightningd
now always exits if the Bitcoin backend failed unexpectedly. (3675) - cli: Bash completion on
lightning-cli
now works again (3719) - config: we now take the
--commit-fee
parameter into account. (3732) - db: Fixed a failing assertion if we reconnect to a peer that we had a channel with before, and then attempt to insert the peer into the DB twice. (3801)
- hsmtool: Make the password argument optional for
guesstoremote
anddumpcommitments
sub-commands, as shown in our documentation and help text. (3822) - macOS: Build for macOS Catalina / Apple clang v11.0.3 fixed (3756)
- protocol: Fixed a deviation from BOLT#2: if both nodes advertised
option_upfront_shutdown_script
feature: MUST include ... a zero-lengthshutdown_scriptpubkey
. (3816) - wumbo: negotiate successfully with Eclair nodes. (3712)
- plugin:
bcli
no longer logs a harmless warning about being unable to connect to the JSON-RPC interface. (3857)
0.8.2 - 2020-04-30: "A Scalable Ethereum Blockchain"
This release was named by @arowser.
- pay: The
keysend
plugin implements the ability to receive spontaneous payments (keysend) (3611) - Plugin: the Bitcoin backend plugin API is now final. (3620)
- Plugin:
htlc_accepted
hook can now offer a replacement onionpayload
. (3611) - Plugin:
feature_set
object added toinit
(3612) - Plugin: 'flag'-type option now available. (3586)
- JSON API: New
getsharedsecret
command, which lets you compute a shared secret with this node knowing only a public point. This implements the BOLT standard of hashing the ECDH point, and is incompatible with ECIES. (3490) - JSON API:
large-channels
option to negotiate opening larger channels. (3612) - JSON API: New optional parameter to the
close
command to control the closing transaction fee negotiation back off step (3390) - JSON API:
connect
returnsfeatures
of the connected peer on success. (3612) - JSON API:
listpeers
now hasreceivable_msat
(3572) - JSON API: The fields "opening", "mutual_close", "unilateral_close", "delayed_to_us", "htlc_resolution" and "penalty" have been added to the
feerates
command. (3570) - JSON API: "htlc_timeout_satoshis" and "htlc_success_satoshis" fields have been added to the
feerates
command. (3570) - pyln now sends proper error on bad calls to plugin methods (3640)
- devtools: The
onion
tool can now generate, compress and decompress onions for rendez-vous routing (3557) - doc: An FAQ was added, accessible at https://lightning.readthedocs.io/FAQ.html (3551)
- We now use a higher feerate for resolving onchain HTLCs and for penalty transactions (3592)
- We now announce multiple addresses of the same type, if given. (3609)
- pay: Improved the performance of the
pay
-plugin by limiting thelistchannels
when computing the shadow route. (3617) - JSON API:
invoice
exposeprivatechannels
now includes explicitly named channels even if they seem like dead-ends. (3633) - Added workaround for lnd rejecting our commitment_signed when we send an update_fee after channel confirmed. (3634)
- We now batch the requests for fee estimation to our Bitcoin backend. (3570)
- We now get more fine-grained fee estimation from our Bitcoin backend. (3570)
- Forwarding messages is now much faster (less inter-daemon traffic) (3547)
- dependencies: We no longer depend on python2 which has reached end-of-life (3552)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON API:
fundchannel_start
satoshi
field really deprecated now (useamount
). (3603) - JSON API: The "urgent", "slow", and "normal" field of the
feerates
command are now deprecated. (3570) - JSON API: Removed double wrapping of
rpc_command
payload inrpc_command
JSON field. (3560) - Plugins: htlc_accepted_hook "failure_code" only handles simple cases now, use "failure_message". (3472)
- Plugins: invoice_payment_hook "failure_code" only handles simple cases now, use "failure_message". (3472)
- JSON API:
listnodes
globalfeatures
output (features
since in 0.7.3). (3603) - JSON API:
listpeers
localfeatures
andglobalfeatures
output (features
since in 0.7.3). (3603) - JSON API:
peer_connected
hooklocalfeatures
andglobalfeatures
output (features
since in 0.7.3). (3603) - JSON API:
fundchannel
andfundchannel_start
satoshi
parameter removed (renamed toamount
in 0.7.3). (3603) - JSON API:
close
force
parameter removed (deprecated in 0.7.2.1) (3603) - JSON API:
sendpay
description
parameter removed (renamed tolabel
in 0.7.0). (3603)
- Plugins: A crashing plugin will no longer cause a hook call to be delayed indefinitely (3539)
- Plugins: setting an 'init' feature bit allows us to accept it from peers. (3609)
- Plugins: if an option has a type int or bool, return the option as that type to the plugin's init (3582)
- Plugins: Plugins no longer linger indefinitely if their process terminates (3539)
- JSON API: Pending RPC method calls are now terminated if the handling plugin exits prematurely. (3639)
- JSON API:
fundchannel_start
returnsamount
even when deprecated APIs are enabled. (3603) - JSON API: Passing 0 as minconf to withdraw allows you to use unconfirmed transaction outputs, even if explicitly passed as the
utxos
parameter (3593) - JSON API:
txprepare
doesn't crash lightningd anymore if you pass unconfirmed utxos (3534) - invoice: The invoice parser assumed that an amount without a multiplier was denominated in msatoshi instead of bitcoins. (3636)
- pay: The
pay
-plugin was generating non-contiguous shadow routes (3617) pay
would crash on expired waits with tried routes (3630)pay
would crash when attempting to find cheaper route with exemptfee (3630)- Multiple definition of chainparams on Fedora (or other really recent gcc) (3631)
- bcli now handles 0msat outputs in gettxout. (3605)
- Fix assertion on reconnect if we fail to run openingd. (3604)
- Use lightning-rfc #740 feespike margin factor of 2 (3589)
- Always broadcast the latest close transaction at the end of the close fee negotiation, instead of sometimes broadcasting the peer's initial closing proposal. (3556)
0.8.1 - 2020-02-12: "Channel to the Moon"
This release named by Vasil Dimov @vasild.
- Plugin: pluggable backends for Bitcoin data queries, default still bitcoind (using bitcoin-cli). (3488)
- Plugin: Plugins can now signal support for experimental protocol extensions by registering featurebits for
node_announcement
s, the connection handshake, and for invoices. For now this is limited to non-dynamic plugins only (3477) - Plugin: 'plugin start' now restores initial umask before spawning the plugin process (3375)
- JSON API:
fundchannel
andfundchannel_start
can now accept an optional parameter,push_msat
, which will gift that amount of satoshis to the peer at channel open. (3369) - JSON API:
waitanyinvoice
now supports atimeout
parameter, which when set will cause the command to fail if unpaid aftertimeout
seconds (can be 0). (3449) - Config:
--rpc-file-mode
sets permissions on the JSON-RPC socket. (3437) - Config:
--subdaemon
allows alternate subdaemons. (3372) - lightningd: Optimistic locking prevents instances from running concurrently against the same database, providing linear consistency to changes. (3358)
- hsmd: Added fields to hsm_sign_remote_commitment_tx to allow complete validation by signing daemon. (3363)
- Wallet: withdrawal transactions now sets nlocktime to the current tip. (3465)
- elements: Added support for the dynafed block header format and elementsd >=0.18.1 (3440)
- JSON API: The hooks
db_write
,invoice_payment
, andrpc_command
now accept{ "result": "continue" }
to mean "do default action". (3475) - Plugin: Multiple plugins can now register for the htlc_accepted hook. (3489)
- JSON API:
listforwards
now showsout_channel
even if we couldn't forward. - JSON API:
funchannel_cancel
: only the opener of a fundchannel can cancel the channel open (3336) - JSON API:
sendpay
optionalmsatoshi
param for non-MPP (if set), must be the exact amount sent to the final recipient. (3470) - JSON API:
waitinvoice
now returns error code 903 to designate that the invoice expired during wait, instead of the previous -2 (3441) - JSON_API: The
connect
command now returns its own error codes instead of a generic -1. (3397) - Plugin:
notify_sendpay_success
andnotify_sendpay_failure
are now always called, even if there is no command waiting on the result. (3405) - hsmtool:
hsmtool
now creates its backup copy in the same directory as the originalhsm_secret
file. (3409) - JSON API:
invoice
exposeprivatechannels
can specify exact channel candidates. (3351) - JSON API:
db_write
new fielddata_version
which contains a numeric transaction counter. (3358) - JSON API:
plugin stop
result is now accessible using theresult
key instead of the empty ('') key. (3374) - lightning-cli: specifying
--rpc-file
(without--network
) has been restored. (3353)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON API: The hook
db_write
returningtrue
: use{ "result": "continue" }
. (3475) - JSON API: The hook
invoice_payment
returning{}
: use{ "result": "continue" }
. (3475) - JSON API: The hook
rpc_command
returning{"continue": true}
: use{ "result": "continue" }
. (3475) - JSON API:
plugin stop
result with an empty ("") key: use "result". (3374)
- Plugin: Relative plugin paths are not relative to startup (deprecated v0.7.2.1) (3471)
- JSON API: Dummy fields in listforwards (deprecated v0.7.2.1) (3471)
- Doc: Corrected and expanded
lightning-listpeers.7
documentation. (3497) - Doc: Fixed factual errors in
lightning-listchannels.7
documentation. (3494) - Protocol: Corner case where channel could become unusable (lightning/bolts#728) (3500)
- Plugins: Dynamic C plugins can now be managed when lightningd is up (3480)
- Doc:
connect
: clarified failure problems and usage. (3459) - Doc:
fundchannel
: clarify that we automaticallyconnect
s if your node knows how. (3459) - Protocol: Now correctly reject "fees" paid when we're the final hop (lightning-rfc#711) (3474)
- JSON API:
txprepare
no longer crashes when more than two outputs are specified (3384) - Pyln: now includes the "jsonrpc" field to jsonrpc2 requests (3442)
- Plugin:
pay
now detects a previously non-permanent error (final_cltv_too_soon
) that has been merged into a permanent error (incorrect_or_unknown_payment_details
), and retries. (3376) - JSON API: The arguments for
createonion
are now checked to ensure they fit in the onion packet. (3404) - TOR: We don't send any further request if the return code of connect is not zero or error. (3408)
- Build: Developer mode compilation on FreeBSD. (3344)
- Protocol: We now reject invoices which ask for sub-millisatoshi amounts (3481)
0.8.0 - 2019-12-16: "Blockchain Good, Orange Coin Bad"
This release was named by Michael Schmoock @m-schmoock.
- JSON API: Added
createonion
andsendonion
JSON-RPC methods allowing the implementation of custom protocol extensions that are not directly implemented in c-lightning itself. (3260) - JSON API:
listinvoices
now displays the payment preimage if the invoice was paid. (3295) - JSON API:
listpeers
channels now includeclose_to
andclose_to_addr
iff aclose_to
address was specified at channel open (3223) - The new
pyln-testing
package now contains the testing infrastructure so it can be reused to test against c-lightning in external projects (3218) - config: configuration files now support
include
. (3268) - options: Allow the Tor inbound service port differ from 9735 (3155)
- options: Persistent Tor address support (3155)
- plugins: A new plugin hook,
rpc_command
allows a plugin to take overlightningd
for any RPC command. (2925) - plugins: Allow the
accepter
to specify an upfront_shutdown_script for a channel via aclose_to
field in the openchannel hook result (3280) - plugins: Plugins may now handle modern TLV-style payloads via the
htlc_accepted
hook (3260) - plugins: libplugin now supports writing plugins which register to hooks (3317)
- plugins: libplugin now supports writing plugins which register to notifications (3317)
- protocol: Payment amount fuzzing is restored, but through shadow routing. (3212)
- protocol: We now signal the network we are running on at init. (3300)
- protocol: can now send and receive TLV-style onion messages. (3335)
- protocol: can now send and receive BOLT11 payment_secrets. (3335)
- protocol: can now receive basic multi-part payments. (3335)
- JSON RPC: low-level commands sendpay and waitsendpay can now be used to manually send multi-part payments. (3335)
- quirks: Workaround LND's
reply_channel_range
issues instead of sending error. (3264) - tools: A new command,
guesstoremote
, is added to the hsmtool. It is meant to be used to recover funds after an unilateral close of a channel withoption_static_remotekey
enabled. (3292)
- config: Default network (new installs) is now bitcoin, not testnet. (3268)
- config: Lightning directory, plugins and files moved into
<network>/
subdir (3268) - JSON API: The
fundchannel
command now tries to connect to the peer before funding the channel, no need toconnect
beforefundchannel
if an address for the peer is known (3314) - JSON API:
htlc_accepted
hook hastype
(currentlylegacy
ortlv
) and other fields directly insideonion
. (3167) - JSON API:
lightning_
prefixes removed from subdaemon names, including in listpeersowner
field. (3241) - JSON API:
listconfigs
now structures plugins and include their options (3283) - JSON API: the
raw_payload
now includes the first byte, i.e., the realm byte, of the payload as well. This allows correct decoding of a TLV payload in the plugins. (3261) - logging: formatting made uniform: [NODEID-]SUBSYSTEM: MESSAGE (3241)
- options:
config
and<network>/config
read by default. (3268) - options: log-level can now specify different levels for different subsystems. (3241)
- protocol: The TLV payloads for the onion packets are no longer considered an experimental feature and generally available. (3260)
- quirks: We'll now reconnect and retry if we get an error on an established channel. This works around lnd sending error messages that may be non-fatal. (3340)
lightning-cli
(3268)
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON API:
listconfigs
duplicated "plugin" paths (3283) - JSON API:
htlc_accepted
hookper_hop_v0
object deprecated, as isshort_channel_id
for the final hop. (3167)
- JSON:
listpays
won't shown payments made via sendpay without a bolt11 string, or before 0.7.0. (3309)
- JSON API: #3231
listtransactions
crash (3256) - JSON API:
listconfigs
appends '...' to truncated config options. (3268) pyln-client
now handles unicode characters in JSON-RPC requests and responses correctly. (3018)- bitcoin: If bitcoind goes backwards (e.g. reindex) refuse to start (unless forced with --rescan). (3274)
- bug:
gossipd
crash on huge number of unknown channels. (3273) - gossip: No longer discard most
node_announcements
(fixes #3194) (3262) - options: We disable all dns even on startup the scan for bogus dns servers, if
--always-use-proxy
is set true (3251) - protocol: "Bad commitment signature" closing channels when we sent back-to-back update_fee messages across multiple reconnects. (3329)
- protocol: Unlikely corner case is simultanous HTLCs near balance limits fixed. (3286)
0.7.3 - 2019-10-18: "Bitcoin's Proof of Stake"
This release was named by @trueptolemy.
- DB: lightningd now supports different SQL backends, instead of the default which is sqlite3. Adds a PostgresSQL driver
- elements: Add support of Liquid-BTC on elements
- JSON API:
close
now accepts an optional parameterdestination
, to which the to-local output will be sent. - JSON API:
txprepare
andwithdraw
now accept an optional parameterutxos
, a list of utxos to include in the prepared transaction - JSON API:
listfunds
now lists a blockheight for confirmed transactions, and hasconnected
andstate
fields for channels, likelistpeers
. - JSON API:
fundchannel_start
now includes fieldscriptpubkey
- JSON API: New method
listtransactions
- JSON API:
signmessage
will now create a signature from your node on a message;checkmessage
will verify it. - JSON API:
fundchannel_start
now accepts an optional parameterclose_to
, the address to which these channel funds should be sent to on close. Returnsusing_close_to
if will use. - Plugin: new notifications
sendpay_success
andsendpay_failure
. - Protocol: nodes now announce features in
node_announcement
broadcasts. - Protocol: we now offer
option_gossip_queries_ex
for finegrained gossip control. - Protocol: we now retransmit
funding_locked
upon reconnection while closing if there was no update - Protocol: no longer ask for
initial_routing_sync
(only affects ancient peers). - bolt11: support for parsing feature bits (field
9
). - Wallet: we now support the encryption of the BIP32 master seed (a.k.a.
hsm_secret
). - pylightning: includes implementation of handshake protocol
- Build: Now requires
gettext
- JSON API: The parameter
exclude
ofgetroute
now also support node-id. - JSON API:
txprepare
now usesoutputs
as parameter other thandestination
andsatoshi
- JSON API:
fundchannel_cancel
is extended to work before funding broadcast. - JSON-API:
pay
can exclude error nodes if the failcode ofsendpay
has the NODE bit set - JSON API: The
plugin
command now returns on error. A timeout of 20 seconds is added tostart
andstartdir
subcommands at the end of which the plugin is errored if it did not complete the handshake withlightningd
. - JSON API: The
plugin
command does not allow to start static plugins afterlightningd
startup anymore. - Protocol: We now push our own gossip to all peers, independent of their filter.
- Protocol: Now follows spec in responses to short channel id queries on unknown chainhashes
- Tor: We default now with autotor to generate if possible temporary ED25519-V3 onions. You can use new option
enable-autotor-v2-mode
to fallback to V2 RSA1024 mode.
Note: You should always set allow-deprecated-apis=false
to test for changes.
- JSON API:
fundchannel
now usesamount
as the parameter name to replacesatoshi
- JSON API:
fundchannel_start
now usesamount
as the parameter name to replacesatoshi
- JSON API:
listpeers
andlistnodes
fieldslocalfeatures
andglobalfeatures
(now justfeatures
). - Plugin:
peer_connected
hook fieldslocalfeatures
andglobalfeatures
(now justfeatures
).
- JSON API:
short_channel_id
parameters in JSON commands with:
separators (deprecated since 0.7.0). - JSON API:
description
parameters inpay
andsendpay
(deprecated since 0.7.0). - JSON API:
description
output field inwaitsendpay
andsendpay
(deprecated since 0.7.0). - JSON API:
listpayments
(deprecated since 0.7.0).
- Fixed bogus "Bad commit_sig signature" which caused channel closures when reconnecting after updating fees under simultaneous bidirectional traffic.
- Relative
--lightning_dir
is now working again. - Build: MacOS now builds again (missing pwritev).
0.7.2.1 - 2019-08-19: "Nakamoto's Pre-approval by US Congress"
This release was named by Antoine Poinsot @darosior.
(Technically a .1 release, as it contains last-minute fixes after 0.7.2 was tagged)
- JSON API: a new command
plugin
allows one to manage plugins without restartinglightningd
. - Plugin: a new boolean field can be added to a plugin manifest,
dynamic
. It allows a plugin to tell if it can be started or stopped "on-the-fly". - Plugin: a new boolean field is added to the
init
'sconfiguration
,startup
. It allows a plugin to know if it has been started onlightningd
startup. - Plugin: new notifications
invoice_payment
,forward_event
andchannel_opened
. - Protocol:
--enable-experimental-features
adds gossip query extensions aka lightning/bolts#557 - contrib: new
bootstrap-node.sh
to connect to random mainnet nodes. - JSON API:
listfunds
now returns alsofunding_output
forchannels
- Plugin: plugins can now suggest
lightning-cli
default to -H for responses. - Lightningd: add support for
signet
networks using the--network=signet
or--signet
startup option
- Build: now requires
python3-mako
to be installed, i.e.sudo apt-get install python3-mako
- JSON API:
close
optional arguments have changed: it now defaults to unilateral close after 48 hours. - Plugin: if the config directory has a
plugins
subdirectory, those are loaded. - lightningd: check bitcoind version when setup topology and confirm the version not older than v0.15.0.
- Protocol: space out reconnections on startup if we have more than 5 peers.
- JSON API:
listforwards
includes the 'payment_hash' field. - Plugin: now plugins always run from the
lightning-dir
for easy local storage.
Note: You should always set allow-deprecated-apis=false
to test for
changes.
- Plugin: using startup-relative paths for
plugin
andplugin-dir
: they're now relative tolightning-dir
. - JSON API:
listforwards
removed dummy (zero) fields forout_msat
,fee_msat
,in_channel
andout_channel
if unknown (i.e. deleted from db, orstatus
islocal-failed
.
- Plugin:
pay
no longer crashes on timeout. - Plugin:
disconnect
notifier now called if remote side disconnects. - channeld: ignore, and simply try reconnecting if lnd sends "sync error".
- Protocol: we now correctly ignore unknown odd messages.
- wallet: We will now backfill blocks below our wallet start height on demand when we require them to verify gossip messages. This fixes an issue where we would not remove channels on spend that were opened below that start height because we weren't tracking the funding output.
- Detect when we're still syncing with bitcoin network: don't send or receive
HTLCs or allow
fundchannel
. - Rare onchaind error where we don't recover our own unilateral close with multiple same-preimage HTLCs fixed.
0.7.1 - 2019-06-29: "The Unfailing Twitter Consensus Algorithm"
This release was named by (C-Lightning Core Team member) Lisa Neigut @niftynei.
- Protocol: we now enforce
option_upfront_shutdown_script
if a peer negotiates it. - JSON API: New command
setchannelfee
sets channel specific routing fees. - JSON API: new withdraw methods
txprepare
,txsend
andtxdiscard
. - JSON API: add three new RPC commands:
fundchannel_start
,fundchannel_complete
andfundchannel_cancel
. Allows a user to initiate and complete a channel open using funds that are in a external wallet. - Plugin: new hooks
db_write
for intercepting database writes,invoice_payment
for intercepting invoices before they're paid,openchannel
for intercepting channel opens, andhtlc_accepted
to decide whether to resolve, reject or continue an incoming or forwarded payment.. - Plugin: new notification
warning
to report anyLOG_UNUSUAL
/LOG_BROKEN
level event. - Plugin: Added a default plugin directory :
lightning_dir/plugins
. Each plugin directory it contains will be added to lightningd on startup. - Plugin: the
connected
hook can now send anerror_message
to the rejected peer. - JSON API:
newaddr
outputsbech32
orp2sh-segwit
, or both with newall
parameter (#2390) - JSON API:
listpeers
status now shows how many confirmations until channel is open (#2405) - Config: Adds parameter
min-capacity-sat
to reject tiny channels. - JSON API:
listforwards
now includes the time an HTLC was received and when it was resolved. Both are expressed as UNIX timestamps to facilitate parsing (Issue #2491, PR #2528) - JSON API:
listforwards
now includes the local_failed forwards with failcode (Issue #2435, PR #2524) - DB: Store the signatures of channel announcement sent from remote peer into DB, and init channel with signatures from DB directly when reenable the channel. (Issue #2409)
- JSON API:
listchannels
has new fieldshtlc_minimum_msat
andhtlc_maximum_msat
.
- Gossip: we no longer compact the
gossip_store
file dynamically, due to lingering bugs. Restart if it gets too large. - Protocol: no longer ask for entire gossip flood from peers, unless we're missing gossip.
- JSON API:
invoice
expiry defaults to 7 days, and can have s/m/h/d/w suffixes. - Config: Increased default amount for minimal channel capacity from 1k sat to 10k sat.
- JSON API: A new parameter is added to
fundchannel
, which now accepts an utxo array to use to fund the channel. - Build: Non-developer builds are now done with "-Og" optimization.
- JSON API:
pay
will no longer return failure until it is no longer retrying; previously it could "timeout" but still make the payment. - JSON API: the command objects that
help
outputs now contain a new string field :category
(can be "bitcoin", "channels", "network", "payment", "plugins", "utility", "developer" for native commands, or any other new category set by a plugin). - Plugin: a plugin can now set the category of a newly created RPC command. This possibility has been added to libplugin.c and pylightning.
- lightning-cli: the human readable help is now more human and more readable : commands are sorted alphabetically and ordered by categories.
Note: You should always set allow-deprecated-apis=false
to test for
changes.
- JSON API:
newaddr
output fieldaddress
: usebech32
orp2sh-segwit
instead.
- JSON RPC:
global_features
andlocal_features
fields andlistchannels
'flags
field. (Deprecated since 0.6.2). - pylightning: Remove RPC support for c-lightning before 0.6.3.
- Protocol: reconnection during closing negotiation now supports
option_data_loss_protect
properly. --bind-addr=<path>
fixed for nodes using local sockets (eg. testing).- Unannounced local channels were forgotten for routing on restart until reconnection occurred.
- lightning-cli: arguments containing
"
now succeed, rather than causing JSON errors. - Protocol: handle lnd sending more messages before
reestablish
; don't fail channel, and handle older lnd's spurious empty commitments. - Fixed
fundchannel
crash when we have many UTXOs and we skip unconfirmed ones. - lightningd: fixed occasional hang on
connect
when peer had sent error. - JSON RPC:
decodeinvoice
andpay
now handle unknown invoice fields properly. - JSON API:
waitsendpay
(PAY_STOPPED_RETRYING) error handler now returns valid JSON - protocol: don't send multiple identical feerate changes if we want the feerate higher than we can afford.
- JSON API:
stop
now only returns once lightningd has released all resources.
- Fixes CVE-2019-12998 (Full Disclosure).
0.7.0 - 2019-02-28: "Actually an Altcoin"
This release was named by Mark Beckwith @wythe.
- plugins: fully enabled, and ready for you to write some!
- plugins:
pay
is now a plugin. - protocol:
pay
will now use routehints in invoices if it needs to. - build: reproducible source zipfile and Ubuntu 18.04.1 build.
- JSON API: New command
paystatus
gives detailed information onpay
commands. - JSON API:
getroute
,invoice
,sendpay
andpay
commandsmsatoshi
parameter can have suffixesmsat
,sat
(optionally with 3 decimals) orbtc
(with 1 to 11 decimal places). - JSON API:
fundchannel
andwithdraw
commandssatoshi
parameter can have suffixesmsat
(must end in000
),sat
orbtc
(with 1 to 8 decimal places). - JSON API:
decodepay
,getroute
,sendpay
,pay
,listpeers
,listfunds
,listchannels
and all invoice commands now return anamount_msat
field which has anmsat
suffix. - JSON API:
listfunds
channels
now has_msat
fields for each existing raw amount field, withmsat
suffix. - JSON API:
waitsendpay
now has anerring_direction
field. - JSON API:
listpeers
now has adirection
field inchannels
. - JSON API:
listchannels
now takes asource
option to filter by node id. - JSON API:
getroute
riskfactor
argument is simplified;pay
now defaults to setting it to 10. - JSON API:
sendpay
now takes abolt11
field, and it's returned inlistpayments
andwaitsendpay
. - JSON API:
fundchannel
andwithdraw
now have a new parameterminconf
that limits coinselection to outputs that have at leastminconf
confirmations (default 1). (#2380) - JSON API:
listfunds
now displays addresses for all outputs owned by the wallet (#2387) - JSON API:
waitsendpay
andsendpay
output fieldlabel
as specified bysendpay
call. - JSON API:
listpays
command for higher-level payment view thanlistpayments
, especially important with multi-part-payments coming. - JSON API:
listpayments
is nowlistsendpays
. - lightning-cli:
help <cmd>
finds man pages even ifmake install
not run. - pylightning: New class 'Millisatoshi' can be used for JSON API, and new '_msat' fields are turned into this on reading.
- protocol:
option_data_loss_protect
is now enabled by default. - JSON API: The
short_channel_id
separator has been changed to bex
to match the specification. - JSON API:
listpeers
now includesfunding_allocation_msat
, which returns a map of the amounts initially funded to the channel by each peer, indexed by channel id. - JSON API:
help
with acommand
argument gives a JSON array, like other commands. - JSON API:
sendpay
description
parameter is renamedlabel
. - JSON API:
pay
now takes an optionallabel
parameter for labelling payments, in place of never-useddescription
. - build: we'll use the system libbase58 and libsodium if found suitable.
Note: You should always set allow-deprecated-apis=false
to test for
changes.
We recommend that you transition to the reading the new JSON _msat
fields for your own sanity checking, and that you similarly
provide appropriate suffixes for JSON input fields.
- JSON API:
short_channel_id
fields in JSON commands with:
separators (usex
instead). - JSON API:
pay
description
is deprecated, as is support for BOLT11 strings usingh
. - JSON API:
sendpay
parameterdescription
andwaitsendpay
andsendpay
output fieldsdescription
(nowlabel
). - JSON API:
listpayments
has been deprecated (you probably wantlistpays
)
- JSON API: the
waitsendpay
command error return no longer includeschannel_update
- Protocol: handling
query_channel_range
for large numbers of blocks (eg. 4 billion) was slow due to a bug. - Fixed occasional deadlock with peers when exchanging huge amounts of gossip.
- Fixed a crash when running in daemon-mode due to db filename overrun (#2348)
- Handle lnd sending premature 'funding_locked' message when we're expected 'reestablish'; we used to close channel if this happened.
- Cleanup peers that started opening a channel, but then disconnected. These would leave a dangling entry in the DB that would cause this peer to be unable to connect. (PR #2371)
- You can no longer make giant unpayable "wumbo" invoices.
- CLTV of total route now correctly evaluated when finding best route.
riskfactor
arguments topay
andgetroute
now have an effect.- Fixed the version of bip32 private_key to BIP32_VER_MAIN_PRIVATE: we used BIP32_VER_MAIN_PRIVATE for bitcoin/litecoin mainnet, and BIP32_VER_TEST_PRIVATE for others. (PR #2436)
0.6.3 - 2019-01-09: "The Smallblock Conspiracy"
This release was named by @molxyz and @ctrlbreak.
- JSON API: New command
check
checks the validity of a JSON API call without running it. - JSON API:
getinfo
now returnsnum_peers
num_pending_channels
,num_active_channels
andnum_inactive_channels
fields. - JSON API: use
\n\n
to terminate responses, for simplified parsing (pylightning now relies on this) - JSON API:
fundchannel
now includes anannounce
option, when false it will keep channel private. Defaults to true. - JSON API:
listpeers
'schannels
now includes aprivate
flag to indicate if channel is announced or not. - JSON API:
invoice
route hints may now include private channels if you have no public ones, unless new optionexposeprivatechannels
is false. - Plugins: experimental plugin support for
lightningd
, including option passthrough and JSON-RPC passthrough. - Protocol: we now support features
option_static_remotekey
andgossip_queries_ex
for peers.
- JSON API:
pay
anddecodepay
accept and ignorelightning:
prefixes. - pylightning: Allow either keyword arguments or positional arguments.
- JSON-RPC: messages are now separated by 2 consecutive newlines.
- JSON-RPC:
jsonrpc
:2.0
now included in json-rpc command calls. complies with spec.
Note: You should always set allow-deprecated-apis=false
to test for
changes.
- pylightning: Support for pre-2-newline JSON-RPC (<= 0.6.2 lightningd) is deprecated.
- option_data_loss_protect is now only offered if EXPERIMENTAL_FEATURES is enabled, since it seems incompatible with lnd and has known bugs.
- JSON API: uppercase invoices now parsed correctly (broken in 0.6.2).
- JSON API: commands are once again read even if one hasn't responded yet (broken in 0.6.2).
- Protocol: allow lnd to send
update_fee
beforefunding_locked
. - Protocol: fix limit on how much funder can send (fee was 1000x too small)
- Protocol: don't send invalid onion errors if peer says onion was bad.
- Protocol: don't crash when peer sends a 0-block-expiry HTLC.
- pylightning: handle multiple simultanous RPC replies reliably.
- build: we use
--prefix
as handed to./configure
0.6.2 - 2018-10-20: "The Consensus Loving Nasal Daemon"
This release was named by practicalswift.
- JSON API:
listpeers
has new fieldscratch_txid
: the latest tx in channel. - JSON API:
listpeers
has new arrayhtlcs
: the current live payments. - JSON API:
listchannels
has two new fields:message_flags
andchannel_flags
. This replacesflags
. - JSON API:
invoice
now adds route hint to invoices for incoming capacity (RouteBoost), and warns if insufficient capacity. - JSON API:
listforwards
lists all forwarded payments, their associated channels, and fees. - JSON API:
getinfo
shows forwarding fees earnt asmsatoshi_fees_collected
. - Bitcoind: more parallelism in requests, for very slow nodes.
- Testing: fixed logging, cleaner interception of bitcoind, minor fixes.
- Protocol: we set and handle the new
htlc_maximum_msat
channel_update field.
- Protocol:
channel_update
sent to disable channel only if we reject an HTLC. - Protocol: we don't send redundant
node_announcement
on every new channel. - Config: config file can override
lightning-dir
(makes sense with--conf
). - Config:
--conf
option is now relative to current directory, notlightning-dir
. - lightning-cli:
help <cmd>
prints basic information even if no man page found. - JSON API:
getinfo
now reports global statistics about forwarded payments, including total fees earned and amounts routed.
Note: You should always set allow-deprecated-apis=false
to test for
changes.
- JSON RPC:
listchannels
'flags
field. This has been split into two fields, see Added. - JSON RPC:
global_features
andlocal_features
fields: useglobalfeatures
andlocalfeatures
as per BOLT #1.
- JSON API: the optional 'seed' parameter to
getroute
was removed.
- Startup: more coherent complaint if daemon already running.
- Lightningd: correctly save full HTLCs across restarts; fixup old databases.
- JSON RPC:
getinfo
now shows correct Tor port. - JSON RPC:
ping
now works even after one peer fails to respond. - JSON RPC:
getroute
fuzzpercent
andpay
maxfeepercent
can now be > 100. - JSON RPC:
riskfactor
inpay
andgetroute
no longer always treated as 1. - JSON-RPC:
listpeers
was always reporting 0 for all stats. - JSON RPC:
withdraw all
saysCannot afford transaction
if you have absolutely no funds, rather thanOutput 0 satoshis would be dust
. - Protocol: don't send gossip about closed channels.
- Protocol: fix occasional deadlock when both peers flood with gossip.
- Protocol: fix occasional long delay on sending
reply_short_channel_ids_end
. - Protocol: re-send
node_announcement
when address/alias/color etc change. - Protocol: multiple HTLCs with the same payment_hash are handled correctly.
- Options: 'autotor' defaults to port 9051 if not specified.
0.6.1 - 2018-09-11: "Principled Opposition To Segwit"
This release was named by ZmnSCPxj.
- Protocol: gossipd now deliberately delays spamming with
channel_update
. - Protocol: liveness ping when we commit changes but peer is idle: speeds up failures and reduces forced closures.
- Protocol:
option_data_loss_protect
now supported to protect peers against being out-of-date. - JSON API: Added description to invoices and payments (#1740).
- JSON API:
getinfo
has new fieldsalias
andcolor
. - JSON API:
listpeers
has new fieldsglobal_features
andlocal_features
. - JSON API:
listnodes
has new fieldglobal_features
. - JSON API:
ping
command to send a ping to a connected peer. - JSON API:
feerates
command to retrieve current fee estimates. - JSON API:
withdraw
andfundchannel
can be given manual feerate. - Config:
--conf
option to set config file. - Documentation: Added CHANGELOG.md
- pylightning: RpcError now has
method
andpayload
fields. - Sending lightningd a SIGHUP will make it reopen its
log-file
, if any.
- Protocol: Fee estimates are now smoothed over time, to avoid sudden jumps.
- Config: You can only announce one address if each type (IPv4, IPv6, TORv2, TORv3).
- lightning-cli: the help command for a specific command now runs the
man
command. - HSM: The HSM daemon now maintains the per-peer secrets, rather than handing them out. It's still lax in what it signs though.
- connectd: A new daemon
lightning_connectd
handles connecting to/from peers, instead ofgossipd
doing that itself.lightning_openingd
now handles peers immediately, even if they never actually open a channel. - Test:
python-xdist
is now a dependency for tests. - Logging: JSON connections no longer spam debug logs.
- Routing: We no longer consider channels that are not usable either because of
their capacity or their
htlc_minimum_msat
parameter (#1777) - We now try to connect to all known addresses for a peer, not just the one given or the first one announced.
- Crash logs are now placed one-per file like
crash.log.20180822233752
- We will no longer allow withdrawing funds or funding channels if we
do not have a fee estimate (eg. bitcoind not synced); use new
feerate
arg.
- JSON API:
listpeers
results no long havealias
andcolor
fields; they're inlistnodes
(we used to internally merge the information). - JSON API:
listpeers
will never havestate
field (it accidentally used to exist and set toGOSSIPING
before we opened a channel).connected
will indicate if we're connected, and thechannels
array indicates individual channel states (if any). - Config:
default-fee-rate
is no longer available; use explicitfeerate
option if necessary. - Removed all Deprecated options from 0.6.
- Protocol:
node_announcement
multiple addresses are correctly ordered and uniquified. - Protocol: if we can't estimate feerate, be almost infinitely tolerant of other side setting fees to avoid unilateral close.
- JSON API:
listnodes
: now displays node aliases and colors even if they don't advertise a network address - JSON API:
fundchannel all
: now restricts to 2^24-1 satoshis rather than failing. - JSON API:
listnodes
: now correctly printsaddresses
if more than one is advertised. - Config:
bind-addr
of a publicly accessible network address was announced. - When we reconnect and have to retransmit failing HTLCs, the errors weren't encrypted by us.
lightningd_config
man page is now installed bymake install
.- Fixed crash when shutting down during opening a channel (#1737)
- Don't lose track of our own output when applying penalty transaction (#1738)
- Protocol:
channel_update
inside error messages now refers to correct channel. - Stripping type prefix from
channel_update
s that are nested in an onion reply to be compatible with eclair and lnd (#1730). - Failing tests no longer delete the test directory, to allow easier debugging (Issue: #1599)
0.6 - 2018-06-22: "I Accidentally The Smart Contract"
In the prehistory of c-lightning, no changelog was kept. But major JSON API changes are tracked.
This release was named by Fabrice Drouin.
Note: You should always set allow-deprecated-apis=false
to test for
changes.
- Config:
port
. Useaddr=:<portnum>
. - Config:
ipaddr
. Useaddr
. - Config:
anchor-confirms
. Usefunding-confirms
. - Config:
locktime-blocks
. Usewatchtime-blocks
. - Protocol: on closing we allow out-of-range offers, prior to spec fix
2018-01-30 ("BOLT 2: order closing-signed negotiation by making
funder send first."
90241d9cf60a598eac8fd839ac81e4093a161272
) - JSON API:
listinvoice
command. Uselistinvoices
. - JSON API: invoice result fields
paid_timestamp
andexpiry_time
. Usepaid_at
andexpires_at
. - JSON API:
invoice
command fieldfallback
. Usefallbacks
. - JSON API:
decodepay
result fieldstimestamp
andfallback
. Usecreated_at
andfallbacks
. - JSON API: payment result fields
timestamp
. Usecreated_at
. - JSON API:
getinfo
result fieldport
. Usebinding
andaddress
arrays. - JSON API:
getlog
result fieldcreation_time
. Usecreated_at
. - JSON API:
getpeers
result fieldchannel_reserve_satoshis
. Usetheir_channel_reserve_satoshis
. - JSON API:
getpeers
result fieldto_self_delay
. Usetheir_to_self_delay
.
There predate the BOLT specifications, and are only of vague historic interest:
- 0.1 - 2015-08-08: "MtGox's Cold Wallet" (named by Rusty Russell)
- 0.2 - 2016-01-22: "Butterfly Labs' Timely Delivery" (named by Anthony Towns)
- 0.3 - 2016-05-25: "Nakamoto's Genesis Coins" (named by Braydon Fuller)
- 0.4 - 2016-08-19: "Wright's Cryptographic Proof" (named by Christian Decker)
- 0.5 - 2016-10-19: "Bitcoin Savings & Trust Daily Interest" (named by Glenn Willen)
- 0.5.1 - 2016-10-21
- 0.5.2 - 2016-11-21: "Bitcoin Savings & Trust Daily Interest II"