rgb-cln/CHANGELOG.md

20 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: New command setchannelfee sets channel specific routing fees.
  • 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: new plugin hooks 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: the connected hook can now send an error_message to the rejected peer.
  • Protocol: we now enforce option_upfront_shutdown_script if a peer negotiates it.
  • JSON API: listforwards now includes the local_failed forwards with failcode (Issue #2435, PR #2524)
  • Config: Added a default plugin directory : lightning_dir/plugins. Each plugin directory it contains will be added to lightningd on startup.
  • 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)

Changed

  • 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.
  • 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).
  • Plugins: a plugin can now set the category of a newly created RPC command. This possibility has been added to libplugin.c and pylightning.
  • 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).

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.

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.

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 Chrstian 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"