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:
- You are the buyer. Sellers can't open disputes. Their protection is the automatic payout when the inspection window ends (more on that below).
- The order is DELIVERED, meaning the seller has submitted the delivery.
- 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.
- The order doesn't already have a dispute. Each order gets one.
- 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:
| Source | What it contains | Why it matters |
|---|---|---|
| Listing description | Specs, version, delivery method as written by the seller | The benchmark for "what was promised" |
| Delivery record | Delivery type (file, license key, checklist) and time | Files get a SHA-256 hash on upload; license keys are stored encrypted |
| Order chat | Messages between buyer and seller on the platform | Kept by the platform, but arbitrators can't read the chat directly yet, so submit the key parts as evidence |
| Submitted evidence | Text, links, files from either side | Both 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:
| Situation | Possible split |
|---|---|
| Delivery is completely wrong or unusable | Seller 0% (full refund to the buyer) |
| Delivery is complete and the complaint doesn't hold up | Seller 100% |
| Partly usable, or both sides share some fault | Somewhere 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:
gross = amount × sellerBps ÷ 10,000
toPlatform = fee × gross ÷ amount (rounded down)
toSeller = gross − toPlatform
toBuyer = amount − grossPlugging in the numbers:
- gross = 1,200 × 3,000 ÷ 10,000 = 360 USDC
- toPlatform = 60 × 360 ÷ 1,200 = 18 USDC
- toSeller = 360 − 18 = 342 USDC
- toBuyer = 1,200 − 360 = 840 USDC
Check: 342 + 840 + 18 = 1,200, exactly the escrowed amount.
| Recipient | USDC | On-chain base units (6 decimals) |
|---|---|---|
| Seller | 342 | 342,000,000 |
| Buyer | 840 | 840,000,000 |
| Platform | 18 | 18,000,000 |
| Total | 1,200 | 1,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:
- The arbitrator submits the ruling. The order moves from DISPUTED to SETTLING, the amounts are stored on the order, and the dispute becomes RESOLVED.
- 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.
- 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.
- 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.
- 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
| Stage | Window (as implemented) | If it runs out |
|---|---|---|
| Payment | 24 hours after the order is created | Order is cancelled |
| Payment signature | Valid for up to 15 minutes | Fetch fresh payment details |
| Delivery | Listing setting after payment (default 3 days, max 60) | Automatic full refund |
| Inspection | Listing 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) |
| Arbitration | No fixed deadline at present | Funds stay in the contract; nothing auto-releases |
| Post-ruling signing | Background sweep every 5 minutes | Adds 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
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: Buyer's guide: safely buying source code and SaaS licenses
- Related reading: Seller guide: from listing to payout
- See the full flow: How it works
- Check the fees: Pricing
- Start browsing: Listings
- More answers: Help center
- Need a hand? Contact us