You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

27 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

  • JSON API: listfunds now lists a blockheight for confirmed transactions, and has connected and state fields for channels, like listpeers.

  • JSON API: fundchannel_start now includes field scriptpubkey

  • JSON API: txprepare and withdraw now accept an optional parameter utxos, a list of utxos to include in the prepared transaction

  • JSON_API: close now accepts an optional parameter destination, to which the to-local output will be sent.

  • bolt11: support for parsing feature bits (field 9).

  • Protocol: we now retransmit funding_locked upon reconnection while closing if there was no update

  • Plugin: new notifications sendpay_success and sendpay_failure.

  • Protocol: we now offer option_gossip_queries_ex for finegrained gossip control.

  • Protocol: no longer ask for initial_routing_sync (only affects ancient peers).

  • Protocol: nodes now announce features in node_announcement broadcasts.

  • Wallet: we now support the encryption of the BIP32 master seed (a.k.a. hsm_secret).

Changed

  • JSON API: txprepare now uses outputs as parameter other than destination and satoshi
  • Build: Now requires gettext
  • JSON API: fundchannel_cancel is extended to work before funding broadcast.
  • JSON API: The parameter exclude of getroute now also support node-id.
  • JSON-API: pay can exclude error nodes if the failcode of sendpay has the NODE bit set
  • JSON API: The plugin command now returns on error. A timeout of 20 seconds is added to start and startdir subcommands at the end of which the plugin is errored if it did not complete the handshake with lightningd.
  • JSON API: The plugin command does not allow to start static plugins after lightningd startup anymore.

Deprecated

Note: You should always set allow-deprecated-apis=false to test for changes.

  • JSON-API: fundchannel now uses amount as the parameter name to replace satoshi
  • JSON-API: fundchannel_start now uses amount as the parameter name to replace satoshi

Removed

  • JSON API: short_channel_id parameters in JSON commands with : separators (deprecated since 0.7.0).
  • JSON API: description parameters in pay and sendpay (deprecated since 0.7.0).
  • JSON API: description output field in waitsendpay and sendpay (deprecated since 0.7.0).
  • JSON API: listpayments (deprecated since 0.7.0).

Fixed

  • Relative --lightning_dir is now working again.
  • Build: MacOS now builds again (missing pwritev).

Security

0.7.2.1 - 2019-08-19: "Nakamoto's Pre-approval by US Congress"

This release named by Antoine Poinsot @darosior.

(Technically a .1 release, as it contains last-minute fixes after 0.7.2 was tagged)

Added

  • JSON API: a new command plugin allows one to manage plugins without restarting lightningd.
  • 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's configuration, startup. It allows a plugin to know if it has been started on lightningd startup.
  • Plugin: new notifications invoice_payment, forward_event and channel_opened.
  • Protocol: --enable-experimental-features adds gossip query extensions aka https://github.com/lightningnetwork/lightning-rfc/pull/557
  • contrib: new bootstrap-node.sh to connect to random mainnet nodes.
  • JSON API: listfunds now returns also funding_output for channels
  • 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

Changed

  • 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.

Deprecated

