Skip to content

winsznx/whisl

Repository files navigation

Whisl

Turn the whistle into settlement.

In football, the whistle is the signal everyone accepts. Whisl turns that signal into verified settlement: match events are captured locally, confirmed by the room, synced peer-to-peer, and paid out through self-custodial USD₮ wallets — no central server.

GoalDrop is the hero flow: capture a match event → local QVAC parse → room confirmation → WDK payout. Built for the Tether Developers Cup on three load-bearing tracks:

  • Pears — the serverless match room (Autobase shared log over Hyperswarm).
  • QVAC — local, on-device match-evidence parsing (Qwen3-VL-2B multimodal).
  • WDK — self-custodial USD₮ deposits, refunds, and payouts.

Shared pledge, not a bet. N depositors fund one pot under one trigger condition; payout goes to a fixed recipient or splits pro-rata among depositors. Nobody's stake pays for someone else being wrong. No opposing sides, ever. See copy rules.

Repository

Path What
contracts/ Foundry project — WhislEscrow.sol, tests, Slither gate, deploy scripts
room/ Pears room — Autobase + Hyperbee shared log, Hyperswarm transport
app/ WDK wallet + escrow integration, QVAC capture/delegation, tournament layer
docs/architecture.md Architecture + state-model diagrams
docs/build-log.md Step-by-step build log with real testnet proof
deployments.json Deployed addresses (single source of truth)

Deployed (Ethereum Sepolia, chainId 11155111)

A full createPot → deposit → confirmResolution → claim round-trip has been executed on-chain — tx hashes are in the build log.

Run it locally

Whisl is local-first: you run your own node. Requirements: Node 20.9+ and (for the contract tests) Foundry.

git clone https://github.com/winsznx/whisl && cd whisl
npm run setup          # installs contracts, room, app, and web

Point the node at your own wallet. It is self-custodial and stays on your machine:

cp web/.env.example web/.env.local
# set WHISL_WALLET_SEED to your own BIP39 seed for a Sepolia wallet

Fund that wallet on Sepolia:

Run the dashboard:

npm run dev            # http://localhost:3000

Tests:

cd contracts && forge test    # 29 escrow tests (add: slither . --filter-paths "node_modules|lib|test")
npm run test:room             # 9 room tests: conflict rules + two-peer sync
npm run test:web              # frontend logic tests

On-device AI (optional). QVAC capture uses @qvac/sdk, installed as an optional dependency; it downloads the Qwen3-VL-2B model on first use. If it is not present, capture falls back to manual entry and everything else works. The escrow and deploy scripts under app/ read a gitignored contracts/.env (SEPOLIA_RPC, DEPLOYER_PK). Never commit keys.

Copy rules

Whisl's positioning is honest because the mechanic is a shared pledge. Language must reflect that:

  • Never: bet, wager, odds, prediction market, gambling.
  • Always: pot, pledge, reward, referee-confirmed payout, tournament prize, watch-party reward.

Status

Backend/protocol stack complete (PRD build steps 1–7 and 9; fiat on-ramp out of scope; frontend not started). See docs/build-log.md for what's built, real tx hashes, SDK notes, and the design-spec inputs needed to start the frontend.

License

MIT.

About

P2P football settlement room. Capture the moment, the room confirms, USD₮ pays out. Built on Pears, QVAC, and WDK.

Topics

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors