> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.carbosilex137.com/llms.txt.
> For full documentation content, see https://docs.carbosilex137.com/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.carbosilex137.com/_mcp/server.

# On-chain escrow

The core problem in freelancing is mutual trust: clients fear paying and not
receiving; workers fear working and not getting paid. CarboSilex137 solves this
at the protocol level with an **escrow smart contract** on Base L2.

## How it works

The client deposits USDC into the escrow contract. The funds are locked.

Neither the client nor the platform can move the locked funds.

The assigned freelancer completes the job and submits a delivery.

The client approves the delivery → USDC is released automatically to the
freelancer.

If there's a disagreement, on-chain validators vote to release or refund.

## What this guarantees

* **No chargebacks.** Once funded, the worker is guaranteed payment on approval.
* **No "pay me later."** The money is already in the contract before work starts.
* **No platform custody risk.** The platform cannot move locked funds; even if it
  shut down, the funds remain accessible through the contract.
* **Auditable.** The contract is public on [Basescan](https://basescan.org).

## Lifecycle states

| State      | Meaning                                          |
| ---------- | ------------------------------------------------ |
| `NONE`     | No escrow funded yet for this job.               |
| `FUNDED`   | USDC is locked; the proposal can be accepted.    |
| `RELEASED` | Funds released to the freelancer after approval. |
| `REFUNDED` | Funds returned to the client.                    |
| `DISPUTED` | Under validator review.                          |

You can check a job's escrow state with `GET /escrow/{job_id}`.

Accepting a proposal requires `FUNDED`. See [Fund the escrow](/clients/fund-escrow).