InSync

Trustless physical exchange- Lock payment on-chain before meeting; release in person

InSync

Created At

ETHGlobal New York 2026

Project Description

inSync makes buying and selling rom a stranger on Facebook Marketplace or Craigslist safe for both sides.inSync makes exchanging physical things with strangers on Marketplace or Craigslist actually reliable by requiring both parties to financially commit to the meetup, preventing no-shows, ghosting, fake buyers, last-minute changes, and wasted time.

No more: No-show for time wasted travelling: "Sorry, something came up." Fake buyer: "I'm definitely coming" (never shows). Last-minute price increase: "Actually, I need $50 more." Seller sells to someone else: "Someone offered me more." Meeting at wrong place/time: "Wait, I thought we were meeting tomorrow."

inSync removes the trust problem for real world physical assets. A seller lists an item (photo, price, meeting spot + time, contact, notes) and shares a link or QR. The buyer browses or opens the link and locks the full payment — item price plus a small refundable deposit — into a smart-contract escrow before anyone travels. The seller verifies on-chain that real funds are waiting, so nobody wastes a trip. The app then helps them meet: a map of the spot, a Calendly-style proposed time, two-way live-location sharing, tap-to-call, and an in-app "propose a new spot/time." At the handoff the buyer inspects the item and scans the seller's one-time QR to release payment. Settlement is instant and final — no bank, no chargebacks, no counterfeit cash. A live status timeline and a printable receipt (with on-chain proof links) close the loop.

It is dispute-free by construction. Every outcome is a deterministic on-chain rule or a mutual in-person signature — never a judge, jury, or support desk. The item price is always refundable until the buyer confirms; the deposit is only forfeited if the buyer flakes after the seller has checked in, and if the seller never shows, the buyer gets everything back. A Chainlink keeper auto-refunds any expired deal. Tech behind it:

  • Dynamic SDK (@dynamic-labs) — embedded wallets / email auth
  • Blink (@swype-org/deposit) — one-tap USDC deposit + merchant signer (ECDSA P-256)
  • Chainlink CRE — auto-reclaim keeper workflow
  • Chainlink Data Streams — signed price reports for volatile-token release
  • qrcode + html5-qrcode — in-person QR release handshake + listing-share QR
  • Google Maps embed + browser Geolocation API — meetup / live location
  • Playwright — end-to-end browser tests on live testnet
  • USDC (test MockERC20 with public mint) — settlement token + faucet

How it's Made

inSync is a TypeScript/Solidity monorepo. The core is an Escrow.sol state machine on Base Sepolia (Foundry, 76 passing tests) that holds USDC and moves it only on a buyer's in-person confirmation or a deterministic refund rule; a companion Reputation.sol can tally outcomes. The frontend is Next.js 14 (App Router) + Tailwind, talking to the chain via viem. A Fastify + SQLite (better-sqlite3) backend indexes contract events (chunked eth_getLogs backfill from the deploy block so public RPCs work) and stores off-chain meet data — photos, location, proposed time, contacts, lifecycle events — keyed by on-chain listingId/dealId.

Notable details: the in-person release is a QR handshake (qrcode + html5-qrcode) with a one-time nonce so the seller proves presence without a server; Google Maps is embedded keylessly (maps.google.com ...&output=embed) plus the browser Geolocation API for live location; a test-USDC faucet (the pay token is a public-mint MockERC20) auto-tops-up fresh wallets so funding "just works"; the whole happy path is proven by a Playwright e2e against live Base Sepolia and a 20/20 on-chain script e2e covering every cancel branch

  • Dynamic provides email-based embedded wallets, so a non-crypto user signs in with an email and gets a wallet with no seed phrase. We run connect-only mode (no extra login signature) and register Base Sepolia via the evmNetworks override.
  • Blink powers an optional one-tap USDC funding path via its hosted deposit + a server-side merchant signer endpoint (ECDSA P-256).
  • Chainlink does two jobs: a CRE keeper workflow calls reclaimExpired() to trustlessly auto-refund a buyer when a deal's window lapses; Chainlink Data Streams price-locks volatile-token payments so the seller is paid the exact USD-denominated price and surplus returns to the buyer.
background image mobile

Join the mailing list

Get the latest news and updates

InSync | ETHGlobal