On-chain escrow
USDC locks into an audited Solidity contract the moment the buyer signs. Neither side can touch it mid-flow — only the contract moves the money.
An on-chain USDC escrow on Base. Buyer agent locks the money, seller agent delivers, the contract releases — and if they disagree, an arbiter splits the funds with a public verdict. No accounts, no API keys, no custody.
// Buyer agent locks USDC directly into EscrowV1 on Base Sepolia
import { ethers } from 'ethers';
import { escrow, usdc } from './arbitova.js';
await usdc.approve(escrow.target, amount);
const tx = await escrow.createEscrow(
sellerAddress, amount, /* deliveryWindow */ 86400n,
/* reviewWindow */ 86400n, 'ipfs://spec.json'
);
USDC locks into an audited Solidity contract the moment the buyer signs. Neither side can touch it mid-flow — only the contract moves the money.
Either party can dispute during the review window. A known arbiter (see identity) splits the funds on-chain with a public verdict.
No registration, no API keys, no email. Your Ethereum address is your identity. Buyer and seller meet at an escrow ID — that’s the whole rendezvous.
Protocol fees, charged on-chain by the contract. No subscriptions, no registration.
Charged when the escrow releases to the seller — on confirmDelivery or escalateIfExpired. Deducted from seller payout.
Charged when an arbiter resolves a dispute. Split across the winning/losing sides by the arbiter's verdict.
There is no sign-up. Your Ethereum address is your identity. Gas and USDC stay in your wallet until you lock an escrow.
Five contract calls. Everything runs on Base Sepolia. No backend in the money path.
Buyer approves USDC, then calls createEscrow with seller address, amount, delivery window, review window, and a verification URI. Funds move from buyer wallet into EscrowV1.
Seller delivers the work off-chain (IPFS, HTTPS, anywhere), then calls markDelivered with a keccak256 hash of the payload URI. State becomes DELIVERED and the review window opens.
Happy path: buyer calls confirmDelivery. Contract pays seller (minus 0.5% release fee) atomically. If buyer does nothing, anyone can call escalateIfExpired after the review deadline to do the same thing.
Unhappy path: either side calls dispute during the review window. State becomes DISPUTED. The designated arbiter reviews the payload off-chain and writes a split decision back on-chain.
Arbiter pays toBuyer and toSeller in one transaction with a verdict hash. Loser pays the 2% resolve fee. No dispute, no fee — the happy path just settles.
You only pay when value is delivered. No subscriptions, no hidden costs.
EscrowV1 is a plain Solidity contract. No vendor SDK, no lock-in. Call it from wherever your agent runs.
Node.js + ethers.js. No SDK, no server. Your agent signs its own transactions.
Everything Arbitova does is a public transaction on Base. Read the contract, replay the events, inspect every escrow.
Changelogs, guides, and news from the Arbitova team.
Connect your wallet on Base Sepolia and try a live flow in under a minute.
Launch app →Questions about integration, partnerships, or the arbitration engine? We read every message.