Skip to content

Repository files navigation

CrowX

Secure, Conditional, Trustless — Built on Arc

A USDC escrow protocol for Circle's Arc network. Lock USDC for a payee, release it when you agree the work is done, auto-refund if you go quiet past a deadline, or hand the call to a neutral arbiter if you can't agree.

Live app: crowx.vercel.app Contract (Arc Testnet): 0xaf233D046B9C0F629fB7EB7e3d0Ab285929b951E X: @ArcrowX · Telegram: t.me/ArcrowX · Feedback


What it does

CrowX lets two parties move USDC conditionally instead of trusting each other directly. A payer locks USDC for a payee — the funds only move when a condition is satisfied: mutual agreement, a deadline passing, or a neutral third party's decision.

How the escrow works

Each escrow has a payer, a payee, an optional arbiter, an amount, and a deadline. It moves through a fixed set of states:

Action Who What happens
createAndFund() Payer Locks USDC in the contract
release() Payer Sends funds to the payee — happy path
refundByPayee() Payee Voluntarily returns funds to payer
raiseDispute() Payer or payee Freezes escrow for the arbiter
resolveDispute() Arbiter Sends funds to whichever side they decide
reclaimAfterDeadline() Payer Reclaims funds once deadline passes — works even from Disputed state

The last row is the structural safety net: funds are never permanently stuck, even if the arbiter goes silent.

On-chain notes

Each escrow has a permanent note thread — addNote() / getNotes() — for proof-of-work, dispute evidence, or status updates. Restricted to the payer, payee, and arbiter. Permanent and public once posted — no edit, no delete.

What's been verified

  • Contract source: 261 lines, no proxy, no upgradeability, no admin key
  • 35 automated tests covering every state transition and adversarial case
  • Deployed and exercised live on Arc Testnet — visible on Arcscan
  • Frontend: single static HTML file, no backend, no database — all state read directly from the chain

Why Arc

Two of Arc's protocol-level properties are load-bearing here:

  • Sub-second deterministic finality — release, refund, and dispute resolution confirm fast enough that the contract didn't need to account for reorg risk
  • USDC-native gas — every fee (creating an escrow, posting a note, resolving a dispute) is paid in the same currency being escrowed — no separate volatile gas token needed

Cross-chain funding — Coming Soon

CrowX V2 contract (0x461935502c76CfFF3d501e408b5e477eFb3dEEFf) is already deployed on Arc Testnet with Circle Gateway integration — allowing payers to fund escrows from Ethereum, Base, and Avalanche directly. The frontend integration is in development and will be enabled once the full flow is tested end to end.

Supported source chains (testnet):

Chain Gateway Domain
Ethereum Sepolia 0
Base Sepolia 6
Avalanche Fuji 1
Arc Testnet (destination) 26

What's in this repo

contracts/ArcEscrow.sol          — V1 deployed escrow contract (single-chain)
contracts/test/MockUSDC.sol      — mock USDC for local tests
test/ArcEscrow.test.js           — 35 tests covering all paths and edge cases
script/deploy.js                 — deploys to Arc Testnet
frontend/index.html              — single-file frontend: wallet connect, escrow
                                   creation, ledger, on-chain notes
hardhat.config.js                — network config (Arc Testnet pre-wired)

Deploy it yourself

Prerequisites

Steps

# 1. Install dependencies
npm install

# 2. Configure environment
cp .env.example .env
# Fill in DEPLOYER_PRIVATE_KEY

# 3. Compile and test
npm run compile
npm test        # should show 35 passing

# 4. Deploy to Arc Testnet
npm run deploy:arc

# 5. Update frontend
# Set ESCROW_ADDRESS in frontend/index.html to your new contract address

Add Arc Testnet to MetaMask manually

Field Value
Network name Arc Testnet
RPC URL https://rpc.testnet.arc.network
Chain ID 5042002
Currency symbol USDC
Block explorer https://testnet.arcscan.app

Honest limitations

  • Testnet only, not audited. 35 tests, but "well-tested" and "audited" are different bars. Not for real funds until a proper audit happens.
  • Single arbiter only. No multi-sig dispute resolution.
  • All-or-nothing per escrow. No partial releases — use multiple escrows for milestones.
  • No notifications. Parties must check the app or watch the chain directly.
  • Notes are public forever. Permanent on-chain, not encrypted.

Stage

Live on Arc Testnet — fully built, tested, and deployed. Cross-chain funding via Circle Gateway in development. Pending professional audit before any mainnet use.


Built by @ArcrowX

About

Conditional USDC escrow on Circle's Arc network

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages