Bitcoin Optech Newsletter #113
This week’s newsletter describes a proposed change to the way LN commitment transactions are constructed, summarizes discussion of a default signet, and links to a proposal for standardizing temporarily trusted LN channels. Also included are our regular sections with recently transcribed talks and conversations, releases and release candidates, and notable changes to popular Bitcoin infrastructure projects.


project release date
eclair v0.4.2

This release includes many exciting new features, API changes as well as several bug fixes and improvements. Its is fully compatible with 0.4.1 (and all previous versions of eclair).

Major changes


Third-party plugins are now able to add new feature bits to eclair and handle unknown custom messages. This lets plugin developers offer services to their customers that are not available in the Lightning specification (e.g. swap-in/swap-out), while staying fully compatible with the network.

See #1528 for more details.

Anchor Outputs

This release adds experimental support for anchor outputs channels. The main benefit of this type of channels is that it is possible to bump the on-chain fees of commitment transactions and htlc transactions once they are in the mempool to speed up their confirmation.

Eclair is fully compatible with the anchor output specification, but automatic fee bumping has not been implemented yet, hence we do not recommend activating the feature. Some attacks that are specific to anchor outputs have also been discovered recently and haven't been fully addressed yet, but will be fixed in future releases.


This release adds support for spontaneous payments using keysend. It is fully compatible with lnd and c-lightning and makes it easy for public LN nodes to receive donations.

API changes

This release contains many new APIs and improvements to existing ones:

  • Add signmessage/verifymessage APIs: this allows signing arbitrary messages with the node's key and is compatible with lnd and c-lightning
  • We publish new channel events to the websocket (channel-opened, channel-state-changed and channel-closed)
  • The sendtoroute API now lets you choose the channels that must be used, making it easy to rebalance your local channels

Head over to our API documentation for more details.

Miscellaneous improvements and bug fixes

  • Many actors have been refactored to use Akka Typed instead of classic actors. This leads to a cleaner design, better types and more help from the compiler to detect unhandled messages.
  • We added support for Bitcoin Core 0.20.1.
  • We added support for non-default Bitcoin Core wallets (see #1540 for details)
  • We fixed the override-features configuration parameter, which wasn't overriding features everywhere. This parameter can be very useful for example to sync only from specific nodes, or advertize wumbo support only to nodes that you trust.

Verifying signatures

You will need gpg and our release signing key 7A73FE77DE2C4027. Note that you can get it:

To import our signing key:

$ gpg --import drouinf.asc

To verify the release file checksums and signatures:

$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped


Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):

  • Ubuntu 19.10
  • AdoptOpenJDK 11.0.6
  • Maven 3.6.3

Use the following command to generate the eclair-node package:

mvn clean install -DskipTests

That should generate eclair-node/target/ with sha256 checksums that matches the one we provide and sign in SHA256SUMS.asc