Note: You should always set allow-deprecated-apis=false to test for changes.

  • Plugin: using startup-relative paths for plugin and plugin-dir: they're now relative to lightning-dir.
  • JSON API: listforwards removed dummy (zero) fields for out_msat, fee_msat, in_channel and out_channel if unknown (i.e. deleted from db, or status is local-failed.

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".
  • 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.

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 and txdiscard.
  • JSON API: add three new RPC commands: fundchannel_start, fundchannel_complete and fundchannel_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, and htlc_accepted to decide whether to resolve, reject or continue an incoming or forwarded payment..
  • Plugin: new notification warning to report any LOG_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 an error_message to the rejected peer.
  • JSON API: newaddr outputs bech32 or p2sh-segwit, or both with new all 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 fields htlc_minimum_msat and htlc_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 field address: use bech32 or p2sh-segwit instead.

Removed

  • JSON RPC: global_features and local_features fields and listchannels' 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 and pay 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 on pay commands.
  • JSON API: getroute, invoice, sendpay and pay commands msatoshi parameter can have suffixes msat, sat (optionally with 3 decimals) or btc (with 1 to 11 decimal places).
  • JSON API: fundchannel and withdraw commands satoshi parameter can have suffixes msat (must end in 000), sat or btc (with 1 to 8 decimal places).
  • JSON API: decodepay, getroute, sendpay, pay, listpeers, listfunds, listchannels and all invoice commands now return an amount_msat field which has an msat suffix.
  • JSON API: listfunds channels now has _msat fields for each existing raw amount field, with msat suffix.
  • JSON API: waitsendpay now has an erring_direction field.
  • JSON API: listpeers now has a direction field in channels.
  • JSON API: listchannels now takes a source 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 a bolt11 field, and it's returned in listpayments and waitsendpay.
  • JSON API: fundchannel and withdraw now have a new parameter minconf that limits coinselection to outputs that have at least minconf confirmations (default 1). (#2380)
  • JSON API: listfunds now displays addresses for all outputs owned by the wallet (#2387)
  • JSON API: waitsendpay and sendpay output field label as specified by sendpay call.
  • JSON API: listpays command for higher-level payment view than listpayments, especially important with multi-part-payments coming.
  • JSON API: listpayments is now listsendpays.
  • lightning-cli: help <cmd> finds man pages even if make 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 be x to match the specification.
  • JSON API: listpeers now includes funding_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 a command argument gives a JSON array, like other commands.
  • JSON API: sendpay description parameter is renamed label.
  • JSON API: pay now takes an optional label parameter for labelling payments, in place of never-used description.
  • 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 (use x instead).
  • JSON API: pay description is deprecated, as is support for BOLT11 strings using h.
  • JSON API: sendpay parameter description and waitsendpay and sendpay output fields description (now label).
  • JSON API: listpayments has been deprecated (you probably want listpays)

Removed

  • JSON API: the waitsendpay command error return no longer includes channel_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 to pay and getroute 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 returns num_peers num_pending_channels, num_active_channels and num_inactive_channels fields.
  • JSON API: use \n\n to terminate responses, for simplified parsing (pylightning now relies on this)
  • JSON API: fundchannel now includes an announce option, when false it will keep channel private. Defaults to true.
  • JSON API: listpeers's channels now includes a private 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 option exposeprivatechannels is false.
  • Plugins: experimental plugin support for lightningd, including option passthrough and JSON-RPC passthrough.
  • Protocol: we now support features option_static_remotekey and gossip_queries_ex for peers.

Changed

  • JSON API: pay and decodepay accept and ignore lightning: 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 before funding_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 field scratch_txid: the latest tx in channel.
  • JSON API: listpeers has new array htlcs: the current live payments.
  • JSON API: listchannels has two new fields: message_flags and channel_flags. This replaces flags.
  • 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 as msatoshi_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, not lightning-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 and local_features fields: use globalfeatures and localfeatures 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 and pay maxfeepercent can now be > 100.
  • JSON RPC: riskfactor in pay and getroute no longer always treated as 1.
  • JSON-RPC: listpeers was always reporting 0 for all stats.
  • JSON RPC: withdraw all says Cannot afford transaction if you have absolutely no funds, rather than Output 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 fields alias and color.
  • JSON API: listpeers has new fields global_features and local_features.
  • JSON API: listnodes has new field global_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 and fundchannel can be given manual feerate.
  • Config: --conf option to set config file.
  • Documentation: Added CHANGELOG.md
  • pylightning: RpcError now has method and payload 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 of gossipd 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 have alias and color fields; they're in listnodes (we used to internally merge the information).
  • JSON API: listpeers will never have state field (it accidentally used to exist and set to GOSSIPING before we opened a channel). connected will indicate if we're connected, and the channels array indicates individual channel states (if any).
  • Config: default-fee-rate is no longer available; use explicit feerate 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 prints addresses 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 by make 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_updates 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. Use addr=:<portnum>.
  • Config: ipaddr. Use addr.
  • Config: anchor-confirms. Use funding-confirms.
  • Config: locktime-blocks. Use watchtime-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. Use listinvoices.
  • JSON API: invoice result fields paid_timestamp and expiry_time. Use paid_at and expires_at.
  • JSON API: invoice command field fallback. Use fallbacks.
  • JSON API: decodepay result fields timestamp and fallback. Use created_at and fallbacks.
  • JSON API: payment result fields timestamp. Use created_at.
  • JSON API: getinfo result field port. Use binding and address arrays.
  • JSON API: getlog result field creation_time. Use created_at.
  • JSON API: getpeers result field channel_reserve_satoshis. Use their_channel_reserve_satoshis.
  • JSON API: getpeers result field to_self_delay. Use their_to_self_delay.

Older versions

There predate the BOLT specifications, and are only of vague historic interest:

  1. 0.1 - 2015-08-08: "MtGox's Cold Wallet" (named by Rusty Russell)
  2. 0.2 - 2016-01-22: "Butterfly Labs' Timely Delivery" (named by Anthony Towns)
  3. 0.3 - 2016-05-25: "Nakamoto's Genesis Coins" (named by Braydon Fuller)
  4. 0.4 - 2016-08-19: "Wright's Cryptographic Proof" (named by Christian Decker)
  5. 0.5 - 2016-10-19: "Bitcoin Savings & Trust Daily Interest" (named by Glenn Willen)
  6. 0.5.1 - 2016-10-21
  7. 0.5.2 - 2016-11-21: "Bitcoin Savings & Trust Daily Interest II"