Live · Base Sepolia

Delivery payments
that can'tbe faked.

Funds are locked on-chain until your package arrives and you confirm it with a one-time code. No trust required — just cryptographic proof.

Contract0x0000…0000
$0
Platform fee
2 hr
Dispute window
7 days
Refund guarantee
100%
Non-custodial
How it works

Four steps.
Zero trust needed.

Everything happens on-chain. Neither party can cheat — the contract enforces every rule.

Step 01
createOrder()
Buyer locks funds

Pick a seller and zone. The price is read straight from the contract — no manual input. Your payment is locked in escrow instantly.

Step 02
markDelivered()
Seller delivers

Seller delivers and generates a one-time OTP. The hash is stored on-chain. The raw OTP goes to the buyer via SMS or app notification.

Step 03
confirmDelivery()
Confirm with OTP

Enter the OTP to confirm receipt. You get 4 attempts. A 2-hour dispute window opens — raise a dispute before it closes if anything's wrong.

Step 04
releaseFunds()
Funds auto-release

After 2 hours with no dispute, anyone can trigger the release. The frontend does this automatically — no extra transaction from the seller.

OTP delivery confirmation — how it actually works
keccak256 verified
Seller side
Generates OTP off-chain

Raw code never touches the blockchain. Only its hash is stored — so the seller can't forge a “delivered” state without a real handoff.

keccak256("482917") →
0x7f3a…c91b
Buyer side
Receives raw OTP, enters it

The contract hashes your input and checks it against the stored hash. 4 failed attempts freeze the order automatically.

4 8 2 9 1 7
Order lifecycle

Every on-chain state,
explained.

Your funds move through verifiable states. You always know exactly where your money is.

💰
Funded
📦
Delivered
🔐
Completed
✅
Released
⚠️
Disputed

Raised within the 2-hour window, or triggered after 4 failed OTP attempts. The contract owner investigates and resolves on-chain. Note: this is a centralised step by design — a deliberate v1 tradeoff.

↩️
Refunded

Dispute resolved in the buyer's favour, or buyer calls claimRefund() directly after 7 days of no delivery. No support ticket needed.

For sellers

Set up in three
on-chain calls.

No dashboard, no approval process. Deploy your zones, go live, start receiving orders.

Step 1 — Set your zones
Register delivery prices per zone

Call setPrice() once per zone you deliver to, with a USDC amount. Buyers see your prices on-chain — no manual conversion needed.

setPrice("lekki", 8_000_000)   // $8.00
setPrice("vi", 10_000_000)    // $10.00
setPrice("ikeja", 14_000_000)  // $14.00
Step 2 — Go available
Toggle availability on-chain

Call setAvailability(true) when you're open for orders. Toggle off during downtime — zone prices stay intact.

setAvailability(true)   // open
setAvailability(false)  // pause
// zones stay priced while paused
1setPrice() per zone→2setAvailability(true)→3Receive orders→4Deliver → markDelivered(otpHash)→5Funds auto-release after 2 hrs
Buyer & seller protections

Built for trust.
On both sides.

The contract enforces protections for buyers and sellers. No platform sitting in the middle.

2-hour dispute window

After OTP confirmation, you have 2 full hours to raise a dispute. Funds stay locked in the contract — neither party can access them.

7-day refund guarantee

If the seller never delivers within 7 days, you call claimRefund() directly on the contract. No support ticket, no wait.

OTP-secured confirmation

Only the seller can generate the valid OTP. The hash lives on-chain. Four failed attempts auto-trigger a dispute — no brute-force possible.

On-chain dispute resolution

Disputes are resolved by the contract owner and settled in a single on-chain transaction. Verifiable by anyone.

Zone-locked pricing

Prices per zone live on-chain. The contract reads them directly when an order is placed — what you see is what's enforced.

Fully non-custodial

DispatchPay never holds your funds. The smart contract does. Money only moves when on-chain conditions are satisfied.

Zone pricing

Transparent,
on-chain prices.

Sellers register delivery prices per zone directly on the contract. All prices are in USDC — stable, no conversion needed.

Lagos delivery zones · example pricing
Priced in USDC
Lekki
$8.00
lekki
Victoria Island
$10.00
vi
Ikoyi
$9.00
ikoyi
Surulere
$12.00
surulere
Ikeja
$14.00
ikeja
Yaba
$11.00
yaba
Ajah
$13.00
ajah
Festac
$15.00
festac
FAQ

Common questions.

What if the seller never delivers?+
If the seller hasn't marked your order as delivered within 7 days, you can call claimRefund() directly on the contract for a full refund. No middleman, no support ticket — just one transaction.
What happens if I enter the wrong OTP?+
You get 4 attempts. If all 4 are exhausted, the order automatically enters Disputed state and is reviewed by the contract owner. This prevents brute-force guessing of the OTP.
Can I dispute after confirming delivery?+
Yes — you have a 2-hour window after OTP confirmation. Raise a dispute before it closes and funds are frozen for review. After 2 hours, funds release automatically to the seller.
Who handles disputes — isn't that centralised?+
Yes, dispute resolution in v1 is handled by the contract owner. This is a deliberate tradeoff — fully decentralised arbitration adds significant complexity. The resolution is still executed on-chain, meaning the outcome is publicly verifiable. A DAO or Kleros integration is a natural v2 direction.
How does a seller set their prices?+
Sellers call setPrice() on the contract per delivery zone (e.g. "lekki", "vi") with a USDC amount. They also call setAvailability(true) to open for orders. All prices are public on-chain — anyone can verify them.
Does DispatchPay take a fee?+
The v1 contract charges zero platform fee. The full escrowed amount goes to the seller on release. You only pay Base Sepolia gas, which is minimal.
Is the contract open source?+
Yes. EscrowCore is fully open source and verifiable on the Base Sepolia explorer. Every line of logic that handles your funds is public — no proprietary black boxes.

Ready to send
or receive?

Connect your wallet and place your first escrow-backed delivery order in under a minute. No signup, no KYC.