P2P Trading 6.2.8

13 August 2026

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

REPUTATIONTRADESPAYMENTSDISPUTESPRIVACYMODERATIONADMINMOBILEBUG-FIXES

P2P Trading v6.2.8

Release Date: August 13, 2026 Tags: REPUTATION, TRADES, PAYMENTS, DISPUTES, PRIVACY, MODERATION, ADMIN, MOBILE, BUG-FIXES

Overview

A trust release. A cancelled trade counted against both traders, so a buyer could open a trade, cancel it before paying, and walk a seller's 100% rating down for free — the seller having done nothing but wait. Completion rates move when you update; read Upgrade Notes first.

Three things a trade needs were missing from the screen where it happens. The seller's account details never appeared when the offer was attached to a shared payment method, so the buyer had a countdown and nowhere to send money. The maker's terms were required of every advertiser and shown to no taker. And the trade chat could empty itself on reload while the conversation was still on the record.

Disputes gain the other half: the trader a case is filed against can now answer it, and either party can hand a reviewer a bank statement or a screen recording — which the panel asked for and the chat could not accept. Traders can follow, block and report each other, and blocking is enforced rather than cosmetic. Requires Core v6.6.6.

Update Instructions

pnpm updator

Restart the backend afterwards. Two tables are created and the dispute table gains three columns, applied automatically on the first boot after updating. No script to run, and no ruling already made on the dispute desk is altered.


Upgrade Notes

Completion rates change, and most of them go up

A completion rate is a claim about a person. It was counting every cancelled and expired trade against both sides — so a buyer who opened a trade and cancelled it before paying took the seller's rate down with their own. The seller published an offer and waited; there was nothing they could have done differently.

On a marketplace where the rate is the headline trust signal, that is worse than inaccurate. Anybody could open and cancel trades against a maker they disliked and walk their rating down, for free, as often as they liked.

Each terminal state now goes on the record of whoever caused it. A cancellation counts against the party named as cancelling it, and nobody else — an administrator cancelling a trade now counts against neither trader, where before it counted against both. An expiry counts against the buyer, because it means the payment window closed without them confirming payment while the seller's crypto sat in escrow.

  • Fixed a cancelled trade counting against the counterparty who did not cancel it.
  • Changed an expired trade to count against the buyer only.
  • Changed an administrator's cancellation to count against neither trader.
  • Expect completion rates to rise for traders who were carrying somebody else's cancellations. Nothing is recalculated or stored — the figure is derived on read, so it corrects itself the moment you update. No trade, escrow or payout is affected.

A blocked trader cannot open a trade with you

Blocking is new and it is enforced, not a filter. Once one trader blocks another, the offers disappear from both boards and neither can open a new trade with the other, whether they reach the offer through the marketplace or through a shared link.

It deliberately does not touch a trade that is already open: escrow is held on those and both parties still have to finish or dispute them. The blocked trader is never told, and sees an offer that is simply not there.

  • Added blocking between traders, enforced on the marketplace, the traders list and the door that opens a trade.

Added

The trader a dispute is filed against can now answer it

A dispute has two traders in it and one of them had no control at all. The trader who raised a case could withdraw it; the trader it was raised against could type into the trade chat and hope somebody scrolled far enough. On a false claim, that was the whole of their defence — while the escrow stayed frozen behind the only formal statement on the record, which belonged to their accuser.

  • Added an Appeal dispute control for the respondent. It puts their account of what happened on the case, shows it to the trader who raised the dispute, and flags the case as contested so the desk knows it cannot be cleared by reading one side of it.
  • Added the appeal to the admin case file, directly under the claim, with the absence of one stated in words — an uncontested case is not an agreed one.
  • An appeal never closes the other party's case. Only an operator decides a contested dispute.

Evidence can be submitted as a document or a screen recording

The dispute panel asked for a bank statement as a PDF and a screen recording of a banking app, and then told the trader to post them in the trade chat. The chat accepts images and nothing else. The product asked for two things it could not receive, and anybody who followed the instruction got an upload failure.

  • Added an evidence locker on the trade screen taking PDF (20 MB), images (10 MB) and screen recordings — MP4, WebM and QuickTime (64 MB). Both traders can submit while the case is open, and both can see what has been submitted.
  • Added the same to the mobile app.
  • Changed the admin case file to render each piece of evidence as what it is: a document opens, a recording plays in place, an image previews. Every one of them used to be drawn as an image thumbnail, so a bank statement appeared as a broken picture.
  • Files are stored outside the web root and are served only to the two traders and the desk. A document is downloaded rather than opened in the page.

