Orivions / Blog / Milestone payments and escrow
Milestone payments and escrow for Web3 service contracts: how to structure them
By Jakub Malarczyk, Founder, Orivions ·
- Pay per accepted milestone, not per month of activity and not all upfront.
- Every milestone needs a written acceptance criterion both sides can check.
- A modest deposit for the first milestone is fair; full prepayment is not.
- Escrow, through a neutral party or a smart contract, protects both sides when trust is still low.
- Agree in writing how disputes are handled before work starts.
Payment terms are where many Web3 engagements go wrong. Pay everything upfront and you carry all the risk; ask a provider to wait until the end and good teams will decline. Milestones split the risk fairly: the provider is paid as value is delivered, and you never have more money at stake than the next piece of work.
What makes a good milestone
- A concrete deliverable: a document, a deployed program, a working flow, a report. Not "two weeks of development".
- A written acceptance criterion: how you will check it, for example a program at a given devnet address passing listed tests.
- A review window: how many days you have to accept or raise issues, after which it is accepted by default.
- A share of the budget: proportional to the effort, so neither side is far ahead of the other at any point.
An example for a Solana dApp
A typical split for a project with a program, a frontend and an external audit:
- Milestone 1, specification (15%): written specification, account and instruction design, milestone plan. Accepted when you sign off the document.
- Milestone 2, core program (30%): program deployed to devnet, passing the listed tests including failure paths. Accepted after your review.
- Milestone 3, frontend and integrations (25%): all main user flows working on devnet against the deployed program.
- Milestone 4, audit fixes (15%): all audit findings resolved or explicitly accepted, confirmed in the fix review.
- Milestone 5, mainnet launch (15%): deployed from the audited commit with a verifiable build, authorities handed to your multisig, handover documentation delivered.
Deposits and escrow
A deposit for the first milestone, often 10 to 30 percent of it, is reasonable and protects the provider from clients who disappear. Beyond that, escrow can remove the need to trust either side: you deposit the milestone amount with a neutral party, or into a smart contract, and the funds are released when the milestone is accepted.
On-chain escrow works well for clearly defined milestones paid in stablecoins. It still needs an agreed process for disagreements: who decides, how quickly, and what evidence counts. An escrow without a dispute process only moves the argument.
When a milestone is disputed
- Go back to the criterion: most disputes are about vague acceptance criteria. Compare the deliverable with the written criterion, not with expectations.
- Separate defects from scope changes: bugs are fixed within the milestone; new requests are new scope with their own price.
- Use partial acceptance: accept and pay what works, and agree a short timeline for the rest.
- Escalate as agreed: to the escrow agent, an agreed reviewer such as the auditor, or mediation.
Clear milestones start with a clear brief; use our Solana project brief template. And before you pay anyone, run through the red flags when hiring Web3 providers.
Frequently asked questions
How should I pay a Web3 development agency?
Split the work into milestones with written acceptance criteria and pay per accepted milestone. A modest deposit for the first milestone is common; paying the full project upfront is not.
What is a milestone escrow?
An arrangement where the client deposits funds for a milestone with a neutral party or smart contract, and the funds are released to the provider when the milestone is accepted, or handled by an agreed dispute process if it is not.
What makes a good acceptance criterion?
Something both sides can check without arguing: a deployed program at a given address passing listed tests, a report delivered at a stated commit, or a feature working on devnet as described in the specification.
Hire verified Solana providers
Describe your project and get matched with verified teams. Free for clients; providers pay only on completed engagements.
Get matched →Related reading
- How to write a project brief for a Solana development team (free template)A one-page brief that gets you accurate quotes from Solana development teams: goals, scope, on-chain and off-chain parts, constraints, budget and timeline, with a copyable template.
- 15 red flags when hiring a Web3 agency, developer or auditorWarning signs to watch for when hiring Web3 service providers: unverifiable portfolios, guaranteed results, upfront payment, key custody, anonymous teams and contract tricks.
- How to verify a Web3 agency or development company in 30 minutesA practical 30-minute due-diligence routine for Web3 service providers: checking on-chain work, repositories, audit reports, references, company details and the people behind it.