Why OpenVPT Settles in USDC on Base: Stablecoins, Networks and Fees Explained
Why OpenVPT settles orders in USDC on Base: price stability, 6 decimals, low gas, what you need in your wallet, how to verify addresses, and mistakes to avoid.
- Author
- OpenVPT Team
- Published
- Reading
- 11 min read
- Tags
- USDC
- Base
- stablecoins
- gas
- wallet safety
- escrow
Contents
TL;DR
- OpenVPT orders are priced and settled in USDC, a dollar-pegged stablecoin with 6 decimals, on the Base network (mainnet chainId 8453).
- A stablecoin means neither buyer nor seller carries price risk during the days between payment and payout.
- Base is EVM-compatible, usually cheap to transact on, and has USDC issued natively by Circle.
- Buyers need USDC on Base for the order amount plus a little ETH on Base for gas (an approval and the payment itself). Confirming delivery and signing settlements are off-chain signatures and cost no gas; the platform relays the settlement transaction.
- The classic mistakes: wrong network, wrong token (such as bridged USDbC), paying straight from an exchange, and sending USDC directly to the escrow contract address.
- This article explains how the product works. It is not investment, legal or tax advice.
When you buy a software license, a digital file or an account service on OpenVPT, you are not running a card charge or spending platform credits. You are locking USDC in an on-chain escrow contract, VPTEscrow. New users usually ask: why USDC, why Base, and what do I need? Here are the answers.
Why a stablecoin instead of ETH or BTC?
A digital-goods order is not instant. Between checkout and payout there are several windows:
| Stage | OpenVPT default |
|---|---|
| Payment deadline after placing the order | 24 hours |
| Validity of each set of payment parameters | Up to 15 minutes (just fetch fresh ones) |
| Delivery deadline | The delivery days set on the listing |
| Inspection window after delivery | Set per listing, 3 days by default |
| Dispute handling | Depends on the case |
Settle in a volatile asset and every price move during those days lands on someone. If the price drops, the seller is paid less than agreed in real terms. If it rises, the buyer has overpaid. In a dispute, you'd also be arguing over which day's rate "the agreed price" means.
A stablecoin takes that variable off the table. A 1,200 USDC order is 1,200 when it is funded and 1,200 when it pays out. Both sides can focus on the product, and fees stay simple and predictable.
A note on "stable": USDC is designed to track the US dollar, but that is not the same as risk-free. Stablecoins carry issuer, reserve-management and regulatory risk, and they have briefly traded away from $1 in the past. Decide for yourself whether holding one suits you.
What is USDC?
USDC is a dollar stablecoin issued by Circle. According to Circle, each USDC is backed by an equivalent amount of dollar-denominated reserve assets (mainly cash and short-dated US Treasuries) and can be redeemed with Circle 1:1 for US dollars. Circle also publishes regular reserve reports prepared by an independent accounting firm. For the details and current figures, go to Circle's USDC page (opens in a new tab). OpenVPT makes no guarantee about the issuer's reserves or redemptions.
A few technical points matter for everyday use:
- Six decimals. On-chain, 1 USDC is stored as
1000000, that is 10^6 base units. OpenVPT does all money math on integers in base units, never floating point, so you won't see rounding oddities like 0.1 + 0.2 ≠ 0.3. - It is an ERC-20 token contract. Anyone can deploy a token and name it "USDC". What identifies the real one is its contract address, and a single network can host several look-alikes.
- Each network has its own USDC contract. USDC on Ethereum mainnet, on Base and on other chains all live at different addresses and are not directly interchangeable.
Why Base?
Base is an Ethereum Layer 2 network, incubated by Coinbase and built on the OP Stack. For a marketplace like OpenVPT, what counts is this:
- Fees are usually low. Base batches transactions and posts them to Ethereum, so a typical transaction costs a small fraction of what it would on Ethereum mainnet. Fees still rise when the network is busy, and your wallet always shows an estimate before you confirm.
- It is EVM-compatible. Mainstream Ethereum wallets support Base out of the box. VPTEscrow is written in Solidity, and EIP-712 signatures and ERC-20 approvals work exactly as they do on Ethereum.
- USDC is native. Circle issues USDC directly on Base, so you are not relying on a bridge-wrapped version, which removes one layer of risk.
- Easy on-ramps. Base sits in the Coinbase ecosystem, and many exchanges and wallets support deposits and withdrawals of USDC on Base.
OpenVPT's network setup:
| Environment | Network | chainId |
|---|---|---|
| Production | Base mainnet | 8453 |
| Staging | Base Sepolia testnet | 84532 |
For more technical background, see the Base documentation (opens in a new tab).
What do I need, and how much gas?
On Base, gas is paid in ETH, not USDC. A buyer's wallet therefore needs two things:
- USDC on Base covering the order amount.
- A small amount of ETH on Base for transaction fees.
The transactions a buyer sends
The order page walks you through payment, and behind the scenes there are at most two on-chain transactions:
- approve lets the escrow contract pull this order's amount from your wallet. OpenVPT asks for an allowance of exactly the order amount, never an unlimited approval, and it skips this step if your existing allowance already covers it.
- fund calls
fund()on the escrow contract and moves the USDC from your wallet into the contract. The contract also checks the platform's signature over the order, so the amount, fee, seller address and token can't have been tampered with.
After that, you don't pay gas for anything:
| Action | Gas? | Notes |
|---|---|---|
| Connect and verify wallet (SIWE) | No | You sign a text message |
| approve | Yes (buyer) | Skipped if allowance is sufficient |
| fund | Yes (buyer) | One on-chain transaction |
| Confirm receipt / sign settlement | No | EIP-712 off-chain signature |
| settle on-chain | Not for users | Submitted by the platform's relayer, which pays the gas |
| Seller payout | No | USDC arrives in the seller's wallet when the order settles |
So sellers don't need ETH to get paid, and buyers only need enough ETH for two transactions. Keep a small buffer so a busy network doesn't leave you stuck on "insufficient funds for gas".
How to double-check token and contract addresses
A common scam is a fake token called "USDC" at a different address, or a nudge to send funds to an address that merely looks right. Build the habit:
Checklist
- Your wallet is on Base (chainId 8453), not Ethereum mainnet or another chain.
- The USDC you hold matches the address Circle publishes for native USDC on Base. It is also OpenVPT's default:
Native USDC on Base mainnet: 0x833589fCD6eDa6E08f4c7C32D4f71b54bdA02913- The approve request in your wallet names the escrow contract address shown on your OpenVPT order page as the spender, for exactly the order amount.
- The fund transaction goes to that same escrow contract, not to someone's personal wallet.
- Compare full addresses, or at least the first and last six characters. Don't rely on the shortened form your wallet displays.
- Ignore any "new address" or "updated contract" sent in chat, DMs or email. OpenVPT's chat flags messages that look like off-platform contact details and warns you, precisely for situations like this.
Before handing anything to your wallet, the OpenVPT web app also re-checks the payment parameters against the order: order ID, chain ID, token, seller, amount, fee and escrow address. If any of them don't match, it refuses to continue. Still, you are the one who presses "Confirm", and what your wallet shows is what counts.
The mistakes we see most
1. Wrong network
Your USDC sits on Ethereum mainnet or another chain, but the order is on Base, so your wallet reports an insufficient balance. OpenVPT asks your wallet to switch networks before paying, but switching doesn't move your assets. You'll need to get USDC onto Base through a reputable route first.
2. Wrong token
Besides Circle's native USDC, Base also has USDbC, an older bridged version, plus assorted look-alike tokens. None of them are accepted. The escrow contract only takes allowlisted tokens, so a wrong-token payment fails, but you may still pay gas for the failed attempt.
3. Paying from an exchange
Payment must be made by your own wallet calling the escrow contract: the contract records the caller as the buyer, and any refund goes back to that address. An exchange withdrawal can only send a plain transfer. It can't call the contract for you, and it can't sign the settlement messages later. Withdraw USDC to your own wallet first (choosing the Base network), then pay from that wallet.
4. Sending USDC directly to the escrow contract
This is the most dangerous mistake. VPTEscrow only records funds that arrive through fund() as an order. The only way funds leave the contract is settle(), which needs signatures from two of the three parties (buyer, seller, platform signer) for an existing order. USDC transferred in directly belongs to no order, and the contract has no function that can send it back out. Nobody can recover it, not the platform and not the contract owner. Always pay with the button on your OpenVPT order page.
5. Waiting too long to confirm
Each set of payment parameters is valid for at most 15 minutes. If a transaction sits in your wallet too long, the contract rejects it as expired. Reload the order page to get fresh parameters. Your funds are safe, and all you lose is the gas for the failed transaction.
No chargebacks, so what protects you?
With a card payment, a buyer can file a chargeback with their bank, and money can be clawed back weeks or even months later. For digital-goods sellers, that often means the product is gone and so is the payment.
A confirmed USDC transfer can't be reversed by a third party. OpenVPT replaces chargebacks with a different set of safeguards:
- Escrow first. Once the buyer pays, the funds are locked in the contract, out of reach of both the seller and the platform.
- Inspection window. After delivery there is an inspection window (3 days by default). Delivered files are recorded with a SHA-256 hash, and license keys are stored encrypted.
- 2-of-3 signatures. Funds leave the contract only with signatures from two of three parties: buyer, seller and the platform signer. The platform can never move funds on its own. The contract owner can pause new payments, rotate the platform signer, manage the token allowlist and set the fee recipient, but cannot settle orders or withdraw funds. A pause doesn't block settlement of existing orders.
- Disputes and arbitration. Within the inspection window, the buyer can open a dispute. An assigned arbitrator reviews the evidence and rules on a split, the platform signs that split, and the buyer or the seller (usually the side receiving funds) co-signs so it can be submitted on-chain.
Protection moves from "reverse it later" to "hold it first, with clear rules". The trade-off is that a completed settlement is final, so check carefully before you pay and before you confirm receipt.
Worked example: how fees are taken
OpenVPT's default platform fee is 5% (feeBps = 500). It is charged pro rata on what the seller actually receives, and the buyer simply pays the listed price.
Example 1: a 1,200 USDC order that completes normally
| Item | Amount |
|---|---|
| Buyer pays into escrow | 1,200 USDC |
| Platform fee (5%) | 60 USDC |
| Seller receives | 1,140 USDC |
Example 2: the same order goes to dispute, and the ruling awards the seller 30%
- Seller's gross share: 1,200 × 30% = 360 USDC
- Pro-rata fee: 60 × 360 ÷ 1,200 = 18 USDC
- Seller receives: 360 − 18 = 342 USDC
- Buyer is refunded: 1,200 − 360 = 840 USDC
- Check: 342 + 840 + 18 = 1,200 USDC
Example 3: a full refund. The seller's share is 0, so the fee is 0 too, and the buyer gets all 1,200 USDC back.
Because amounts are integers in 6-decimal base units, fees are rounded down, and the contract checks that the three parts add up to exactly the escrowed amount.
Quick checklists
Buyers
- Have USDC on Base for the order and a little ETH on Base for gas.
- Connect with your own wallet, not an exchange address.
- Click "Pay into escrow" on the order page and check the network, token, spender and amount in the wallet prompt.
- Inspect the delivery within the inspection window. Confirm if it's right, or open a dispute before the window closes.
Sellers
- Complete KYC (status must be Verified) and verify your payout wallet with SIWE.
- Use a self-custodial wallet you'll control long term, and back up the recovery phrase safely.
- You don't need ETH to receive funds. You'll only need a little for gas later, if you move or swap the USDC.
Security and transparency
VPTEscrow is built on standard OpenZeppelin components (EIP-712, ECDSA, SafeERC20, ReentrancyGuard, Ownable2Step, Pausable). Contract ownership can't be renounced and can only be handed over through a two-step transfer. Before launch we plan to commission a third-party security audit of the contract and to start a bug bounty program. We'll announce both when they happen. Until then, please don't read anything here as a claim that the contract has been audited.
Disclaimer
This article describes OpenVPT's product design and general technical background. It is not investment, legal or tax advice. Holding and using digital assets carries risk, including de-pegging, issuer risk, smart-contract risk and user error. Rules on digital assets vary by jurisdiction, so make your own assessment and talk to a qualified professional where appropriate.
Next steps
- Related reading: How 2-of-3 multisig protects your money
- Related reading: Buyer's guide: safely buying source code and SaaS licenses
- See what's on offer: Listings
- Follow an order from checkout to payout: How it works
- Fee details: Pricing
- Need help? Visit the Help center or contact us