Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

💸 RateMe — Rate Me or Pay Me

A financially-staked anonymous friend rating app on Starknet. Built with StarkZap for the StarkZap Blitz Hackathon.

The Problem Statement

Every anonymous rating app (NGL, Gas, Tellonym) breaks because ratings are consequence-free — raters troll or fake-nice, creators are delusional. RateMe introduces STRK stakes: honest rating is the only optimal strategy because outliers lose money.

Core loop:

  1. Pick a category (Rizz, Funny, Fashion, etc.) → self-score → stake STRK
  2. Share link → friends stake 1 STRK and rate anonymously
  3. Poll closes → gap between self-score and friend-average revealed as a meme card
  4. Gap ≥ 3? Delusional. Creator loses stake to accurate raters.

Tech Stack

  • Smart Contract: Cairo 2.8 on Starknet Sepolia
  • Wallet + Payments: StarkZap SDK (Cartridge Controller, gasless, social login)
  • Frontend: Next.js 14, TypeScript, Tailwind CSS
  • Meme Card: html2canvas for screenshot-ready result cards

StarkZap Integration

StarkZap powers three critical flows:

// 1. Social login via Cartridge Controller (no seed phrases, passkeys/Google)
const { wallet } = await sdk.onboard({
  strategy: OnboardStrategy.Cartridge,
  cartridge: { policies: [...contractPolicies] },
});

// 2. Atomic approve + create_poll (no double-click, no UX friction)
await wallet.tx()
  .approve(STRK, fromAddress(CONTRACT_ADDRESS), stakeAmount)
  .add({ contractAddress, entrypoint: 'create_poll', calldata })
  .send();

// 3. Same pattern for rater stake + submit_rating
await wallet.tx()
  .approve(STRK, fromAddress(CONTRACT_ADDRESS), Amount.parse('1', STRK))
  .add({ contractAddress, entrypoint: 'submit_rating', calldata })
  .send();

Project Structure

starknetblitz/
├── contracts/              # Cairo smart contract
│   ├── Scarb.toml
│   └── src/
│       └── rate_me.cairo   # Full staking + distribution logic
└── frontend/               # Next.js app
    ├── app/
    │   ├── page.tsx         # Landing
    │   ├── create/          # Create poll (4-step flow)
    │   ├── poll/[id]/       # Rate anonymously
    │   └── result/[id]/     # Meme card result
    ├── lib/
    │   ├── starkzap.ts      # StarkZap SDK (wallet, tx building)
    │   └── contract.ts      # On-chain reads
    └── hooks/
        └── useWallet.ts     # React wallet state

Contract Distribution Logic

Scenario Creator Accurate Raters (±1) Outlier Raters (>±1)
Gap < 3 (Based) Gets stake back Gets 1 STRK back Loses 1 STRK
Gap ≥ 3 (Delusional) Loses stake Gets 1 STRK + share of creator's stake Loses 1 STRK

Setup

1. Deploy the contract

cd contracts
scarb build
starkli deploy target/dev/rate_me_RateMe.contract_class.json \
  --network sepolia \
  --account ~/.starkli-wallets/deployer.json

2. Run the frontend

cd frontend
npm install
cp .env.local.example .env.local
# Edit .env.local with your contract address
npm run dev

Environment Variables

NEXT_PUBLIC_NETWORK=sepolia
NEXT_PUBLIC_CONTRACT_ADDRESS=0x...  # Your deployed contract
NEXT_PUBLIC_STRK_ADDRESS=0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d
NEXT_PUBLIC_RPC_URL=https://starknet-sepolia.public.blastapi.io/rpc/v0_7
NEXT_PUBLIC_APP_URL=https://your-app.vercel.app

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages