MMashDiv

P2P Trading 6.4.2

Latest

13 October 2026

This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.

OFFERSCOMPOSERMARKETALERTSACCESSIBILITY

P2P Trading v6.4.2

Release Date: October 13, 2026 Tags: OFFERS, COMPOSER, MARKET, ALERTS, ACCESSIBILITY

Overview

The offer composer gets a Preview, and the market opens on every offer. A maker can press Preview beside Publish to see the card a taker will see, with their own side of the deal and what is still missing. The taker requirements fold into one Advanced Options section, and every label, hint and control of the composer is a step larger. The market now opens on All offers for a visitor who arrives without a link that names a view, and Upgrade Notes says which installs that moves and how to keep the old front door.

Both trade forms now take a typed amount of crypto as well as a price, so an exact amount can be asked for. A live trade you may cancel gets a red Cancel Trade with a question in front of it, and the text on the pages a trader works in is 14px or larger.

The security alert an admin gets for every new trade now opens that trade. It opened "No trade with that id" before.

Requires Core v6.8.6: the 33 new strings (the composer, the amount box and the Cancel question) are in its language files.

Update Instructions

pnpm updator

No schema change, no seeder, no .env change. The backend restarts at the end, and the alert fix needs that restart. Update Core 6.8.6 in the same window. The 33 new strings are in English in all 90 languages until they are translated, and a few of the new texts are written in English directly in the page.


Upgrade Notes

The market opens on All offers

Default Market View is the setting that chooses what a visitor who names nothing sees first. Its fallback was Find me someone and is now All offers. The setting screen saves only the keys that were changed, so an install that never touched the field has no stored value and moves to All offers on update.

  • Changed the opening view for those installs. A visitor who arrives with nothing named sees every offer, with no asset, currency or country chosen for them, and the page no longer makes the background lookup of where the visitor is.
  • To keep the old front door, set Admin → P2P → Settings → UI & Display → Default Market View to Find me someone (suggested counterparties). A saved Traders view is kept as it is.
  • On an install that had saved All offers, a visitor who names nothing no longer starts on the busiest pair or their own country either. The address /p2p/offer and a shared ?lens=offers link are an unfiltered board in the same way.
  • The security alert for a new trade now links to that trade. Alerts delivered before the update keep the link they were sent with, which opens "No trade with that id". Every committed trade still sends one high-priority alert to all Admin and Super Admin users (in the panel, by e-mail and by push), and two for a trade above 1000 units.

Added

Preview and Advanced Options in the offer composer

  • Added a Preview button beside Publish offer and Save as draft. It opens the taker's card together with the maker's own side of the deal: the direction, who can see the offer, the notes, the taker requirements and what happens to their funds. A line says what is still needed, and Keep editing and Publish offer sit in a footer that stays in reach on a phone.
  • Added the taker requirements as one collapsible Advanced Options section. Its closed face says how many are on ("3 on", or "None set"). The count covers six requirements.

An exact amount of crypto can be typed

Both trade forms, the market's inline one and the offer page's, asked for a figure in the price currency and printed the crypto it came to. Somebody who needed an exact amount, an invoice to cover or a wallet to top up, had to guess a price and nudge it until the crypto side read what they wanted.

  • Added a typed box for the crypto amount in both forms. What a buyer types under I receive (You receive on the offer page) is what they are left holding after the escrow fee, and the price box works out what that costs. A seller's I send (You send) is typed the same way. Typing in the price box hands the lead back to it.
  • The trade is opened for the figure that was typed, not for a copy re-worked from the rounded price. Without a fee, 0.001 BTC at 86,468.93 USD shows 86.47 USD in the price box, and the trade is opened for exactly 0.001, not for the 0.00100001 that 86.47 divides to. Where the fee comes out of what the buyer receives, the trade is opened for a little more than they typed, enough that they are left with that amount to the eighth decimal place.
  • The box takes eight decimal places for a coin and two for a national currency; further digits are cut as they are typed. The trader's limits are checked on the exact figure the trade opens for, so an amount that sits exactly on a limit is accepted.

A red Cancel on the live trades list

  • Added a red Cancel Trade button on the card of a live trade, beside the button that opens the trade. It is drawn only for the two people the platform lets cancel, and only at the steps where it does: the person who owes the payment while the trade waits for it, and the person who holds the escrow once the payment window has passed. Not after the payment has been confirmed, and not in a dispute.
  • Added a question in front of it, "Cancel this trade?", that says when the answer is yes: only if no money has been sent, or, for the person holding the escrow, only if the payment has not arrived (if it has, the buyer has to confirm it before it can be released). It stays open until the platform has answered, shows the reason the platform gives when it refuses, and cannot be sent twice.

