# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [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](https://github.com/ElementsProject/lightning/issues/2491), PR [#2528](https://github.com/ElementsProject/lightning/pull/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](https://github.com/ElementsProject/lightning/issues/2435), PR [#2524](https://github.com/ElementsProject/lightning/pull/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](https://github.com/ElementsProject/lightning/issues/2409)) - JSON API: new withdraw methods `txprepare`, `txsend` and `txdiscard`. ### 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=` 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 ### 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 ` 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](https://twitter.com/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 ` 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_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`. Use `addr=:`. - 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" [0.7.0]: https://github.com/ElementsProject/lightning/compare/v0.6.3...HEAD [0.6.3]: https://github.com/ElementsProject/lightning/releases/tag/v0.6.3 [0.6.2]: https://github.com/ElementsProject/lightning/releases/tag/v0.6.2 [0.6.1]: https://github.com/ElementsProject/lightning/releases/tag/v0.6.1 [0.6]: https://github.com/ElementsProject/lightning/releases/tag/v0.6 [0.5.2]: https://github.com/ElementsProject/lightning/releases/tag/v0.5.2-2016-11-21 [0.5.1]: https://github.com/ElementsProject/lightning/releases/tag/v0.5.1-2016-10-21 [0.5]: https://github.com/ElementsProject/lightning/releases/tag/v0.5-2016-10-19 [0.4]: https://github.com/ElementsProject/lightning/releases/tag/v0.4-2016-08-19 [0.3]: https://github.com/ElementsProject/lightning/releases/tag/v0.3-2016-05-26 [0.2]: https://github.com/ElementsProject/lightning/releases/tag/v0.2-2016-01-22 [0.1]: https://github.com/ElementsProject/lightning/releases/tag/v0.1-2015-08-08