locked27,900 usdcopen3working2settlementusdc · 6decchainbasecustodycontract onlyreleaseper milestonecategories6
locked27,900 usdcopen3working2settlementusdc · 6decchainbasecustodycontract onlyreleaseper milestonecategories6
locked27,900 usdcopen3working2settlementusdc · 6decchainbasecustodycontract onlyreleaseper milestonecategories6
locked27,900 usdcopen3working2settlementusdc · 6decchainbasecustodycontract onlyreleaseper milestonecategories6

chainwork:~$escrow --status funded

The money is
alreadylocked

Freelance work where the client funds every milestone in USDC before you start, into a contract neither side controls. Each approval releases one milestone. If the client goes quiet, the timeout pays you anyway.

held by
the contract
currency
usdc on base
release unit
one milestone
escrow_latticelive
releasedlocked in escrow

Three transactions, and nobody has to trust anybody

The sequence is fixed by the contract, so the same rules apply to every job on the marketplace.

clientfunds every milestone up front
escrowholds usdc, releases per approval
freelancerwithdraws each released milestone
01createJob()

client funds the whole job

Every milestone amount moves into the escrow contract at creation. An open job here is proof of funds, not an intention.

02submitMilestone()

freelancer delivers a chunk

The deliverable is hashed on-chain and linked off-chain. Submitting starts the client's approval window.

03approveMilestone()

approval releases payment

The freelancer is credited, the fee splits to the treasury, and the money waits in a balance only they can withdraw.

Open orders

in escrow27,900usdcacross 6 jobs · sample

all jobs
sample data— no database connected, these rows are placeholders, not real listings. Run docker compose up -d and npm run db:migrate for live data.
#1042samplefunded

Subgraph + indexer for an NFT lending protocol

We need a Graph subgraph covering loan origination, repayment and liquidation events, plus a small REST layer the frontend can page through. Contracts are deployed on Base and audited; ABIs and event docs are ready.

Data & indexing

0/3 released

in escrow9,000usdc
window
3d
apps
7
#1033samplefunded

Rust indexer for Base block reorg handling

Harden an existing Rust indexer against reorgs: confirmation lag, rollback of applied blocks, and a replay test harness against a forked node.

Backend

0/2 released

in escrow7,500usdc
window
2d 12h
apps
2
#1030samplefunded

Technical writing: escrow integration guide

Write an integration guide for a milestone escrow contract: quickstart, event reference, and a worked example that a mid-level developer can follow end to end.

Writing

0/2 released

in escrow2,400usdc
window
1d 12h
apps
5

Both sides give up the same thing: the ability to cheat

freelancer terms

  • funds verified before line oneThe locked figure on a job is the contract's balance. Anyone can read it.
  • a deadline on the client's silenceAfter the approval window, claimTimeout releases the milestone to you.
  • payment you pull yourselfReleased funds sit in your balance until you withdraw. No payout schedule.

client terms

  • released in chunks, never up frontEach milestone is approved on its own. Unreleased amounts stay in escrow.
  • a dispute path with a decisionDispute before the window closes; an arbiter releases or refunds that milestone.
  • a clean exit while openCancel before assigning anyone and the contract refunds the full amount.

The questions that decide whether you trust this

Post a job, or take one that is already funded

Connect a wallet to start. Posting takes two transactions: approve the USDC, then create the job.