Follow, block and report

  • Added Follow on a trader's profile, with a follower count. It grants nothing and the trader is not told — it is a bookmark.
  • Added Report user, separate from a dispute. A dispute decides where the money on one trade goes; a report is about the person — an off-platform request, a third-party payment, abuse in a chat, an advert carrying a phone number. One open report per pair and ten per day, so the queue cannot be used as a weapon.
  • Added a Reported traders queue under Admin → P2P, where a report is read and closed with a stated reason. No action against the account is offered from it: suspending and banning stay on the user administration screens, where they are audited.

Changed

The Sell action is red

  • Changed the marketplace action button to follow the direction of the trade — green to buy, red to sell — on the board, the recommendation cards and both trade forms. Selecting Sell produced a green Sell USDT button, the same colour as the buy it is the opposite of.
  • Fixed the mobile offer card painting a Sell button green in mixed listings. The label and the colour were worked out separately and disagreed.

Fixed

The trade chat emptied itself

A trade's conversation is stored on the trade, and the room chose between two copies of it — the one it fetched and the one the live connection delivered. It took whichever arrived last, so a single empty or short delivery took the whole conversation off the screen, and only a reload brought it back. A trader who left the page and came back could find an hour of an ongoing negotiation gone.

  • Fixed the trade chat clearing on reload. The room now merges every source it has instead of choosing between them, so no single delivery can empty a conversation that has already been read.
  • Fixed an unreadable transcript being reported to both traders as an empty one. The room is now told nothing rather than told the conversation is empty, and keeps what it already has.

The buyer was never shown where to send the money

An operator publishes shared payment methods — Bank Transfer, Opay, UBA — so every maker can advertise them. Those rows belong to nobody and carry no account number: a trader's own details live on their own payment method. The offer form lists both as identical choices, so a maker ticking Opay attached the shared row, and the buyer opened the trade to

" hasn't published account details for this method."

while the seller's account number sat exactly where the product had asked them to put it.

  • Fixed a trade showing no account details when the offer was attached to a shared payment method. The seller's own account on the same rail is used, and trades already open pick it up on the next view without anything being rewritten.
  • Added the payment instructions to the mobile trade screen, which never had them at all — a buyer there had a countdown and a Confirm Payment button, and nowhere on the screen the account to pay into.

The advertiser's terms were required and never shown

Every maker must write terms of trade to publish an offer, and the offer form tells them they are "shown before anyone opens a trade". They were not: the marketplace published them, and the form that opens the trade dropped them.

  • Fixed the maker's terms not appearing in the trade form. They are shown above the button that accepts them.
  • Added the terms to the trade screen itself, on web and mobile, so they stay readable for the life of the trade — a dispute is exactly when somebody goes looking for what was agreed.
  • Changed trades to record the terms they were opened under, so editing an offer no longer changes the terms of a trade already in flight.

A withdrawn dispute was never announced

The trader a dispute was raised against was emailed when it opened and told nothing when it was withdrawn. The notification was written and had no case to match, so it sent nothing at all — leaving somebody believing their escrow was still frozen, with reopening the trade the only way to find out otherwise.

  • Fixed the withdrawal of a dispute notifying nobody. Both parties are now told.

The trade room sent more than it showed

  • Fixed the counterparty's email address being sent to the other trader on every trade. Nothing displayed it; it was on the wire.
  • Fixed the live connection handing traders the operator's internal dispute notes and the name of the deciding administrator. The other door onto the same trade had stripped both for a long time, and the room usually loads through this one.

The trader tab on mobile was not the trader

Every account on it read "4.8 (156 reviews)", "98.5% completion", "2 min response", "1,250 trades" and four green verification ticks — the same figures for a merchant with a thousand settled trades and for an account opened that morning. It was placeholder text on the one screen whose job is deciding whether to send a stranger money, and it read most convincingly for exactly the accounts that deserved the most suspicion.

  • Fixed the mobile trader tab showing invented ratings, completion rates and verification badges. It now shows the trader's real record — completed trades, completion rate, average escrow release time and rating — with anything unmeasured stated in words rather than drawn as a zero.
  • Fixed reviewer names never appearing on mobile. The app read fields the endpoint has never sent, so every review rendered with no author.