Inspect it. Scan it. Settle it.
Daman is non-custodial escrow for in-person deals arranged through WhatsApp, Instagram, Telegram, or other messaging apps. A seller shares a deal link, the buyer locks the exact payment on Monad, and the buyer releases it only after inspecting the item at handoff.
Live app: daman-nine.vercel.app
84-second demo: Watch the public demo video
Informal marketplace deals have a trust gap: buyers do not want to pay before seeing the item, and sellers do not want to travel or hand over an item without knowing the money exists. Daman makes the agreement and funds independently verifiable without becoming another marketplace or holding user money in a company account.
- Seller creates a deal with a price, deadline, terms, and optional designated buyer.
- Seller shares the generated link in the chat where the deal started.
- Buyer locks the exact MON amount in
DamanEscrow. - Seller verifies the funded status before meeting or handing over the item.
- Buyer inspects the item and confirms the handoff from their wallet (or scans the seller's handoff QR).
- The contract transfers payment directly to the seller.
- If handoff does not happen, the seller can refund immediately or anyone can execute the buyer refund after expiry.
- Funds are never held by an admin or upgradeable proxy.
- Only the buyer can complete a funded handoff.
- A designated buyer prevents another wallet from taking a private deal.
- The exact advertised price must be funded.
- The seller can refund but cannot withdraw a funded payment.
- Expired funded deals return payment only to the buyer.
- Checks-effects-interactions and a reentrancy guard protect settlement paths.
- Completed or refunded deals cannot settle twice.
- Deal deadlines are limited to 30 days.
Daman has not received a third-party security audit. Use small amounts for the hackathon demonstration. The current product is limited to in-person handoffs and intentionally does not claim to solve shipping or subjective disputes.
- Monad Mainnet:
0x6edc1ec5b362823de96f522c3ac37403e026866b - Verified source: Full match on MonadVision
- Deployment transaction:
0x25f5c822…ad2f239 - Monad Testnet:
0x5de920b800e781c648cae2600c351892f7ba7bf2
- React, TypeScript, Vite
- Viem wallet and contract integration
- Solidity 0.8.28
- Hardhat 2, Ethers, Chai
- Monad Testnet (
10143) and Mainnet (143)
Requirements: Node.js 20+ and pnpm.
pnpm install
cp .env.example .env
pnpm test
pnpm devThe UI enters build-preview mode until VITE_DAMAN_CONTRACT_ADDRESS contains a deployed address.
Never paste a private key into source code or a VITE_ variable. Put a dedicated, low-value deployment wallet in .env:
DEPLOYER_PRIVATE_KEY=0x...
ETHERSCAN_API_KEY=...Testnet first:
pnpm contract:deploy:testnet
pnpm contract:verify:testnet -- 0xDEPLOYED_ADDRESSMainnet only after the tests and a full Testnet handoff:
pnpm contract:deploy:mainnet
pnpm contract:verify:mainnet -- 0xDEPLOYED_ADDRESSThen configure the frontend:
VITE_DAMAN_NETWORK=mainnet
VITE_DAMAN_CONTRACT_ADDRESS=0x6edc1ec5b362823de96f522c3ac37403e026866bBuild the hosted app with pnpm build and deploy dist/ or connect the repository to Vercel.
pnpm test
pnpm buildThe contract suite covers creation, designated and open buyers, exact funding, successful settlement, seller refunds, expiry refunds, cancellation safety, and double-settlement prevention.
Deal titles and terms are public blockchain data. The interface warns users not to enter phone numbers, addresses, or other private information. Daman does not run a database and does not collect user profiles.
MIT