Skip to content

Repository files navigation

CommitPass

Both sides commit. Trust is programmable.

Live demo

CommitPass is a two-sided programmable commitment protocol for reservations and limited-capacity services. Customers and providers lock small refundable USDC commitments on Arc. When both honour the reservation, both commitments return. If one side no-shows, the other receives pre-agreed compensation.

Built by Atakan Gündallı for the Programmable Money Hackathon.

Current MVP

  • Provider-funded reservation creation
  • Customer acceptance and commitment funding
  • Early cancellation with automatic refunds
  • Mutual attendance confirmation
  • Customer no-show claims
  • Provider no-show claims with asymmetric compensation
  • Claimant attendance enforcement before no-show claims
  • Dispute window and arbiter resolution
  • Duplicate-settlement protection
  • Arc Testnet wallet connection
  • Role-aware onchain reservation console

Why Arc

Arc is the neutral programmable settlement layer. The MVP uses Arc Testnet, Arc's ERC-20 USDC interface for commitment custody, and one-confirmation deterministic settlement. No real funds are used.

Network

Setting Value
Network Arc Testnet
Chain ID 5042002
RPC https://rpc.testnet.arc.network
Explorer https://testnet.arcscan.app
USDC interface 0x3600000000000000000000000000000000000000

Local setup

npm install
cp .env.example .env.local
npm run contracts:compile
npm run contracts:test
npm run dev

Open http://localhost:3000.

To verify the production export locally:

npm run build
npm start

The web application is exported as static files in out/, which keeps hosting simple and avoids a trusted application server in the settlement path.

Deploy to Arc Testnet

  1. Fund a dedicated testnet deployer with faucet USDC.
  2. Copy .env.example to .env.
  3. Add DEPLOYER_PRIVATE_KEY and a dedicated ARBITER_ADDRESS locally.
  4. Never commit .env.
  5. Run:
npm run deploy:arc
  1. Add the deployed address to .env.local:
NEXT_PUBLIC_COMMITPASS_CONTRACT_ADDRESS=0x...

Security boundaries

This repository is a testnet hackathon prototype and has not been independently audited. The current deployment requires claimants to confirm their own attendance before opening a no-show claim. It must not be used with real funds.

New invitations hash the session label with a random 32-byte salt before storing the reference onchain. The invitation URL carries the label and salt so the recipient can verify the reference. Existing public evidence without a salt remains readable. Session labels must not contain names, contact details or other personal information.

The arbiter is a single dedicated testnet account and remains a liveness and centralization boundary. Disputed reservations require the arbiter to resolve them. If neither participant confirms attendance, participant no-show claims are unavailable and the arbiter emergency-refund path is the recovery mechanism. A production deployment should use stronger arbiter governance and a permissionless timeout-based recovery path.

Author

Atakan Gündallı GitHub: @AtakanGs

License

MIT © 2026 Atakan Gündallı

Releases

Packages

Contributors

Languages