Create and fund
- 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. Fund. Buyer signs two transactions:
USDT.approve(escrow, amount)andescrow.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.
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.