Verifying the Release
In order to verify the release, you'll need to have gpg or gpg2 installed on your system. Once you've obtained a copy (and hopefully verified that as well), you'll first need to import the keys that have signed this release if you haven't done so already:
curl https://raw.githubusercontent.com/MostroP2P/mostro/main/keys/negrunch.asc | gpg --import
curl https://raw.githubusercontent.com/MostroP2P/mostro/main/keys/arkanoider.asc | gpg --import
curl https://raw.githubusercontent.com/MostroP2P/mostro/main/keys/catrya.asc | gpg --importOnce you have the required PGP keys, you can verify the release (assuming manifest.txt.sig.negrunch, manifest.txt.sig.arkanoider, manifest.txt.sig.catrya and manifest.txt are in the current directory) with:
gpg --verify manifest.txt.sig.negrunch manifest.txt
gpg --verify manifest.txt.sig.arkanoider manifest.txt
gpg --verify manifest.txt.sig.catrya manifest.txt
gpg: Signature made fri 10 oct 2025 11:28:03 -03
gpg: using RSA key 1E41631D137BA2ADE55344F73852B843679AD6F0
gpg: Good signature from "Francisco Calderón <fjcalderon@gmail.com>" [ultimate]
gpg: Signature made fri 10 oct 2025 11:28:03 -03
gpg: using RSA key 2E986CA1C5E7EA1635CD059C4989CC7415A43AEC
gpg: Good signature from "Arkanoider <github.913zc@simplelogin.com>" [ultimate]
gpg: Signature made fri 10 oct 2025 11:28:03 -03
gpg: using RSA key 9A718444050F091D3D24CF6CE15E232F243D73E6
gpg: Good signature from "Catrya (github) <140891948+Catrya@users.noreply.github.com>" [ultimate]
That will verify the signature of the manifest file, which ensures integrity and authenticity of the archive you've downloaded locally containing the binaries. Next, depending on your operating system, you should then re-compute the sha256 hash of the archive with shasum -a 256 <filename>, compare it with the corresponding one in the manifest file, and ensure they match exactly.
⚠️ Before you upgrade to 0.20.2
Check these three points in your settings.toml before you swap the binary or the Docker image. Each one stopped or emptied a real node on this upgrade.
1. Bonds on and a raised hold_invoice_cltv_delta: set bond_cltv_delta
0.20.2 gives bond hold invoices their own CLTV, [anti_abuse_bond] bond_cltv_delta (#1085). With bonds enabled, mostrod refuses to start unless it is above hold_invoice_cltv_delta + 144 and at most 864. Its default in 0.20.2 is a fixed 432, which only fits a hold_invoice_cltv_delta below 288. With a higher one the node stops at startup, and under Docker restarts in a loop, with:
Could not load settings: Error caused by IO error: anti_abuse_bond.bond_cltv_delta (432) must be above hold_invoice_cltv_delta (298) + 144 (442): ...
It is a settings error, not a disk error. If you run [anti_abuse_bond] enabled = true and [lightning] hold_invoice_cltv_delta is 288 or more, add bond_cltv_delta to [anti_abuse_bond], set to hold_invoice_cltv_delta + 288 and at most 864:
hold_invoice_cltv_delta
| bond_cltv_delta
|
|---|---|
| 144 (default) to 287 | nothing to do |
| 298 | 586 |
| 432 | 720 |
| 576 to 719 | 864 |
| 720 or more | no valid value: lower hold_invoice_cltv_delta below 720, or turn bonds off
|
[anti_abuse_bond]
enabled = true
bond_cltv_delta = 586 # hold_invoice_cltv_delta (298) + 288An order rests in the book for at most bond_cltv_delta - hold_invoice_cltv_delta - 144 blocks, so + 288 keeps 144 blocks (~24 h) in the book. A fix that derives this default from hold_invoice_cltv_delta is in review (#1098, #1100).
2. Maker bonds: orders resting in the book leave it on the first start
This applies with apply_to = "make" or "both". Maker bonds created before 0.20.2 carry the escrow CLTV, which cannot cover a full trade with the new 144-block margin. On the first start, mostrod takes every order resting in the book with such a bond out of the book (maker_bond_deadline: order ... leaves the book in the log). The orders end as expired and their maker bonds are released, so no maker loses sats, but every maker has to publish again. On our main node this emptied the whole book. Upgrade when the book is quiet, and tell your makers.
3. Enabling the new pegged currencies: keep a market price provider
New in 0.20.2 (#1083, #1091), opt-in through [price.providers.pegged]: two kinds of currency that are pegged instead of fetched from a price API.
- Stablecoins, pegged 1:1 to a fiat:
USDT,USDCandDOCfollowUSD. The order'sfais in whole coins and is priced from the node's USD rate, so a USDT market order is priced like a USD one. The network goes in the payment method (USDT (Tron),DOC (Rootstock)); the node does not check it. - Bitcoin on other networks, pegged 1:1 to bitcoin:
BTC(on-chain),LBTC(Liquid) andRBTC(Rootstock). The order'sfais in sats of that asset (fa = 100000is 0.001 RBTC). At market price the order isfasats less the premium.
The trap. Any [price.*] table switches the node to multi-source pricing, and the legacy bitcoin_price_api_url is then ignored. A [price.providers.pegged] block on its own leaves the node with no fiat price. It then quotes only BTC, LBTC and RBTC, the stablecoins lose their USD anchor, and every market-priced order in any fiat is refused with Price API not answered - retry. Enable at least one market provider next to it (a fix is in review: #1099, #1101):
[price.providers.yadio]
enabled = true
url = "https://api.yadio.io"
[price.providers.pegged]
enabled = true
# only = ["USDT", "USDC"] # optional; without it every pegged code is quotedIf fiat_currencies_accepted is not empty, it must also list every pegged code you quote (for example 'USDT', 'RBTC'), or orders in that code are refused. The node warns about this at startup. To accept a code at fixed price only, list it there and leave it out of only. The full reference is in settings.tpl.toml and docs/PRICE_PROVIDERS.md §11.8 and §11.9.
After upgrading, check the log
Settings correctly loaded!appears, and noCould not load settings.price: ... using enabled providers: ...lists a market provider such asyadioorcoingecko, not onlypegged.- No
Price API not answeredon new market-priced orders.
What's Changed in v0.20.2
🚀 Features
- feat(price): quote BTC, LBTC and RBTC at 1:1 in sats by @grunch in #1091
- feat(price): add the stablecoins fixed-peg provider by @grunch in #1083
🐛 Bug Fixes
- fix(price): leave the peg out of tick warnings by @grunch in #1097
- fix: check order sats limits with the premium by @grunch in #1095
- fix: name the sats unit in the hold invoice memo by @grunch in #1096
- fix(bond): keep bond HTLCs clear of their CLTV by @grunch in #1085
- fix: round fiat-to-sats to the nearest sat by @grunch in #1090
💼 Other
- Update CHANGELOG for version 0.20.2 by @grunch
📚 Documentation
- docs(price): specify bitcoin on other networks by @grunch in #1089
- docs(price): specify stablecoins as a provider pegged 1:1 to a fiat by @grunch in #1082
- docs(reputation): record the mostrod releases by @grunch in #1079
🧪 Testing
⚙️ Miscellaneous Tasks
- Release mostro version 0.20.2 by @grunch
Contributors
- @grunch made their contribution
Full Changelog: v0.20.1...v0.20.2