Changed

Plainer wording and larger type in the composer

  • Changed the wording the testers found unclear: "Asset" is now "Coin or currency", "Margin on the market rate" is "Above or below the market price", and "Total up for trade" is "Total you're offering".
  • Changed the composer's type a step larger: labels from 14 to 16px, hints from 12 to 14px, headings from 11 to 14px and controls from 14 to 16px (text inputs on desktop only). The edit-offer screen shares these pieces and is larger too.

Every text on the trader pages is at least 14px

The offer page drew its labels at 10px and its explanations at 12px, the market rows their chips at 11px and the live-trade cards their money labels at 10px. Only the composer had been enlarged, and a tester pointed at a paragraph in 14px and asked for nothing smaller than that.

  • Changed all the text of the pages a trader works in (the market, the offer page, My trades, the trade room, the trader profile, My offers, the payment methods, the offer composer and its edit screen) to 14px at least. The smallest was 9px.
  • Changed the small buttons (32px high or less, 12px text) to the next size up (36px high, 14px text), the group headings of the composer's currency pickers, and the seven badges of the trader profile to 14px.
  • Changed the layouts the larger text would have stretched on a phone, so nothing runs off a 390px screen: the trade room, the dispute dialog and the live-trade card.
  • Changed the trade room's Cancel Trade to ask "Cancel this trade?" first. It cancelled on the press before.
  • Not part of this: the admin P2P screens, the landing page (its captions come from the landing kit that every add-on shares) and the diagrams on the learn page, which are artwork that scales with the page.

The market's opening view is read on the server

The market chose its opening view in the page's first render from a store that is filled only after that render. A visitor with no stored copy therefore saw the code's own fallback whatever the operator had saved: on an install that had saved All offers, first-time visitors landed on Find me someone with a pair somebody else had chosen.

  • Changed the page to read the setting on the server and hand it to the market, so a first-time visitor gets the operator's choice. A shared ?lens= link still wins. If the server cannot reach the settings, the page falls back to the stored copy and then to All offers.

A cash asset says it must be priced in crypto

The platform holds crypto in escrow and never cash, and the server already refused to publish, or to keep active, an offer that sells cash for cash.

  • Changed the composer to say so on the Priced in field before anything is pressed: crypto is listed first, national currencies stay listed but greyed and marked "Crypto only", and a cash-for-cash pair offers one click to fix it. Drafts still save.

Fixed

The admin's security alert for a new trade opened an empty page

Every new trade raised a high-priority "P2P Security Alert" whose link was /admin/p2p/trade/<id> with the offer's id, because the entry was filed before the trade row existed. On a live install the alerts that were checked all opened "No trade with that id". The entry was also written before the trade was committed, so an initiation that rolled back still paged every admin.

  • Fixed the entry to name the trade's own id and to be written after the commit, beside the comprehensive entry. An initiation that rolls back no longer pages anyone.
  • Fixed the alert's link builder to point only at pages that exist: a trade, an offer or a dispute in the P2P admin, a user in the CRM, and the activity log for anything else, including an alert with no id. The activity-log address was wrong (/admin/p2p/activity-log; the page is /admin/p2p/activity). None of the alerts sent today used those other links, so they are corrected before one does.

"Located in" printed whatever sat in the country field

  • Fixed the composer's line and the live offer page to build "city, region, country name" from the picked country, so "Ikeja, Lagos, Nigeria" in both. The offer page used to print the stored code ("Ikeja, Lagos, NG"), so a maker previewing an offer saw a line the taker would not. The name is in English.
  • A draft restored on the device whose country is not a country code loses its country, region and city together; the preview shows a dash. A published offer keeps whatever its maker stored, with a known code written out.

Choice tiles refused a plain click

The tiles for I'm selling / buying, wallet, price model and Everyone / Link only were hidden one-pixel radio buttons under a label. Testers reported that in Chromium a click, or a check from a test driver, on one of them was refused.

  • Fixed them to be real inputs laid over their tiles, so a native click or check lands. The payment-method chips, which were buttons with a checkbox role, are real checkboxes as well. The edit-offer screen shares them.

The preview card slid under the fixed header

  • Fixed the composer's preview card to stick below the header from desktop width (1024px) up. Below that width it is not sticky.