Deals with built-in trust.

A buyer locks ETH for a seller. The seller releases on delivery, the buyer can cancel for a full refund, and a neutral arbiter settles disputes with any split β€” the platform earns a fee only on completed deals.

Dealsβ€”
Platform feeβ€”
Fees accruedβ€”
Your roleβ€”
πŸ“œ

Open a deal

Lock ETH for a seller and name a neutral arbiter. All three parties must be distinct.

Deals loading…

Loading deals…

Live Activity (recent events from the chain)

EventDetailsBlockTx
Loading…
showing the latest 15 events

How it works (a guide for visitors Β· Sepolia testnet)

🧭

How to use

This dApp is configured for the Sepolia testnet β€” switch your wallet to Sepolia and grab free test ETH from a faucet first.

  1. Connect your wallet β€” press Connect Wallet (top-right); the chain badge shows the network you are on.
  2. Open a deal β€” as the buyer, fill in the seller address, the arbiter address and a deposit in ETH, then press Open deal to lock the funds.
  3. Release on delivery β€” as the seller, deliver the work, then open the deal and press Release funds to get paid (minus the platform fee).
  4. Cancel for a refund β€” as the buyer, press Refund on an active deal to get your full deposit back, free of charge.
  5. Dispute and resolve β€” buyer or seller presses Raise dispute to freeze the deal; the arbiter then enters the buyer's share and presses Resolve.
  6. Owner controls β€” if your wallet owns the contract, use Update fee and Withdraw in the Platform Controls panel.
β›“

The process β€” what happens on-chain

Every step below is a transaction on Sepolia that changes the state of the TrustEscrow contract.

  1. TrustEscrow.openDeal() β€” the buyer's ETH moves into the TrustEscrow contract, the deal is stored as Active, and the funds stay locked there until it settles.
  2. TrustEscrow.release() β€” the seller calls this on delivery; the contract marks the deal Released, credits the platform fee (feeBps, capped at MAX_FEE_BPS) to accruedFees and sends the rest to the seller.
  3. TrustEscrow.refund() β€” the buyer cancels an active deal; the contract returns the full deposit and charges no fee.
  4. TrustEscrow.dispute() β€” buyer or seller freezes the deal into the Disputed state, so no funds can move.
  5. TrustEscrow.resolve() β€” the arbiter picks the buyer's share; the contract pays the buyer, keeps the fee and sends the remainder to the seller.
  6. Ownable & ReentrancyGuard β€” only the owner can call setFeeBps() and withdrawFees() (pull-based fees), and every payout path is guarded against reentrancy.
πŸ”„

Flow graph β€” the deal lifecycle

Funds leave the TrustEscrow contract only when a deal reaches Released, Refunded or Resolved.

deliver β†’ release() cancel β†’ refund() either party β†’ dispute() arbiter β†’ resolve() 1 Β· Open deal TrustEscrow 2 Β· Seller releases TrustEscrow 3 Β· Buyer refunds TrustEscrow 4 Β· Dispute raised TrustEscrow 5 Β· Arbiter resolves TrustEscrow Active β†’ Released Β· Refunded Β· Disputed β†’ Resolved