
BasicSwap v0.19.0: Smart Buy, Nostr Messaging, and More Reliable Swap Accepts
BasicSwap v0.19.0 begins the 0.19 series with a substantial update to how you plan and fund swaps and how peers communicate. Smart Buy arrives in beta to handle the offer-by-offer calculations for you, so you can enter how much you want to pay or receive and review the proposed bids before placing them. Corrected redeem fee estimates for Monero-family coins and reverse offers also give you a more accurate view of the expected cost when planning a buy spread across several offers.
On the messaging side, the new Networks tab brings SMSG, SimpleX, and the newly added Nostr transport into one settings page, while the default SimpleX Chat version moves to v7.0.0. Alongside these network changes, the release fixes how adaptor-signature swaps handle repeated accepts and assemble the separate messages that carry their proofs.
For existing installations, the release also updates Firo to v0.14.18.1 and upgrades a v0.18.10 installation's database from schema v38 to v40 on first startup.
Most notable updates
Smart Buy works through the offers for you
To start a Smart Buy, choose the coins you want to pay and receive, enter an amount on either side, and set the maximum number of bids you are willing to place. BasicSwap then compares eligible offers using their rates, minimum amounts, and estimated redeem fees, giving you a preview of the proposed bids and the estimated net amount you would receive (PR #728).

The price ceiling can follow the market rate or the best eligible offer, with defaults of up to 15 bids and a ceiling 5% above the market rate. If no market rate is available, that planning mode stops with an error, so you will need to use the best-offer anchor or pick offers manually to continue. Picking offers yourself bypasses the automatic price ceiling, so review their rates and the total before confirming (backend commit 8449a18, interface commit bf7f6ce).
After you place the bids, the bids page groups them under the same buy, while Smart Buy's History tab lets you return to earlier buys and retry a shortfall. Each bid still depends on its own counterparty and swap progress, so a failed bid does not roll back bids that were placed successfully (PR #728).
Smart Buy is in beta, and the available offers may only fill part of your requested amount at your chosen limit. The preview shows that shortfall and warns when the planner reaches its search limit, since that result may not be the cheapest available combination. Check the estimated fees and net receive amount as well as the quoted rates before confirming.
Funding several bids together
Placing several bids together also means preparing their funding without having them compete for the same wallet outputs. For a reverse adaptor-signature buy where the buyer funds separate chain-A locks, BasicSwap reserves distinct inputs for each bid where the coin supports input selection, splitting wallet outputs first if needed so the locks can be prepared together (commit f580f33).
On supported coins, ready adaptor-signature bids in the same placement group can share one chain-B funding transaction, while secret-hash bids can share one participate transaction with a separate lock output for each swap. Since the bids will not necessarily become ready together, BasicSwap waits within bounded deadlines before allowing the ready bids to proceed, leaving slower bids to fund separately when needed. Where it can measure a lock's remaining window, it also checks that window before extending the wait (commits 8449a18, 98d0661).
Scripts can use the same planning and placement functions through POST /json/bids/plan, which returns a preview without placing bids, and POST /json/bids/bulk, which places the supplied bids and reports successes and failures separately. Bid listings include a plan_id for grouped bids and their stored plan_target, allowing a client to track a buy across retries (API documentation).
Nostr joins the message networks
Nostr can now carry BasicSwap offers, bids, and swap messages, either alongside the existing message networks or as your selected transport. Add it under Settings > Networks, or run basicswap-prepare --datadir="$SWAP_DATADIR" --addnetwork=nostr with your installation's data directory, then restart BasicSwap. The prepare command accepts NOSTR_RELAYS and NOSTR_POW_TARGET environment variables when you want to change its relay list or outgoing proof-of-work target (PR #754, Nostr guide).
Bid and swap payloads retain BasicSwap's SMSG encryption, while each newly negotiated direct Nostr route gets its own signing key pair, separate from wallet keys and the persistent key used for broadcasts. Those separate keys reduce linkage between routes, but relays can still observe the outer signing key, message timing, and event size, and public offers remain readable to anyone with the shared BasicSwap network key. If you enable Tor in BasicSwap, Nostr uses the configured Tor proxy for its relay connections (commit 669e182).
The Networks tab lets you enable or disable the configured transports, adjust Nostr and SimpleX settings, and enable optional network bridging for nodes that need to communicate across different transports. Adding a network through prepare keeps the others enabled, and the disable command refuses to remove the last enabled network; /json/networks also reports which networks are enabled and active (PR #754).
Use wss:// relays, since plain ws:// connections without a proxy expose relay traffic metadata on the wire and produce a warning. Outgoing proof of work and the incoming minimum are separate settings, both defaulting to zero; raising the incoming minimum can exclude ordinary BasicSwap peers whose events contain no proof of work. When using multiple networks, check that smsg_payload_version is 2 so BasicSwap can identify duplicate messages across transports.
SimpleX Chat v7 and group changes
The SimpleX Chat default moves from v6.3.5 to v7.0.0, and newly prepared SimpleX configurations use the official BasicSwap group link unless you supply another one. Changing a recorded group link now causes BasicSwap to leave the existing groups and join the replacement on restart, while keeping direct contacts used for bid messages; if the node owns an existing group, it refuses the switch until you resolve that group in SimpleX Chat (PR #753).
Existing installations need one restart before changing groups, because the first startup records the configured link if there is no joined link on file. The release also makes temporary send failures retryable when the simplex-chat client is unreachable, and corrects prepare's server-address setting to read SIMPLEX_SERVER_ADDRESS, which the older code mistakenly took from SIMPLEX_CHAT_VERSION (commit ed63285).
Repeated accepts keep the same swap transactions
An adaptor-signature accept contains the lock transaction, refund transactions, and proof material that both peers need to agree on before the swap proceeds. BasicSwap now saves that prepared accept before sending it and reuses the saved contents on a retry, including for reverse bids, so a retry does not create a different lock transaction and proof for the same bid (PR #749).
The separate proof messages now identify the parent message they complete when both peers support the updated protocol, so proof parts that name a different accept are excluded during assembly. While a bidder is still receiving an accept, it can replace that accept with a later one; for older peers whose proof messages lack a parent ID, BasicSwap uses send timestamps and requires the replacement to have been sent at least one second later. Once the bid advances beyond receiving the accept, this replacement rule no longer applies (PR #746, PR #757).
Redeem fees and Firo Core
Monero and Wownero redeem estimates now follow the configured wallet priority, using a tier-two estimate when the priority is automatic, since the wallet chooses its own rate for a sweep. Reverse offers also use the correct side of the offer when estimating the received coin's redeem fee, bringing that correction into both the offer page and Smart Buy's comparisons (commit 36a1d82).
Firo Core moves from v0.14.18.0 to v0.14.18.1, so include the core update step when upgrading an installation that uses BasicSwap-managed Firo binaries (PR #756).
Install the latest BasicSwap update
To install, update BasicSwap through the usual process and relaunch.
Back up your coindata directory before updating, since the first startup upgrades database schema v38 to v40. Include --upgradecores to fetch Firo Core v0.14.18.1 where BasicSwap manages that daemon, and review the new Networks tab after restarting. SimpleX Chat uses a separate preparation step, described below.
Docker
If you installed BasicSwap with Docker:
- From your BasicSwap repository's
dockerfolder, stop the running container withdocker-compose stop. - From that same folder, run
git pull. - Run
docker-compose build --no-cache. - Run
docker-compose run --rm swapclient basicswap-prepare --datadir=/coindata --upgradecores. - When the core update finishes, launch BasicSwap again with
docker-compose up.
Depending on your Docker version, the command may be docker compose without the dash.
Non-Docker
If you installed BasicSwap without Docker, use the steps below and replace $HOME/coinswaps with your installation directory if it differs:
- Shut down BasicSwap properly.
- Run
export SWAP_DATADIR="$HOME/coinswaps". - Run
source "$SWAP_DATADIR/venv/bin/activate". - From
$SWAP_DATADIR/basicswap, rungit pull. - Run
pip3 install --require-hashes -r requirements.txt. - Run
pip3 install .. - Run
basicswap-prepare --datadir="$SWAP_DATADIR" --upgradecores. - Launch BasicSwap as usual.
Updating the SimpleX client
If you use SimpleX, stop BasicSwap and run basicswap-prepare --datadir="$SWAP_DATADIR" --addnetwork=simplex to prepare the v7.0.0 client; for Docker, run docker-compose run --rm swapclient basicswap-prepare --datadir=/coindata --addnetwork=simplex from the docker folder instead. Re-adding SimpleX applies the preparation defaults and any environment overrides, so set SIMPLEX_GROUP_LINK, SIMPLEX_SERVER_ADDRESS, and SIMPLEX_WS_PORT to your intended values if you use a custom configuration (SimpleX guide).
SimpleX Chat v7.0.0's signed checksum manifest covers the Ubuntu x86_64 builds, so BasicSwap's prepare step cannot verify its downloads for the other supported platforms. For those platforms, the SimpleX guide describes supplying your own binary at bin/simplex/simplex-chat and adding the network with --nocores, which skips BasicSwap's download and verification step. After preparing the client, restart BasicSwap and let that first startup record your existing group link before changing it.
Install script
If you installed BasicSwap with Nahuhh's GitHub installation script, run bsx-update, then check the SimpleX client steps above if you use that network.
Changelog
The v0.19.0 changelog, grouped by area.
Smart Buy and batched funding
- Add the buy planner, bulk-bid API, and grouped chain-B funding [
8449a18] / PR #728 - Reserve distinct inputs for reverse-bid locks and split wallet outputs when needed [
f580f33] - Batch ready secret-hash participate outputs in one funding transaction [
98d0661] - Add the Smart Buy page, grouped bids, and buy history [
bf7f6ce]
Message networks
- Add Nostr transport, route signing keys, relay controls, and the Networks settings tab [
669e182] / PR #754 - Update SimpleX Chat defaults to v7.0.0, handle group-link changes, retry temporary client send failures, and correct the server-address environment variable [
ed63285] / PR #753 - Refactor release preparation into reusable coin and network modules [
d1853b0] / PR #752
Swap accepts and fee estimates
- Save prepared adaptor-signature accepts before sending and reuse them on retries [
93ff612] / PR #749 - Associate split proof messages with their parent message while keeping older-protocol compatibility [
6ad36ee] [1ec8939] / PR #746 - Accept a later adaptor-signature accept while still receiving the earlier one, with timestamp rules for older peers [
087ce4c] [331e89f] / PR #757 - Correct Monero-family and reverse-offer redeem fee estimates [
36a1d82]
Versions and tests
- Update Firo Core to v0.14.18.1 [
fe1353c] / PR #756 - Raise the GUI version to v4.1.0 [
f74be67] - Add tests for repeated accepts, batched bids, partial in-flight funding, and mixed message networks [
b930849] [6f5d21e] [ddce922] [535ba40] [669e182]
You can inspect every change on the v0.18.10 to v0.19.0 comparison page.
Stay connected
Keep up with BasicSwap on social media:
- Twitter: @basicswapdex
- Matrix: BasicSwap channel
- GitHub: BasicSwap repositories
- Support the project: Donation page

