McNuggets
Find a drop

McNuggets / Field guide

GOOD TO KNOW. BEFORE YOU GO.

A real place. A funded drop. A reward in your wallet.

Find a location

Plan your visit

McNuggets turns a visit to a selected McDonald’s location into a chance to collect a funded token reward. Start with the live map, then go to the restaurant.

A restaurant is not automatically a drop.

The map includes a restaurant directory and separate funded campaigns. Select a location to check its address, opening window, reward terms and remaining claims. A directory pin alone does not mean a reward is available. “Near me” uses your location to find nearby places; directions open a route to the selected restaurant.

Check availability again before travelling. A campaign can expire, run out of slots or become unavailable while you are on your way. The restaurant’s own opening hours are separate from the campaign window.

Collect a drop

  1. Arrive.

    Choose an active drop and stand near its restaurant. Sign in with your linked wallet account, or connect your wallet directly. Enable precise location and complete the anti-bot check. No X account is required.

  2. Verify.

    Keep the page open during the presence check. The server checks fresh GPS samples, eligibility, cooldowns and campaign funding. In direct wallet mode, you also sign the readable request. That signature is not a token-spending approval.

  3. Collect.

    Your authorized reward is sent to the drop contract. A linked account uses the payment relay when available; direct wallet mode asks you to confirm the transaction. The reveal follows network confirmation. Inspect the transaction link to verify the actual payment.

One confirmed claim. Then a 12-hour wait.

The wallet cooldown starts at the confirmed block timestamp and applies across restaurants, devices and XP redemptions. Midnight does not reset it. A new login does not reset the wallet’s history. Browser and connection limits also apply before a transaction is sent.

If the transaction is pending

A transaction hash means the request was submitted, not that the payment succeeded. Keep the hash and check its receipt on the explorer. The site restores saved pending claims after a reload when browser storage is available. Do not start a second claim just because the first is slow.

An authorization lasts at most two minutes and never passes the campaign end or UTC day boundary. It is not a stock reservation: another confirmed transaction can take the last available slot first.

Know the rewards

The standard menu has four reward tiers. The nugget count is the name of the tier; the amount below is the token payment. A campaign with its own fixed amount or custom odds shows those terms before you claim.

Standard tierPaymentDraw weight
4 McNuggets3 USDG45%
6 McNuggets4 USDG30%
9 McNuggets5 USDG20%
20 McNuggets7 USDG5%

Reward selection happens on the server using a secret HMAC keyed to the chain, vault, wallet and next claim index. Refreshing the page or switching restaurants does not reroll a standard claim while that key stays the same. The contract verifies the signed amount, not the randomness. This is not a publicly verifiable VRF draw.

Build up XP. Choose the top tier.

Each confirmed drop adds 40 XP. On a standard campaign, redeeming 300 available XP selects the 20 McNuggets tier instead of the draw. It still uses one funded slot and respects the same 12-hour cooldown. Custom campaigns may disable XP redemption; check the displayed terms.

XP tasks and level progression
Verified actionXPFrequency
Check in at a funded active drop20Once per UTC day
Hold at least 100 FRY25Once per UTC day
Complete your first drop claim50Once per wallet
Complete two drop claims100Once per wallet

Verify a completed task in the rewards area and confirm its transaction to record XP. Daily tasks reset at 00:00 UTC. FRY eligibility is checked as a token balance, without a dollar-price oracle or minimum holding period. Purchasing FRY is not required for a normal drop claim.

Available XP is lifetime XP minus redeemed XP. Levels use lifetime XP: spending it does not lower your level. XP and progression remain attached to the wallet.

Lifetime XPLevel
0First Dip
100Nugget Rookie
300Golden Hands
650Dip Manager
1,200Box Collector
2,500Chief Nugget Officer

Sharing a result is optional. A shared link or reward card does not earn XP, payment or a better draw. Previously recorded bonuses can only apply until their existing on-chain expiry.

Open your rewards

Your account

A familiar login. Your own wallet.

Create an account with a username and password. Add an email at signup or in your account settings to use it as a login identifier. The password stays the same. X linking is not required to use the project or receive rewards.

Link once. Collect from your phone.

From a device with access to your wallet, sign the account-linking message. One account links to one wallet, and one wallet to one account; the association is permanent. You can then sign in on another device without installing that wallet there. The relay pays rewards to the associated address, never to a replacement address supplied with a claim.

The association signature does not transfer tokens or grant spending approval. It does allow authenticated account sessions to claim and redeem that wallet’s loyalty XP. Secure your password, save the recovery code shown once, and use “Sign out all devices” if needed. Password recovery uses that code; the login email is not an email reset-link service.

RouteNetwork fee
Linked accountPaid by the relay when it is enabled and funded.
Direct walletPaid by you in ETH on the configured network.

A connected account does not bypass presence checks, funding or eligibility. The current mainnet verifier also enforces its configured wallet allowlist. A funded map pin alone does not prove that your wallet is eligible; check access before making a trip.

Claim history in your account lists confirmed rewards for the linked wallet, with their date, amount and transaction link. Direct-wallet and account claims share that history. Blockchain records remain public even if a campaign is no longer shown in the public catalog.

The ground rules

The system checks both the request and the funded contract state. A failed verification does not create a simulated payment. These controls limit repeated claims; they cannot prove that every device belongs to a different person.

