Skip to content

Public beta on the Base Sepolia test network. Payments use test USDC with no real value: do not send real funds. The escrow contract has not had its external security audit yet, and the terms are drafts pending legal review. What the beta means

OpenVPT

Disputes and Arbitration: How OpenVPT Handles Problems With an Order

When you can open a dispute, what counts as evidence, how arbitrators are assigned and rule, how splits are calculated, and how rulings settle on-chain.

Author
OpenVPT Team
Published
Reading
12 min read
Tags
  • disputes
  • arbitration
  • escrow
  • USDC
  • buyer protection
  • seller protection
Contents

TL;DR

  • Only the buyer can open a dispute, and only after the seller has delivered and before the inspection window closes (3 days by default).
  • While a dispute is open, the money stays in the escrow contract. Nothing is released automatically.
  • Arbitrators work from what is recorded on the platform: the listing description, the delivery (including the file's SHA-256 hash) and the evidence both sides submit.
  • A ruling is a percentage split, not all-or-nothing, with a precision of 0.01%. The platform fee is charged only on the seller's share, pro rata.
  • The platform signs the ruling's settlement, then either the buyer or the seller co-signs before it executes on-chain. The platform can never move funds on its own.
  • There is no appeal in the current version. The platform signs a settlement for an order only once.

Why a dispute process exists at all

With digital goods, the hard question usually isn't "did the buyer pay?" It's "is what was delivered what was promised?" A license key that won't activate, a file that doesn't match the description, account details that are incomplete. One side's word alone rarely settles it.

OpenVPT handles this with escrow. When a buyer pays, the USDC goes into an on-chain escrow contract (VPTEscrow), not to the seller and not into a platform account. The contract releases funds only when two of three parties (buyer, seller and the platform signer) sign the same settlement. In a normal sale, the buyer confirms and the platform co-signs. In a dispute, an arbitrator decides the split first, and then the same two-signature rule applies.

This guide walks through a dispute from start to finish, so both buyers and sellers know what they can do and what to prepare.

When you can open a dispute

The conditions

As currently implemented, all of the following must be true:

  1. You are the buyer. Sellers can't open disputes. Their protection is the automatic payout when the inspection window ends (more on that below).
  2. The order is DELIVERED, meaning the seller has submitted the delivery.
  3. The inspection window is still open. It starts at delivery and lasts as many days as the listing specifies (1 to 30, default 3). After that, the system refuses new disputes.
  4. The order doesn't already have a dispute. Each order gets one.
  5. You give a reason between 10 and 5,000 characters long.

When you don't need a dispute

  • The seller never delivered. If a paid order passes its delivery deadline (the listing's delivery days, 3 by default), the system starts a full refund automatically. No arbitration involved.
  • You haven't paid yet. You can request a cancellation, and there's nothing in escrow. To avoid a race with a payment already in flight, the cancellation becomes final only after the payment signature (valid for up to 15 minutes) has expired plus a short grace period.

What happens when the inspection window ends

If the buyer neither confirms nor disputes before the window closes, the system settles the order in the seller's favor: the full amount minus the platform fee. So if something is wrong, act inside the window, not on the last afternoon.

What counts as evidence

Arbitrators can only rely on things they can verify on the platform. These are the main sources:

SourceWhat it containsWhy it matters
Listing descriptionSpecs, version, delivery method as written by the sellerThe benchmark for "what was promised"
Delivery recordDelivery type (file, license key, checklist) and timeFiles get a SHA-256 hash on upload; license keys are stored encrypted
Order chatMessages between buyer and seller on the platformKept by the platform, but arbitrators can't read the chat directly yet, so submit the key parts as evidence
Submitted evidenceText, links, files from either sideBoth parties can add it once a dispute is open

Evidence types you can submit

  • Text: up to 10,000 characters. Good for a timeline and steps to reproduce the problem.
  • Link: http or https URLs only.
  • File: screenshots, screen recordings, error logs. The default limit is 20 MiB per file, and each upload's SHA-256 hash is recorded.

You can add evidence while the dispute is OPEN or UNDER_REVIEW. Once it's resolved, the record is closed. Keep in mind that both parties and the arbitrator can see all evidence, so leave out personal data that has nothing to do with the case.

Why the delivery hash matters

A SHA-256 hash is a fingerprint of a file's contents. Change a single bit and the hash changes completely. Because OpenVPT records the hash when the seller uploads the delivery, anyone can later confirm that the file the buyer downloaded is exactly the file the seller delivered. Nobody has to argue about whether it was swapped.

Why off-platform conversations don't help

The chat flags email addresses, phone numbers, messaging-app handles and outside payment links, and shows a warning. Messages aren't blocked, just flagged. The reason is simple: an arbitrator can't verify anything that happened elsewhere, and money paid outside escrow can't be refunded or brought into a dispute.

The arbitration process, step by step

Step 1: The buyer opens the dispute

The buyer submits a reason from the order page. The order moves from DELIVERED to DISPUTED, and the dispute itself starts as OPEN. The seller gets a notification asking them to submit evidence. The automatic payout at the end of the inspection window no longer applies, and the funds wait in the contract.

Step 2: An arbitrator is assigned (UNDER_REVIEW)

Accounts with the arbitrator or admin role see disputes in a queue, oldest first. Assignment works like this:

  • An arbitrator can assign a dispute to themselves. Only an admin can assign someone else or take over a case another arbitrator already holds.
  • Neither the buyer nor the seller can arbitrate or rule on their own order.
  • The assignee must be an active arbitrator or admin account that isn't banned.
  • Every assignment is written to the audit log.

After assignment, the dispute is UNDER_REVIEW, and only that arbitrator or an admin can rule on it.

Step 3: Reviewing the evidence

The arbitrator can read everything both sides submitted and access the order's delivery. Download links are short-lived, and each access is logged. In practice the review comes down to three questions: what did the listing promise, what did the seller actually deliver, and can the buyer's problem be reproduced?

Step 4: The ruling

A ruling has two parts:

  • The seller's share, from 0 to 10,000 basis points (0% to 100%, in steps of 0.01%).
  • A written reason, stored with the dispute.

Some typical outcomes:

SituationPossible split
Delivery is completely wrong or unusableSeller 0% (full refund to the buyer)
Delivery is complete and the complaint doesn't hold upSeller 100%
Partly usable, or both sides share some faultSomewhere in between, e.g. seller 30%

These rows only show how splits are used. Every case is decided on its own evidence, and there are no preset outcomes.

Worked example: a 1,200 USDC order split 30% / 70%

Take an order for 1,200 USDC with the default 5% fee (500 bps).

At checkout, the fee is 1,200 × 500 ÷ 10,000 = 60 USDC, and that number is written into the contract when the buyer pays. If the sale completes normally, the seller receives 1,140 USDC and the platform receives 60.

Now suppose the arbitrator awards the seller 30%. The split formula in OpenVPT's shared code is:

text
gross      = amount × sellerBps ÷ 10,000
toPlatform = fee × gross ÷ amount        (rounded down)
toSeller   = gross − toPlatform
toBuyer    = amount − gross

Plugging in the numbers:

  1. gross = 1,200 × 3,000 ÷ 10,000 = 360 USDC
  2. toPlatform = 60 × 360 ÷ 1,200 = 18 USDC
  3. toSeller = 360 − 18 = 342 USDC
  4. toBuyer = 1,200 − 360 = 840 USDC

Check: 342 + 840 + 18 = 1,200, exactly the escrowed amount.

RecipientUSDCOn-chain base units (6 decimals)
Seller342342,000,000
Buyer840840,000,000
Platform1818,000,000
Total1,2001,200,000,000

The key point: the fee applies only to the seller's share, pro rata. The buyer's 840 USDC refund carries no fee at all. On a full refund (seller 0%), the platform takes nothing and the buyer gets all 1,200 USDC back.

The contract adds its own check on top. The three amounts must add up to the escrowed amount, and the platform's share can't be lower than fee × toSeller ÷ amount. Here, computed in USDC base units, that minimum is 60 × 342 ÷ 1,200 = 17.1 USDC (17,100,000 base units, which divides exactly), so 18 passes. Any split that breaks these rules is rejected by the contract outright.

How a ruling is executed on-chain

A ruling on its own is just a proposed split. Moving the money still requires the contract's two-of-three signature check:

  1. The arbitrator submits the ruling. The order moves from DISPUTED to SETTLING, the amounts are stored on the order, and the dispute becomes RESOLVED.
  2. The platform signs. The platform signer produces an EIP-712 signature over the settlement: the order ID and the three amounts. If signing fails temporarily, the ruling still stands. An arbitrator or admin can retry, and a background sweep every 5 minutes fills in missing platform signatures.
  3. One party co-signs. Either the buyer or the seller signs exactly the same amounts with the verified wallet recorded on the order. The system checks that the amounts match and that the wallet is the right one.
  4. The platform relays the transaction. With two valid signatures, the platform submits the transaction. The contract verifies the signatures and amounts, then pays the seller, the buyer and the fee address in a single transaction.
  5. The status updates. Once confirmed on-chain, an order where the seller received something is marked COMPLETED; one where the seller received nothing is marked REFUNDED.

In practice, whoever gets paid has the most reason to sign. In the example above, the buyer wants their 840 USDC back and will sign. The seller can sign too; either signature completes the settlement.

Why the platform can't move the funds alone

The contract requires two distinct signers, and the platform signer counts as only one. Even if the platform wanted a different split, it would still need the buyer's or the seller's signature. The contract owner can pause new funding, rotate the platform signer, and manage the token allowlist and fee recipient. It cannot settle orders or withdraw escrowed funds.

Timelines at a glance

StageWindow (as implemented)If it runs out
Payment24 hours after the order is createdOrder is cancelled
Payment signatureValid for up to 15 minutesFetch fresh payment details
DeliveryListing setting after payment (default 3 days, max 60)Automatic full refund
InspectionListing setting after delivery (default 3 days, max 30)No confirmation and no dispute: the system starts a payout to the seller (platform signs, seller co-signs)
ArbitrationNo fixed deadline at presentFunds stay in the contract; nothing auto-releases
Post-ruling signingBackground sweep every 5 minutesAdds the platform signature; a party still co-signs

We don't promise a resolution within a set number of days. How long it takes depends on the case and on how quickly both sides provide evidence.

What arbitration can't do

Knowing the limits helps set realistic expectations:

  • No appeals. The current version has no appeal path. The platform signs at most one settlement per order, so once a ruling is submitted the split is fixed.
  • Nothing beyond the escrowed amount. A ruling can only divide the money in the contract. It can't order anyone to pay extra.
  • Nothing off-platform. Outside payments and side agreements can't be verified or refunded.
  • No reversing a settled transaction. Once the transfer is on-chain, it's final.
  • No late disputes. After the inspection window closes, the system won't accept one.
  • No signing on a party's behalf. After the platform signs, a party still has to co-sign. If the party whose signature is needed has been banned, the order stays in SETTLING until an admin handles it individually.
  • Not a legal judgment. Arbitration is the platform's decision on how to divide escrowed funds under its trading rules. It isn't legal advice and doesn't affect either party's legal rights.

How to avoid disputes in the first place

For sellers

  • Spell out the version, supported platforms, limitations and delivery method in the listing.
  • Test the file or key yourself before delivering it.
  • Include setup or activation instructions with the delivery.
  • Keep every conversation in the order chat.
  • When a buyer reports a problem, reply quickly on the platform and try to fix it.

For buyers

  • Read the whole listing before you buy, and ask questions on the platform first.
  • Check the delivery as soon as it arrives, not on the last day of the window.
  • If something is wrong, take screenshots and note the error message and time.
  • Talk to the seller first; open a dispute if that doesn't resolve it.
  • Never pay outside the platform or move the deal to another channel.

A good dispute reason

text
The license key delivered on 26 Sep failed to activate at 14:05 with
"This key has already been used" (screenshot attached). The listing says
"new, never activated". I told the seller in the order chat at 14:20 and
had no reply or replacement key by 16:00. Requesting a full refund.

A good reason covers what happened, when, how it differs from the listing, what you've already tried, and what outcome you're asking for.

FAQ

Can a seller open a dispute? Not at the moment. A seller is protected by the automatic payout if the buyer doesn't dispute within the inspection window. Once a dispute is open, the seller can respond with evidence.

Can a dispute be withdrawn? The current flow doesn't give buyers a way to withdraw a dispute themselves, so talk to the seller before opening one.

What if the losing side refuses to sign? Their signature isn't needed. The platform has already signed, so a signature from either party executes the settlement. Usually the one receiving money signs.

Who are the arbitrators? Accounts on the platform that hold the arbitrator role. The system stops either party from arbitrating their own case, and every assignment and ruling is audit-logged.

This article describes how OpenVPT currently works. It isn't legal, tax or investment advice.

Next steps

Related reading