f0b0e55431 Cache None in tx_cache for non-wallet transactions (Kristaps Kaupe)
Pull request description:
`wallet_fetch_history()` calls `BlockchainInterface.get_transaction()` for each input of wallet transactions to figure out which of the inputs are ours and which aren't. It will return `None` for non-wallet transactions and that weren't cached, so, if the same non-wallet transaction appears in inputs of wallet transactions multiple times, unnecessary `gettransaction` RPCs to Bitcoin Core were made.
Top commit has no ACKs.
Tree-SHA512: 43b7166f2cfb1ed02fa46d78333c045cab8b8a94765dba44a3190c8e67ec353bf9e0a0c9fec8386ab489b1ea1448188ee3078c5a37de9140f99199b3a5a066f6
bbc2150c3b Tell libsodium not to download code from savannah.gnu.org in autogen.sh (Kristaps Kaupe)
Pull request description:
Fixes#1655.
Top commit has no ACKs.
Tree-SHA512: 14d9be5990cca6f88d5369bab50e8bfa5838d28c2ce7a9f6ea2f1e1274dacc4814fb4a7b6cacd528973621cd8cbca4f05de2a31de8ea231ffb97e60c04c28ac4
07bad142ba Bump cryptography from 41.0.6 to 42.0.4 (dependabot[bot])
Pull request description:
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.6 to 42.0.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's changelog</a>.</em></p>
<blockquote>
<p>42.0.4 - 2024-02-20</p>
<pre><code>
* Fixed a null-pointer-dereference and segfault that could occur when creating
a PKCS#12 bundle. Credit to **Alexander-Programming** for reporting the
issue. **CVE-2024-26130**
* Fixed ASN.1 encoding for PKCS7/SMIME signed messages. The fields ``SMIMECapabilities``
and ``SignatureAlgorithmIdentifier`` should now be correctly encoded according to the
definitions in :rfc:`2633` :rfc:`3370`.
<p>.. _v42-0-3:</p>
<p>42.0.3 - 2024-02-15
</code></pre></p>
<ul>
<li>Fixed an initialization issue that caused key loading failures for some
users.</li>
</ul>
<p>.. _v42-0-2:</p>
<p>42.0.2 - 2024-01-30</p>
<pre><code>
* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.2.1.
* Fixed an issue that prevented the use of Python buffer protocol objects in
``sign`` and ``verify`` methods on asymmetric keys.
* Fixed an issue with incorrect keyword-argument naming with ``EllipticCurvePrivateKey``
:meth:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey.exchange`,
``X25519PrivateKey``
:meth:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PrivateKey.exchange`,
``X448PrivateKey``
:meth:`~cryptography.hazmat.primitives.asymmetric.x448.X448PrivateKey.exchange`,
and ``DHPrivateKey``
:meth:`~cryptography.hazmat.primitives.asymmetric.dh.DHPrivateKey.exchange`.
<p>.. _v42-0-1:</p>
<p>42.0.1 - 2024-01-24
</code></pre></p>
<ul>
<li>Fixed an issue with incorrect keyword-argument naming with <code>EllipticCurvePrivateKey</code>
:meth:<code>~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey.sign</code>.</li>
<li>Resolved compatibility issue with loading certain RSA public keys in
:func:<code>~cryptography.hazmat.primitives.serialization.load_pem_public_key</code>.</li>
</ul>
<p>.. _v42-0-0:</p>
<p>42.0.0 - 2024-01-22</p>
<pre><code>
</tr></table>
</code></pre>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="fe18470f7d"><code>fe18470</code></a> Bump for 42.0.4 release (<a href="https://redirect.github.com/pyca/cryptography/issues/10445">#10445</a>)</li>
<li><a href="aaa2dd06ed"><code>aaa2dd0</code></a> Fix ASN.1 issues in PKCS#7 and S/MIME signing (<a href="https://redirect.github.com/pyca/cryptography/issues/10373">#10373</a>) (<a href="https://redirect.github.com/pyca/cryptography/issues/10442">#10442</a>)</li>
<li><a href="7a4d012991"><code>7a4d012</code></a> Fixes <a href="https://redirect.github.com/pyca/cryptography/issues/10422">#10422</a> -- don't crash when a PKCS#12 key and cert don't match (<a href="https://redirect.github.com/pyca/cryptography/issues/10423">#10423</a>) ...</li>
<li><a href="df314bb182"><code>df314bb</code></a> backport actions m1 switch to 42.0.x (<a href="https://redirect.github.com/pyca/cryptography/issues/10415">#10415</a>)</li>
<li><a href="c49a7a5271"><code>c49a7a5</code></a> changelog and version bump for 42.0.3 (<a href="https://redirect.github.com/pyca/cryptography/issues/10396">#10396</a>)</li>
<li><a href="396bcf64c5"><code>396bcf6</code></a> fix provider loading take two (<a href="https://redirect.github.com/pyca/cryptography/issues/10390">#10390</a>) (<a href="https://redirect.github.com/pyca/cryptography/issues/10395">#10395</a>)</li>
<li><a href="0e0e46f5f7"><code>0e0e46f</code></a> backport: initialize openssl's legacy provider in rust (<a href="https://redirect.github.com/pyca/cryptography/issues/10323">#10323</a>) (<a href="https://redirect.github.com/pyca/cryptography/issues/10333">#10333</a>)</li>
<li><a href="2202123b50"><code>2202123</code></a> changelog and version bump 42.0.2 (<a href="https://redirect.github.com/pyca/cryptography/issues/10268">#10268</a>)</li>
<li><a href="f7032bdd40"><code>f7032bd</code></a> bump openssl in CI (<a href="https://redirect.github.com/pyca/cryptography/issues/10298">#10298</a>) (<a href="https://redirect.github.com/pyca/cryptography/issues/10299">#10299</a>)</li>
<li><a href="002e886f16"><code>002e886</code></a> Fixes <a href="https://redirect.github.com/pyca/cryptography/issues/10294">#10294</a> -- correct accidental change to exchange kwarg (<a href="https://redirect.github.com/pyca/cryptography/issues/10295">#10295</a>) (<a href="https://redirect.github.com/pyca/cryptography/issues/10296">#10296</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/pyca/cryptography/compare/41.0.6...42.0.4">compare view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/JoinMarket-Org/joinmarket-clientserver/network/alerts).
</details>
Top commit has no ACKs.
Tree-SHA512: 2f5321f32270c80ea423555f504a26c608cfe25aca0693470d696bff0a178b51702a6c6646cfd5dc397fb8d41fb5f84170dfad9add81687ab2d6ded299fd090e
bd22dd0d9f Bump pyopenssl from 23.2.0 to 24.0.0 (Kristaps Kaupe)
Pull request description:
Needed for #1669, allows upgrading `cryptography` to 42.x, see https://github.com/pyca/pyopenssl/issues/1285 and https://github.com/pyca/pyopenssl/pull/1284.
Top commit has no ACKs.
Tree-SHA512: 9402c257d2a6c012bacd7cd8064f5d1b72a8a8751e28c5544b90b749ba7d1a5f22bb8ae6056f244b06c5f928cf88b5438328a53246f418fed125aa659ff667c6
053e9d882c Release notes and version for v0.9.11 (Kristaps Kaupe)
Pull request description:
Please review and test. Treat this as a release candidate. :)
ACKs for top commit:
AdamISZ:
ACK 053e9d882c
Tree-SHA512: 9d3e1cfed40360e34a472d2fb5fd63eafbc91a3dc0947ca0a92c45593be01ee07bb226baa8296ccc6759429c675bc353dc008717a3e55c807941c2e7a6003d14
a5a5132160 update payjoin doc (Marnix)
Pull request description:
remove old dead links
If you'd rather replace the links with newer ones, please share them. happy to add/update
ACKs for top commit:
kristapsk:
ACK a5a5132160
Tree-SHA512: aab19aa4cd9f0452ea6206a19f843481f1cbad56c4fc746d613707a3991fefe83ff191b4da2d436d1f3024492687ee85504f3842f1ac95e886c98a09aa13af85
cde6b4ca9a Fix no amount entered message (can be sats too, not only BTC) (Kristaps Kaupe)
Pull request description:
Message was wrong since dropdown to switch between BTC and sat amounts was added.
Top commit has no ACKs.
Tree-SHA512: e4f5c85e7fb6f657fe49b8ff1748bc23cbb9bd29dc947991798d907459500423f7348945784798c54ce0e9010a45a5e3e5488b7cdf8b97dd43ec7a45e6bf3fb3
8846c4da62 Remove --disable-jni from libsecp256k1_build (Kristaps Kaupe)
Pull request description:
JNI was removed with libsecp256k1 v0.2.0, see https://github.com/bitcoin-core/secp256k1/pull/682.
Top commit has no ACKs.
Tree-SHA512: 4d0b67527e3d4530528beaaf54c926fc0848324be7051b22998d6d695c95b0de4b70e7483832068dc2abb9c3183b76d64c372a088958f6508b280c4cceee0840
f2ae8abac1 Don't validate cache during initial sync. (Adam Gibson)
Pull request description:
Prior to this commit, the calls to get_new_addr in the functions in the initial sync algo used for recovery, used the default value of the argument validate_cache, which is True (because in normal running, get_new_addr is used to derive addresses as destinations, for which it's safer to not use the cache, and as one-off calls, are not performance-sensitive). This caused initial sync to be very slow in recovery, especially if using large gap limits (which is common). After this commit, we set the argument validate_cache to False, as is intended during initial sync. This allows the optimised performance from caching to be in effect. See earlier PRs #1594 and #1614 for context.
Top commit has no ACKs.
Tree-SHA512: 2e16642dbb071f3f4e8c3bcfc6cfb71b63865acfb576be6f31b2a8945795b9e9a5de5c93bc2ed534db8ee9ac12cbddef180c303ed6e3c30c89f6f67d49a2d834
0a225c1178 Payjoin: log full proposed PSBT from sender if it fails sanity checks (Kristaps Kaupe)
Pull request description:
It's useful when debugging receiving payjoins from other wallets.
Top commit has no ACKs.
Tree-SHA512: db14d79ec6ed29b0da88717089541dabd13dde4623bcec71c16f3cfc60f321d46c5288d14a56e0134e887b67a3278ce528c873c56dc5c716e1c27b83fe0d339f
c4414e8c9c Minor quality improvements in wallet code (Kristaps Kaupe)
Pull request description:
Was looking at #1278 changes in context of #1588. Couldn't find any errors there, that seems correct and should be working. But in process I corrected wrong comment, changed to use `btc_to_sat()` helper function for unit conversion and added some type hints.
ACKs for top commit:
AdamISZ:
utACK c4414e8c9c
Tree-SHA512: df227ca7316ad9cc4b7cb3133df940bd3a3132a521f552756906f090b82b1b08c6e11775c47698685be23017ea8e9893ba5e9467c415158aeec7075839e32ea4
9c13180c13 Raise fallback fee rate from 10 sat/vB to 20 sat/vB (Kristaps Kaupe)
Pull request description:
It's just current reality on mainnet, that's around what `bitcoin-cli estimatesmartfee 1008` (1 week confirmation target) returns.
ACKs for top commit:
AdamISZ:
utACK 9c13180c13
Tree-SHA512: 15057a92bc498c17d66141fb08e31c0e21f5a070f13de5bc99aa9236290e8d65c64ed2060239f616b4bb6b684e1abe498bb0976fe2b0c26ea61f601b6a6a4293
d89dcdeaf8 Remove convert_old_wallet.py script (Kristaps Kaupe)
Pull request description:
Old wallet format isn't used for years and script is broken since removal of pyaes dependency in #1526. If somebody still needs it, he can use older JoinMarket version to do conversion.
Top commit has no ACKs.
Tree-SHA512: 26308ca2807ff954ace6308a42e490d61fe8e95ed92b3453233ec72a59a38d975cfb1cf6bdeda93d4c855e6994c593f05b6cc1d2e78bc4ab3d7bde84c02a8982
ca33ecafda Bump txtorcon from 23.0.0 to 23.11.0 (Kristaps Kaupe)
Pull request description:
In #1567 we updated to 23.0.0, not 23.5.0, because that was the last version supporting Python 3.7. Now that Python 3.7 support is dropped with #1639, can upgrade to latest.
Changes in [23.5.0](https://github.com/meejah/txtorcon/releases/tag/v23.5.0):
* twisted.web.client.Agent instances now use the same HTTPS policy by default as twisted.web.client.Agent. It is possible to override this policy with the tls_context_factory= argument, the equivalent to Agent's contextFactory= (Thanks to Itamar Turner-Trauring)
* Added support + testing for Python 3.11.
* No more ipaddress dependency
Changes in [23.11.0](https://github.com/meejah/txtorcon/releases/tag/v23.11.0):
* Fix test-failures on Python 3.12
* Particular GETINFO hanging (https://github.com/meejah/txtorcon/issues/389) (ultra-long lines over 16KiB caused problems in the protocol)
* Use built-in `mock` only (https://github.com/jelly)
* Remove `incremental` (https://github.com/gdrosos)
Basically, not much changes, but fixed bug, dropped dependencies and better support for Python 3.11 and 3.12 is good enough reason to merge for me.
Top commit has no ACKs.
Tree-SHA512: 0379dfd7303f3d2f5567fddda75f4d06af1fb56c0499245745842ba82b5623d49324e4c36e7e759b50becb22874a32282c115f6c5a2c5c18979acc4b096f7d18
Old wallet format isn't used for years and script is broken since
removal of pyaes dependency. If somebody still needs it, he can use
older JoinMarket version to do conversion.
fe9ec99322 When looking for a free TCP ports, bind only to localhost (Kristaps Kaupe)
Pull request description:
Not a real security issue, as this is only used in tests, but it's simple to fix and right thing to do. Found by [GitHub CodeQL code scanner](https://docs.github.com/en/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning-with-codeql).
Top commit has no ACKs.
Tree-SHA512: cf2b3267bef2bf9132e4727305ffdb8d1734a1c1bf083c344096c930835df9a625dfd86d3c3dd5c24e3d8e28e4cbbac47d9d95aaee5198198a60d376c7f1b08a
204f1171c2 Drop Python 3.7 support (Kristaps Kaupe)
Pull request description:
It's EOL since 27 Jun 2023 and 3.8+ is required for #1637.
Also mentioned in docs that JoinMarket is currently not compatible with 3.12 (#1589).
ACKs for top commit:
AdamISZ:
utACK 204f1171c2
roshii:
utACK 204f1171c2
Tree-SHA512: 39ee96aca5e305b894e97a2a843d748a645becbfca1bc9e35f02f33c4634a4f7fee37fd36115510cc052e1d11497dceee2d0fafa12d006dd005d050e5ea1cc9f
9ab8ad632e Remove mention of donations from JoinMarketQt guide (Kristaps Kaupe)
cb6077498c Qt: Remove donation link from "About" dialog (Kristaps Kaupe)
Pull request description:
Donation address link was removed from README in #1611, as it is not in control of any of the current active developers. This removes it also from JoinMarketQt "About" dialog.
Top commit has no ACKs.
Tree-SHA512: 5ea77093dbc94d08f7757eac75a32cabe46272d080fc931194840886d63bd7d5d337be8564a2755df3a32ea34632641e7a42068d41cd87a525801bd66df35827
ab1481d814 RPC API: Add optional txfee property for single joins (Kristaps Kaupe)
Pull request description:
Resolves#1607.
Top commit has no ACKs.
Tree-SHA512: 2cbb8cd38d8888d84fd6ea438dadaf31d0406c4bdadcf9206ca539e1ae728e6c9cb4504de4c62f626bdae585fc7fb923cb148883a5a60faa1c82cf2e00837efa
8254a67341 Update secp256k1 lib deps for pythonbitcointx1.1.5 (Adam Gibson)
Pull request description:
Prior to this commit, code for scalar multiplication the module secp256k1_main in jmbitcoin relied on direct access to the secp256k1 linked library, but the API for accessing that object has now changed in python-bitcointx with version 1.1.5 (there is now a Secp256k1 data class with lib and ctx entries, see the Readme of the project for details). After this commit, we update our code for that API (but do not make functional changes to Joinmarket itself).
ACKs for top commit:
kristapsk:
ACK 8254a67341. Tested by first just upgrading to python-bitcointx 1.1.5, which caused test failures, then applying all changes and tests passed.
Tree-SHA512: 371182be0a9abfd8bc020268c92f2de806f2d6b553d03f19dbb4768eee94a7fe8ef0bc441bf33ec5fa342529ee46f22971edaf46e8b9e3f96b6157316a69724e
Prior to this commit, code for scalar multiplication the module
secp256k1_main in jmbitcoin relied on direct access to the secp256k1
linked library, but the API for accessing that object has now changed in
python-bitcointx with version 1.1.5 (there is now a Secp256k1 data class
with lib and ctx entries, see the Readme of the project for details).
After this commit, we update our code for that API (but do not make
functional changes to Joinmarket itself).
196a097667 Allow absurd fee override when setting tx fee manually (Kristaps Kaupe)
Pull request description:
When user manually specifies `--txfee` with `sendpayment.py`, he likely knows what he is doing. So allow there fees above `absurd_fee_per_kb` setting. But still ask for user confirmation as he could possible made a mistake, for example, added some extra zeros to the value.
Top commit has no ACKs.
Tree-SHA512: 2155c38a483fd6392153bf42b2ea87cb9395f0da289cc2743602493df9e924a1d621688704a46d179e3e574ce41e82ced26b62331157ac2c3d1481931a334ace
3d568376a9 Remove unnecessary check for Python 3.7+ (Kristaps Kaupe)
Pull request description:
Python 3.6 support in JoinMarket is dropped for some time.
Top commit has no ACKs.
Tree-SHA512: e094c174219d289236742a92d4acb37c4763605984dc9e83a233bed6129358c2b96e59dfe0f91dd3fc502a8d02b52db5fe714a5c1dac41845623b4756131e822
935a734b93 Fix tests for Core v26 when user has no access to ~/.bitcoin/settings.json (Kristaps Kaupe)
Pull request description:
From v26 Bitcoin Core always checks it's datadir `settings.json` file, even if you do stuff like `-help` or `-version`. It's stupid, but it is what it is. This makes problems with multi-user setups, where `bitcoind` runs under one user (`bitcoin`) and JoinMarket under another (`joinmarket`), and `/home/joinmarket/.bitcoin` is just symlink to original Bitcoin datadir, with sole purpose that RPC auth cookie is accessible, but `settings.json`, created by `bitcoind` itself, is not group readable. That is setup used for RaspiBolt, but not only, it's setup that makes sense.
Without this, tests fail on such setups:
```
(jmvenv) joinmarket@odroid:~/git/joinmarket-clientserver$ ./test/run_tests.sh
~/git/joinmarket-clientserver ~/git/joinmarket-clientserver
miniircd.tar.gz: OK
Error: Settings file could not be read:
- /home/joinmarket/.bitcoin/settings.json. Please check permissions.
==================================================================================== test session starts =====================================================================================
platform linux -- Python 3.8.10, pytest-6.2.5, py-1.11.0, pluggy-1.3.0
rootdir: /home/joinmarket/git/joinmarket-clientserver, configfile: pyproject.toml, testpaths: test
plugins: cov-2.5.1
collected 421 items
test/jmbase/test_base_support.py
!!!!!!!!! _pytest.outcomes.Exit: Cannot setup tests, bitcoind failing.
Error: Settings file could not be read:
- /home/joinmarket/.bitcoin/settings.json. Please check permissions. !!!!!!!!!!
(jmvenv) joinmarket@odroid:~/git/joinmarket-clientserver$ ls -al /home/joinmarket/.bitcoin
lrwxrwxrwx 1 joinmarket joinmarket 13 Nov 22 2022 /home/joinmarket/.bitcoin -> /data/bitcoin
(jmvenv) joinmarket@odroid:~/git/joinmarket-clientserver$ ls -al /data/bitcoin
total 115448
drwxrwxr-x 15 bitcoin bitcoin 4096 Dec 30 11:11 .
drwxr-xr-x 18 root root 4096 Oct 21 11:21 ..
-rw-r----- 1 bitcoin bitcoin 75 Dec 7 06:20 .cookie
-rw------- 1 bitcoin bitcoin 0 Sep 27 2021 .lock
drwx------ 3 bitcoin bitcoin 4096 Dec 7 06:20 SatSale
-rw------- 1 bitcoin bitcoin 34 Sep 27 2021 banlist.json
-rw-r----- 1 bitcoin bitcoin 1238 Dec 7 06:20 bitcoin.conf
drwx------ 3 bitcoin bitcoin 237568 Dec 30 06:00 blocks
drwx------ 2 bitcoin bitcoin 167936 Dec 30 11:19 chainstate
-rw------- 1 bitcoin bitcoin 17409758 Dec 30 11:23 debug.log
drwx------ 2 bitcoin bitcoin 4096 Sep 12 2022 descriptors_test
-rw------- 1 bitcoin bitcoin 247985 Dec 30 11:22 fee_estimates.dat
-rw------- 1 bitcoin bitcoin 679 Sep 27 2021 i2p_private_key
drwx------ 4 bitcoin bitcoin 4096 Sep 12 2022 indexes
drwx------ 3 bitcoin bitcoin 4096 Dec 7 06:21 jm_v26_test
drwx------ 3 bitcoin bitcoin 4096 Dec 7 08:30 jm_wallet
drwx------ 3 bitcoin bitcoin 4096 Feb 17 2022 joinmarket
drwx------ 2 bitcoin bitcoin 4096 Nov 27 2021 joinmarket-old
-rw------- 1 bitcoin bitcoin 94860907 Dec 7 06:02 mempool.dat
-rw------- 1 bitcoin bitcoin 99 Dec 7 06:21 onion_v3_private_key
-rw------- 1 bitcoin bitcoin 5189788 Dec 30 11:11 peers.dat
-rw-rw-r-- 1 bitcoin bitcoin 1534 Nov 27 2021 rpcauth.py
-rw------- 1 bitcoin bitcoin 60 Dec 19 13:19 settings.json
drwx------ 3 bitcoin bitcoin 4096 Sep 16 2022 specterd452d801d8c61692
drwx------ 3 bitcoin bitcoin 4096 Sep 16 2022 specterd452d801d8c61692_hotstorage
drwx------ 3 bitcoin bitcoin 4096 Sep 16 2022 specterf42828a49e7c6fd0
drwx------ 3 bitcoin bitcoin 4096 Dec 7 06:20 test
```
Fix is to provide `-conf`/`-datadir` argument to `bitcoind -version` calls.
See also discussion in https://github.com/raspibolt/raspibolt/pull/1387.
Top commit has no ACKs.
Tree-SHA512: ccceb876e216c946173191ade4f065b413cdaeda9a5c750cf2bda85d76381f4c4484da5a552c07a2a4c25cba0c38ce722826a497467a0fee15b23f82971cabda