BasicSwap Team
The official team behind BasicSwap. We're a group of passionate contributors dedicated to making atomic swap technology ubiquitous by creating accessible, user-friendly solutions for everyone.
Related Posts

BasicSwap v0.18.10: More Price Oracles, Safer Rate Handling, and Swap-Scan Fixes
By BasicSwap Team on September 30, 2026
BasicSwap v0.18.10 adds six price sources, per-source rate-limit handling and stale-rate checks, fixes watched-output and Decred lock-output scans, and updates Particl Core.

BasicSwap v0.18.6 through v0.18.9: Swipe-Payout Recovery, Wallet Fixes, and WebSocket Hardening
By BasicSwap Team on September 16, 2026
Four BasicSwap releases that add swipe-payout recovery when no mercy transaction is sent, tighten WebSocket handling, fix wallet and Electrum edge cases, and update Litecoin and Particl Core.

BasicSwap v0.18.0 through v0.18.5: Refund-Path Hardening, a Reworked Mercy Path, and Coin-Core Updates
By BasicSwap Team on August 24, 2026
Six BasicSwap releases in one post. v0.18.0 brings stricter fee verification, tighter Electrum connections, and an AMM rate-poisoning guard. v0.18.1 through v0.18.3 harden the adaptor-sig refund path against fee-replacement. v0.18.4 and v0.18.5 rework the altruistic mercy keyshare path, prune stale offers, and raise the swap protocol version again. Update recommended, and the Decred and Firo core updates are mandatory.