(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.


This release is fully compatible with Eclair v0.4.1. You don't need to close your channels, just stop eclair, upgrade and restart.


  • ebfca8cef Bitcoin Core Wallet small refactoring (#1482)
  • e06325e03 fixup! Split the Peer in two (#1347) (#1487)
  • 65facab14 Add debug logs to transport handler (#1488)
  • ea57bb266 Release 0.4.1 (#1481)
  • 92a094c49 Anchor output transaction format (#1484)
  • aca7499df Use github action for scoverage (#1490)
  • 625e996ae Update MinFinalCltvExpiryDelta default value and activate wumbo (#1483)
  • ab4831fe6 Use file filter for scoverage upload (#1492)
  • e6909cfcb Implement the KeySend feature, spontaneous payments (#1485)
  • a3dd365c6 Revive codecov.yml (#1493)
  • bc81cd527 Add delay before setting watches at startup (#1489)
  • 8cd264457 Do not merge user provided features with defaults (#1435)
  • 3d4e00fe1 Activate anchor output in channels (#1491)
  • 6f9edec10 Relax relaying requirement on expiry (#1497)
  • 5a5a0b96f Verify feature graph in Init (#1495)
  • 01f924ae8 Add API commands to sign & verify arbitrary messages (#1499)
  • 1b21e14b9 Fix typo related to pico-bitcoin conversion (#1503)
  • daddfc007 Type fee rates info (#1504)
  • 3d168a5ba Remove semaphore build (#1517)
  • 2c437421d Show reminder of failed tests at the end (#1521)
  • 153f82c8c Refactor integration tests (#1494)
  • ef1bf0b9a Use the replyTo pattern for Register messages (#1514)
  • e54066be5 Remove Status.Failure in register responses (#1516)
  • 14a69b810 Trampoline relay exhausted liquidity (#1523)
  • 77e972bcb Improve blockchain watchers (#1500)
  • ea7202380 Set the channel version in the init msg for the fundee (#1518)
  • e34b74f88 Fix flaky integration test (#1524)
  • 6b05099f0 Use the replyTo pattern for Channel messages (#1520)
  • b954defa2 Update to Bitcoin Core 0.20.1 (#1526)
  • d0011005a Migrate relayers to akka typed (#1525)
  • 2fc118c29 Do not reply to htlc settlement commands (#1527)
  • f26423563 Improve relayer logs (#1529)
  • 3158c2668 More leeway in tests (#1530)
  • eed82e262 Update to scala 2.13.3 and akka 2.6.9 (#1532)
  • 750b372b2 Minor improvements to the watcher (#1531)
  • 662e0c4bc Anchor output: handle unilateral close (#1501)
  • 6ef72a0bd Set a timefactor for typed actors tests (#1541)
  • 3a773c1fd Allow plugins to handle custom messages and features (#1528)
  • 483cce4ae Split IntegrationSpec (#1535)
  • 42481c66e Add some channel events to websocket (#1536)
  • 36c9b9b5a Configure bitcoin wallet (#1540)
  • 8a27b4ca8 Fixup funder fee buffer (#1364)
  • 0ab7ec63f Add DB entry for payment router error (#1513)
  • 127416801 Make all commands extend Has*ReplyToCommand (#1543)
  • 382868dda [ChannelRelay] Prioritize lowest capacity channels (#1539)
  • 56d216b91 Separate configuration for peer-connection (#1548)
  • 8885ed7f4 (minor) Improve logs in channel relayer (#1550)
  • 428349a34 Send to channel route (#1537)
  • 20e0b4bc4 Fix override-features implementation (#1549)
  • ed6175043 Nits (#1553)
  • b728520ad Prevent disabling var_onion_optin (#1552)
  • eea1ba99b Add backward-compatibility tests on some database codecs (#1554)
  • 50363569c Fix forceclose API (#1555)
  • 135ce6cc8 Use maven plugin to include tests (#1557)
  • a76db1c27 Fix channel CMD_SIGN (#1556)
  • 3da76c08a Allow mandatory static-remotekey (#1558)
  • 4b55d3e71 Fix typo in startup script (#1559)
  • 3e3397cfb Fix Docker JAVA_OPTS expansion (#1561)
libwally-core release_0.8.0
  • Build fixes for OSX and Android
  • Expose PSBT functions through the SWIG Java interface
  • New functions to serialize varint and varbuffers
  • Build system improvements and general bug fixes
ledgerjs v5.27.0
  • hw-app-eth: initial support of EIP 712 signing (experimental)
  • cryptoassets: upper case the fiat name first letters
  • library upgrade: flowtype, typescript, eslint
BTC Pay Server v1.0.5.8

Bug fixes:

  • Fix payjoin client implementation (was sending hex instead of base64) @Kukks
  • Fix: The send wallet, by default, should not include the previous transaction (timeouts issue with some hardware wallets) @NicolasDorier
  • Do not log the database connection string @Kukks
  • If a password fail to be reset by mail, show proper error @NicolasDorier
  • When you map a specific domain to an app, when there's no app created there's a blank page @Kukks


type rfc # title date status
bip bip-0324 Add BIP324 - Version 2 Peer-to-Peer Message Transport Protocol 2020-10-22 Update
bip bip-0085 BIP 0085: Add link to JavaScript library implementation 2020-10-22 Update
bip bip-0008 BIP8: directly support special cases 2020-10-21 Update
bip X added test vectors for invalid extended keys 2020-10-19 Update
bip bip-0008 BIP8: allow some MUST_SIGNAL blocks to not signal 2020-10-19 Update
bip bip-0008 BIP8: Make signalling during LOCKED_IN recommended rather than mandatory 2020-10-19 Update
bip bip-0008 BIP8: clarify timeoutheight behaviour and requirements 2020-10-19 Merged
bip bip-0008 BIP 8 - replace FAILING with MUST_SIGNAL 2020-10-19 Closed
bip bip-0078 update Joinmarket BIP78 status 2020-10-18 New PR
bip bip-0039 Add Portuguese wordlist to BIP39 2020-10-18 Update
bip bip-0085 BIP 0085: Adds JavaScript library 2020-10-17 Closed
bip bip-0322 BIP-322: switch to using tx based approach 2020-10-16 Update
bip bip-0002 BIP-0002: Update Rejection criteria to require there to be an actual … 2020-10-16 Update
bip bip-0002 bip-0002: allow anyone to inactivate, not reject 2020-10-16 Update
bip bip-0008 BIP8: Fix spelling 2020-10-15 Closed
bip X BIP: Process, revision 3 2020-10-15 Update
bip bip-0325 bip-325: add Anthony Towns to authors and change status to Proposed 2020-10-14 Merged
bip bip-0325 bip-325: status -> proposed 2020-10-14 Closed
bip X Reject 98 (expired) 2020-10-13 Update
bip X Reject 199 (expired) 2020-10-13 Update
bip X Reject 117 (expired) 2020-10-13 Update
bip bip-0157 List implementation PRs for BIP-0157 2020-10-13 Closed
bip X Reject 116 (expired) 2020-10-12 Update
bip bip-0118 Update BIP 118 for taproot, rename to ANYPREVOUT 2020-10-12 Update
bip bip-0133 Final BIP-0133 (feefilter message) 2020-10-11 Update
bip X Obsolete 61 (feature was removed from Core) 2020-10-11 Closed
bip bip-0049 Fix typo in BIP 49 2020-10-11 Merged
bip bip-0032 BIP-32: Minor grammar fix 2020-10-10 Update
bolt X Lightning Specification Meeting 2020/10/26 2020-10-22 Update
bolt X DRAFT: Offers 2020-10-22 Update
bolt X Prevent preimage reveal collision while claiming onchain incoming HTLC 2020-10-20 New PR
bolt X Fail channel in case of high-S remote signature reception 2020-10-20 New PR
bolt X Confusion about the HTLC 2020-10-20 New Issue
bolt X Route Blinding 2020-10-20 Update
bolt X Lightning Specification Meeting 2020/10/12 2020-10-19 Update
bolt X Require to claim revoked local output in its own penalty tx post-anchor 2020-10-19 Update
bolt X commit_sig, revoke_and_ack ordering in channel reestablish flow 2020-10-15 Update
bolt X reply_channel_range is now too strict. 2020-10-14 Update
bolt onion routing BOLT 4: link to BOLT 1 for tlv_payload format 2020-10-13 Update
bolt X Fee requirement for closing_signed is unclear 2020-10-12 Update
bolt X Description for invoices is not mandatory? 2020-10-09 Update
bolt onion routing BOLT 04: tlv_payload description is not clear 2020-10-09 Update
slip X Add GoldBCR - 2020-10-19 Merged
slip slip-0044 SLIP-0044: Change Flare Spark symbol to FLR 2020-10-19 Merged
slip X add KELP 2020-10-15 Merged
slip slip-0044 SLIP-0044 Added CTC, DMCH and DUN 2020-10-14 Merged
slip slip-0044 SLIP-0044: Update character casing of coin name for BTCD 2020-10-12 Merged
slip slip-0044 SLIP-0044, Added BONO, ICL and PLC 2020-10-11 Merged
slip slip-0044 SLIP-0044, Added NKN and VIDT 2020-10-11 Merged
slip slip-0039 slip-0039: Explain design rationale regarding compatibility with BIP-39 2020-10-10 Update
slip slip-0044 SLIP-0044: Add BDX, CCXX, SRM and VLX 2020-10-09 Merged
slip slip-0044 SLIP-0044 Added LRG Large Coin, SERO Super Zero Protocol 2020-10-09 Merged
slip slip-0044 Add SLS to SLIP-0044 (#572) 2020-10-09 Merged