How it works

Every deal lives in its own smart contract. We never hold your funds. The on-chain state machine has four terminal states (Released, Refunded, Resolved, Expired) plus the working states (None, Funded, Disputed).

Create and fund

  1. 1. Create. Buyer signs in, links their Tron wallet, and creates a deal: counterparty address, amount, inspection period (3–30 days), description. The backend stores the deal record and returns the arguments for a single on-chain call: factory.createEscrow. Buyer signs that → a new escrow clone is deployed (about 30 TRX of energy).
  2. 2. Fund. Buyer signs two transactions: USDT.approve(escrow, amount) and escrow.fund(). The USDT moves from buyer to escrow. The inspection timer starts. The seller is emailed (if they provided an address).

How a funded deal ends

  • Happy path: buyer releases. Seller delivers (off-chain). Buyer clicks Approve Release. Contract transfers amount − 1% fee to seller, 1% to fee recipient. Status: Released.
  • Seller refunds. If the seller can't deliver, they click Refund Buyer. Contract returns the full amount to the buyer (no fee). Status: Refunded.
  • Inspection elapses without action. If the inspection period ends and the buyer hasn't released OR disputed, the seller can click Claim After Inspection. Same payout as Released. Status: Claimed by seller.

If something goes wrong

Dispute. Either party can dispute BEFORE the inspection ends. Both parties write up their case in the app; the on-chain contract is just frozen at Disputed.

Arbitration → 24h appeal window

The operator reviews and publishes a decision: who gets paid, and how much. This kicks off a 24-hour window during which:

  • Either party can click Accept Decision. If both accept, the on-chain release fires immediately.
  • Either party can Appeal the decision (max 2 appeals per dispute). Operator reviews and either corrects the decision (new payee/amount) or confirms it. In both cases a fresh 24h window starts.
  • If the window expires with no appeal, the on-chain release fires automatically.

The on-chain call is escrow.resolve(payee, toPayee) signed by the operator/arbitrator key. The fee is deducted from the payee's portion; the remainder (if any) goes to the other party with no fee.

Status after execution: Resolved.

What we don't control. Once a deal is funded, the smart contract owns the USDT. We can't move it. Even the arbitrator can only call resolve() after a dispute is open — the call is gated by the contract's state machine.
Tether freezes: Tether (the issuer of USDT-TRC20) can freeze any address at any time, including escrow contracts. This is outside our control. Read the Terms of Service for the risk allocation.

Ready to try it?

Create an account with your email, connect a Tron wallet and set up your first escrow deal in a few minutes.

Get started