How Paystream Works
Trustless payments for freelancers and clients — no middleman, no chargebacks, no waiting. Just code running on-chain.
Three steps. No surprises.
The whole lifecycle, from contract creation to local-currency payout.
Fund Escrow
The client creates a contract and deposits USDC into a Solana smart contract. Funds are locked on-chain — no one can move them until the work is complete.
The moment you fund escrow, the freelancer sees it on-chain. No chasing invoices. No wondering if you'll get paid.
- 1-second confirmation
- $0.0001 network fee
- USDC stays on Solana
Work Gets Done
The freelancer works and submits deliverables through Paystream. Clients review, request revisions, or approve. All activity is recorded on-chain.
Hourly contracts track time automatically. Milestone contracts unlock funds one milestone at a time. Fixed contracts pay on approval.
- Per-second hourly accrual
- Milestone unlocks
- Built-in messaging
Funds Release
Once the client approves, USDC is released to the freelancer's wallet instantly. If the client doesn't respond within 72 hours, funds release automatically.
No middleman to call. No ticket to raise. Just math running on Solana.
- Instant settlement
- 72h auto-release
- No chargebacks
The architecture, end to end
A web app that does no money handling. A smart contract that does no UI. Cleanly separated.
PDA escrow
Funds live in a Program Derived Address — a Solana account whose private key is mathematically nonexistent. Nobody can sign for it. Only the program code can transfer the USDC, and only via the four instructions listed below.
[b"escrow", contract.id]
Owner:
PaystreamProgram111…
The four ways funds can move
Any USDC leaving an escrow PDA goes through one of these four program instructions. Nothing else.
deposit_escrow()
Client deposits USDC. Locks the amount in a PDA owned by the contract program.
approve()
Client signs an approval transaction. Releases the agreed amount to freelancer.
execute_timeout()
After 72h with no client response, anyone can call this to release funds to freelancer.
respond_cancel()
Both parties agree to cancel. PDA splits funds per the agreed terms and closes.
Three contract modes
Pick the structure that fits your work style. All three use the same on-chain escrow program.
Hourly
For ongoing work billed by time
- Payment trigger
- Automatic, per second
- Escrow holds
- Full period budget
- Dispute window
- None — time-based
- Good for
- Ongoing retainers
- Settlement
- Withdraw any time
- Best example
- Design retainer at $25/hr × 40h
Fixed
One job, one price
- Payment trigger
- Client approval
- Escrow holds
- Full agreed amount
- Dispute window
- 72 hours after submission
- Good for
- Defined-scope projects
- Settlement
- On approval / timeout
- Best example
- Logo + brand kit for $500
Milestone
Break big projects into funded stages
- Payment trigger
- Per-milestone approval
- Escrow holds
- Each milestone amount
- Dispute window
- 72 hours per milestone
- Good for
- Long or complex projects
- Settlement
- Per-milestone release
- Best example
- App build across 4 stages
Contract lifecycle
Every contract moves through this state machine. No back-doors, no admin overrides.
Fees that don't eat your earnings
One flat 1% fee on funded amount. No hidden charges, no conversion spread, no receiving fees.
| Paystreamus | PayPal | Wise | Bank Wire | |
|---|---|---|---|---|
| Transaction fee | 1% | 3.49% + $0.49 | 0.43%–2% | $15–$45 flat |
| Receiving fee | None | None | None | Up to $20 |
| Conversion to local currency | Bring your own exchange | 3–4% spread | Mid-market | 1–3% spread |
| Settlement time | Instant | 1–3 days | 1–2 days | 3–5 days |
| Requires bank account | No | Yes | Yes | Yes |
| Non-custodial | Yes | No | No | No |
| Chargeback risk | None | 180 days | Limited | Limited |
| Country support | Global | 200+ | 80+ | Global |
72-hour auto-release
The most common freelance horror story is a client receiving work and disappearing. Paystream solves this in code.
- T+0hFreelancer submits deliverable. Submission time recorded on-chain.
- T+72hWithout client approval or rejection, anyone can call
execute_timeout(). - DONEUSDC is released to the freelancer's wallet. No tickets. No appeals.
Where does the money live?
When a client funds a contract, USDC moves from their wallet into a program-derived address (PDA) on Solana. This is a special account controlled by the smart contract code, not by Paystream.
Paystream's servers handle the user interface and notifications — but we have no signing authority over any escrow account. We cannot pause, redirect, or confiscate your funds. If we got hacked tomorrow, your escrow would be safe.
The only ways funds can leave escrow are:
- Freelancer submits → client approves → USDC released to freelancer
- 72-hour timeout: client doesn't respond → funds auto-release to freelancer
- Both parties agree to cancel → proportional refund per agreed split
- Hourly contract: funds stream continuously per second until end time
The smart contract code is open source and verifiable on Solana Explorer. Trust the code, not the company.
Built on proven infrastructure
We use boring, battle-tested tools. The interesting part is the smart contract.
Solana
Layer 1 chain
Anchor
Rust framework
USDC
Circle stablecoin
Next.js 14
Web app
Helius
RPC + indexing
Ready to get started?
Connect your Solana wallet. No sign-up form, no KYC, no waiting for approval.