Scribblehood
Free tier and SCRIBBLE

Free tier and SCRIBBLE

The sandbox is free with a daily summon limit. Holding SCRIBBLE removes the limit and starts a points ledger called Ink, which pays out weekly on chain.

Free
everyone, no wallet
  • 15 summons a day, crafts included
  • resets at midnight UTC
  • the whole sandbox, daily, world, Own it
  • the objects on screen keep going when the quota is gone
Holder
50,000 SCRIBBLE in a signed-in wallet
  • unlimited summons
  • a holder mark on world posts
  • 10 Ink per daily challenge
  • 2 Ink per remake of a world post
  • the weekly SCRIBBLE drop for the top ten Ink balances
token not live yet: everyone is free tier
The two tiers. The holder threshold and the daily quota are read from the environment at build time; these are the values this build was made with.

Free

Everyone gets 15 summons per UTC day, counted per visitor: a random id in a one-year cookie called sh_vid, minted on the first request. Crafting counts as a summon. A shared network gets a looser cap of three times that per IP, and requests that refuse the cookie count against the IP at the normal limit, so refusing cookies buys nothing. When the day's allowance is gone, summon and craft answer 429 with a quota body, the command bar says so, and the objects already on screen keep going. Everything else stays open: the sandbox, the daily, the world, Own it.

Holders

A wallet holding 50,000 SCRIBBLE on Robinhood Chain gets unlimited summons, a holder mark on its world posts, and Ink. The threshold is SCRIBBLE_THRESHOLD in whole tokens; the token address is NEXT_PUBLIC_SCRIBBLE_TOKEN. This build has no token address, so everyone is on the free tier and signing in only records the address.

Signing in

  1. The site asks GET /api/auth/nonce for a nonce and a message: "Scribblehood wants to check your SCRIBBLE balance", the nonce, and a line saying it costs nothing.
  2. Your wallet signs the message. No transaction, no gas.
  3. POST /api/auth/verify checks the signature against the address (EIP-1271 smart accounts included), burns the nonce, and sets sh_session: an HMAC-signed cookie good for seven days.
  4. The server reads the SCRIBBLE balance on chain and caches it five minutes, so a wallet that drops under the threshold goes back to the free tier on its own.

Signing in stores the address and the cookie, nothing else. Sign out clears the cookie. Nonces expire after ten minutes, and the nonce and verify routes are rate limited to 30 and 10 a minute per IP.

Ink

finish a daily
the goal check passes in the sandbox
claim
POST /api/ink/claim, once per challenge per day
Ink board
a sorted set, never resets
weekly round
top ten, pro rata, a merkle root on chain
claim on chain
ScribbleRewards.claim with the proof
From a finished daily to SCRIBBLE in a wallet.
EventInkLimit
A daily challenge finished and claimed10once per challenge per address per UTC day
Someone remakes one of your world posts220 Ink per post per day; only when you posted it signed in as a holder

Ink is a sorted set keyed by address and it never resets. The board (GET /api/leaderboard) returns the top 20 and, when you are signed in, your own rank even when you are further down. The tiers page renders it, highlighting you.

The weekly drop

  1. The team runs scripts/publish-rewards.ts --pool N. It takes the top ten Ink balances, splits N SCRIBBLE pro rata to Ink (dust to the first entry), builds the merkle tree, and writes the round with every proof to the store.
  2. With --broadcast it checks that the contract already holds enough SCRIBBLE for every open round plus this one (it does not fund it), then calls publishRound. The team announces the amounts and the winners.
  3. You open the tiers page with your wallet connected. GET /api/rewards/proof?address= returns your leaf and proof for the latest round, or says the wallet is not in it.
  4. Claim sends ScribbleRewards.claim(round, amount, proof) from your wallet. Rounds stay open 90 days. Gas is ETH.

The claim card only appears when NEXT_PUBLIC_SCRIBBLE_REWARDS is set; otherwise it says no round has been published yet, which is also true.