24 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased
Added
- Lightningd: add support for
signet
networks using the--network=signet
or--signet
startup option - JSON API:
listfunds
now returns alsofunding_output
forchannels
- plugins: plugins can now suggest
lightning-cli
default to -H for responses. - Plugin: new notification
forward_event
offered/settled/failed/local_failed.
Changed
- build: now requires
python3-mako
to be installed, i.e.sudo apt-get install python3-mako
- plugins: if the config directory has a
plugins
subdirectory, those are loaded. - plugins: a new notification type
invoice_payment
(sent when an invoice is paid) has been added - plugins: a new 'channel_opened' notification type is added, which is emitted when a peer succesfully funds a channel to us
- rpc: a new rpc command is added,
plugin
. It allows one to manage plugins without restartinglightningd
. - plugins: a new boolean field is added to the
init
'sconfiguration
,startup
. It allows a plugin to know if it has been started onlightningd
startup. - plugins: 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". - lightningd: check bitcoind version when setup topology and confirm the version not older than v0.15.0.
- startup: space out reconnections on startup if we have more than 5 peers.
- JSON API:
listforwards
includes the 'payment_hash' field. - plugins: now always run from the
lightning-dir
for easy local storage.
Deprecated
Note: You should always set allow-deprecated-apis=false
to test for
changes.
- plugins: using startup-relative paths for
plugin
andplugin-dir
: they're now relative tolightning-dir
.
Removed
Fixed
- 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".
Security
0.7.1 - 2019-06-29: "The Unfailing Twitter Consensus Algorithm"
This release named by (C-Lightning Core Team member) Lisa Neigut @niftynei.
Added
- 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
.
Changed
- 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.
Deprecated
Note: You should always set allow-deprecated-apis=false
to test for
changes.
- JSON API:
newaddr
output fieldaddress
: usebech32
orp2sh-segwit
instead.
Removed
- 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.
Fixed
- 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.
Security
0.7.0 - 2019-02-28: "Actually an Altcoin"
This release named by Mark Beckwith @wythe.
Added
- 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.
Changed
- 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.
Deprecated
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
)
Removed
- JSON API: the
waitsendpay
command error return no longer includeschannel_update
Fixed
- 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)
Security
0.6.3 - 2019-01-09: "The Smallblock Conspiracy"
This release named by @molxyz and @ctrlbreak.
Added
- 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.
Changed
- 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.
Deprecated
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.
Removed
- option_data_loss_protect is now only offered if EXPERIMENTAL_FEATURES is enabled, since it seems incompatible with lnd and has known bugs.
Fixed
- 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
Security
0.6.2 - 2018-10-20: "The Consensus Loving Nasal Daemon"
This release named by practicalswift.
Added
- 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.
Changed
- 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.
Deprecated
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.
Removed
- JSON API: the optional 'seed' parameter to
getroute
was removed.
Fixed
- 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.
Security
0.6.1 - 2018-09-11: "Principled Opposition To Segwit"
This release named by ZmnSCPxj.
Added
- 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.
Changed
- 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.
Deprecated
Removed
- 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.
Fixed
- 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)
Security
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 named by Fabrice Drouin.
Deprecated
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
.
Older versions
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"