CheckRule
WalletOne confirmed drop claim every 12 hours, across all locations.
BrowserOne new claim authorization per 12 hours, across wallets.
ConnectionBy default, three new claim authorizations per rolling 12 hours. People sharing Wi-Fi share this limit.
PresenceAt least four GPS samples spanning 20 seconds, bound to a server-issued challenge.
GPSA reading no older than 30 seconds, with positive accuracy no worse than 80 metres. Clock lead: at most five seconds.
Distance30 metres plus reported GPS accuracy, capped at 25 metres of tolerance: 55 metres maximum.
TravelRecent accepted locations are checked for plausible travel between claims.
Anti-botA valid Turnstile result, exact request origin, session or wallet signature, and shared request quotas.

An issued authorization already counts toward browser and connection quotas, even before the transaction is submitted. Retrying the same wallet claim does not consume an additional place. Wallet cooldowns remain enforced by the contract. Every drop still needs enough allocated funds and available claims; a global payout cap is an optional server configuration, not an unlimited funding promise.

When a check fails
Location inaccurate
Allow precise location, stay near the entrance and repeat the presence check. Moving the map does not move your GPS position.
Limit reached
Wait for the displayed retry time. Switching accounts does not reset the wallet, browser or shared-connection limits.
Unavailable
Refresh the drop status. The campaign may be closed, exhausted, paused, or the verification service may be unavailable. A visible map is not confirmation that claiming is open.

Device-reported GPS can be falsified, browser cookies can be cleared, and network identifiers can change. The verifier is trusted for presence, quest proof and reward selection. A compromised verifier could issue incorrect authorizations within the contract’s limits. These protections are not a guarantee against all farming.

Under the counter

Your requestVerifierFunded contractYour wallet

The browser provides the interface and location readings. The server validates the request and signs a short-lived authorization tied to a wallet, campaign, claim index and payout. The contract checks the signer, expiry, replay protection, stock, budget, XP and cooldown before paying.

Check the deployment yourself.

Network
Robinhood Chain / 4663 / Mainnet
Public data
Reading the contract…
Observed at (UTC)
—

The snapshot refreshes through the public API every 15 seconds. It is a reading of the configured contracts, not an independent audit or a guarantee that a claim is eligible. Token balances, transaction receipts and events can be checked directly on the explorer.

Where the funding goes

Creating a campaign allocates a token budget to a specific drop. The current V3 contract requires coverage of the maximum allowed payout for each claim, including any valid existing bonus. Sending tokens to the contract alone does not create a campaign. A successful claim reduces the budget and remaining slots in the same transaction.

After expiry, the original sponsor can recover the unused allocation with refundDrop. The deployed V3 vault has a fixed verifier and relayer, with no general owner withdrawal, contract pause switch or proxy upgrade. Stopping new authorizations is a server control; it does not revoke a still-valid signature already issued. Prepared future treasury or burn mechanisms are not evidence of an active on-chain fee split.

Special campaign payments can have additional terms, including a separately funded bonus. Read the campaign’s amount and settlement details instead of assuming every payout uses the standard menu. The funding source can be inspected through public transfers; a reward payment alone does not establish that it came from token fees.

Public interface and signatures
EndpointPurpose
GET /api/dropsDrop availability, campaign terms and wallet profile when requested.
GET /api/questsQuest status and wallet progression.
POST /api/drops/claimPrepare a verified direct-wallet claim authorization.
POST /api/questsPrepare a quest authorization after proof checks.
GET /api/member/statusRead the signed-in account and linked wallet.
POST /api/member/rewardsSubmit an authorized reward through the account relay.
GET /api/member/rewardsRecover the latest saved reward transaction.

Read the JSON status as well as the HTTP code: a successful HTTP read can still report unavailable or unconfigured. Protected requests use strict bodies, origin checks, a session or wallet signature, and a single-use anti-bot result. Wallet timestamps are milliseconds; signed authorization times are seconds. Payout amounts in the signed authorization use integer token base units.

EIP-712 domain
name: Proof of Burger Drops
version: 1
chainId: 4663
verifyingContract: 0xD7dea54435C5f5EAE938baC3ddc4cF44cA03163c

DropClaim
claimant, dropId, claimIndex, item, payoutAmount,
loyalty, issuedAt, expiresAt

The signature domain is the deployed contract identifier. It must match exactly even when the website’s visual name differs. Never change or substitute it in a transaction request.

Read the public snapshot
Your data and privacy

Accounts store the username, optional email, linked public wallet, salted password hash and recovery/session hashes. Sessions use an HttpOnly cookie for up to 30 days. Changing a password, recovering an account or signing out all devices revokes other sessions. A linked external wallet’s private key is not stored by this account system.

GPS is requested for location features, not tracked in the background. A security cookie identifies the browser for 30 days. Recent accepted claim positions are retained for travel checks with cleanup after seven days. Temporary connection quotas use keyed hashes rather than raw IP addresses; IPv6 connections are grouped by /64 network.

Wallet addresses, payments, XP and claim events are public on-chain. Drop identifiers can be matched to the restaurant catalog. Disconnecting does not erase that history. The restaurant directory comes from OpenStreetMap and may be incomplete or outdated. MapLibre/OpenFreeMap, Esri satellite imagery and the OpenStreetMap fallback receive map requests; Cloudflare processes the anti-bot check.

Read the privacy notice

Quick verification

Complete the check to continue.

Loading verification…