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
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.
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.
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.
- 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
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
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 |
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)
- Node.js 18+
- MetaMask with Arc Testnet added
- Testnet USDC from faucet.circle.com
# 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| 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 |
- 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.
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