PUNCH IN v2 REAL LAUNCH

Deploy on BNB Chain

Deploy page for the REAL Punch In launch (v2). The old v1 contracts were a test and are NOT used. You sign in your OKX wallet. Muse never signs or deploys. Never paste a private key anywhere on this page.

Signer ready: the Whitelist Pass signer is the REAL new-project backend signer 0x32c0A2DFd66beE072DE6576393A1c26FE7170736, pre-filled in Step 5. The Cloudflare Worker holds the matching key and only signs wallets that finished the X tasks. Do NOT change it. The signer is immutable; a wrong signer means a new Pass must be deployed.

Locked specs (do not change)

Token$PUNCHIN, symbol PUNCHIN, supply 20,000,000 fixed. Allocation: Mint 25% (5,000,000) / Game 55% (11,000,000) / Liquidity 20% (4,000,000, stays in the owner wallet).
ChainBNB Smart Chain (56)
Whitelist PassSoulbound (SBT), 500 total, 1 per wallet, FREE mint (gas only). Agent ID required + backend signature (X tasks: Follow, Like, Repost, Comment, Post). Name "Punch In Whitelist Pass", symbol PUNCHPASS. Non-transferable. The pack mint stays LOCKED until the Pass sells out (500/500).
Pack mint1 pack = 100 $PUNCHIN. Price starts 0.0015 BNB, tiered +0.0001 per 5,000 packs, cap 0.0023 BNB (9 tiers). Max 10 packs per wallet (+1 per invite). Total 50,000 packs (paid + free). LOCKED until the Pass sells out. After sellout, open to everyone for the 10 paid packs.
Free packOnce the Pass sells out, a Pass holder claims 1 pack (100 $PUNCHIN) free, once, gas only, no signature (the Pass is soulbound, so the holder IS the task completer). The free pack does NOT count toward the 10 paid pack quota, so a Pass holder can hold 11 packs total (1 free + 10 paid). It DOES count toward the 50,000 pack budget.
Dual mintRegular Mint (open to everyone, no Agent ID) AND Agent Mint (Binance Agent ID required). Same tiered price, same pool.
Life CardERC-721, 20,000 total, 0.005 BNB each, max 20 per wallet. Agent ID required. Carries serial, job, reputation, career record. 1% fixed royalty. Phase 2 (later).
Agent ID gateBinance Agent ID registry 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F. Required for Pass mint, Agent Mint, Life Card mint. Never on transfers or trading.
Backend signerThe Pass contract holds ONE immutable signer (constructor arg). The Worker holds the matching private key and only signs wallets that finished the X tasks and hold an Agent ID. The Mint (v2) has NO signer and NO signature-based claim. REAL signer (live, Worker verified): 0x32c0A2DFd66beE072DE6576393A1c26FE7170736. Worker: https://punchin-v2-pass-signer.punchin.workers.dev.
Fund rulesPaid mint BNB ACCUMULATES in the Mint contract. Owner has FULL withdraw rights at any time. NO refunds in the contract, NO automatic liquidity pool, NO LP burn, NO timelock, NO transfer lock, NO 72 hour refund-or-burn threshold, NO pool-opening threshold. The 4,000,000 liquidity $PUNCHIN stays in the owner wallet; the owner adds LP MANUALLY on PancakeSwap when ready and holds the LP tokens. Public copy must NOT promise a liquidity pool or refunds the contract does not perform.
Two phasesPhase 1 (now): Whitelist Pass, then Pack Mint. Pass mint opens first (500 free passes). The pack mint opens AUTOMATICALLY when the Pass sells out (500/500). The owner can also close it between 48-hour Pack Open Phases (packMintOpen) and burn unsold packs with burnUnsold. Phase 2 (later, separate announcement): Life Card. Card mint + game open later. The card mint stays CLOSED at launch (cardMintActive false). There is NO free card claim in v2.
Deploy order1) PunchInToken, 2) PunchInLifeCard, 3) PunchInPass (signer pre-filled), 4) PunchInMint (token, card, pass), 5) PunchInGame (token, card), 6) PunchInMarket (card), 7) wire the card (setMinter, setGame), 8) fund the pools (5M mint + 11M game), 9) open the Pass mint. Do NOT open the card mint or the game in Phase 1.
GameJobs: Ping Watcher, Inbox Sweeper, Night Dispatcher, Node Keeper, Shift Architect. Shifts 4h, cooldown 2h. Courses ~12h per session (Health 4, Driving 8, Stall 6, Captain 8). Shops: Shift Architects only, bond 2,500 (500 burned, 2,000 deed), max 3, 7 day bond claim wait.
MarketLife Card trading. BNB only, list/cancel/buy, 0% market fee, 1% royalty via royaltyInfo. No owner, no withdraw, no rescue. A directly transferred token is unrecoverable.

Step 1 - Wallet library

Press "Load wallet library" first (needs internet for the ethers CDN).

Step 2 - Connect OKX wallet

Wallet: not connected
Chain: unknown

On connect this page AUTOMATICALLY switches your wallet to BNB Smart Chain (56). If the switch fails, switch manually in OKX before deploying.

Step 3 - Deploy PunchInToken ($PUNCHIN)

No constructor arguments. Mints the fixed 20,000,000 $PUNCHIN to the deployer (owner) in one go. No further minting is possible.

Not deployed yet.

PunchInToken: -
Constructor args for verify: none

Step 4 - Deploy PunchInLifeCard

No constructor arguments. ERC-721 Life Card, 20,000 max, 1% fixed royalty to the owner. The minter and game are set in Step 9 (one-time each).

Not deployed yet.

PunchInLifeCard: -
Constructor args for verify: none

Step 5 - Deploy PunchInPass (Whitelist Pass SBT)

One constructor argument: the backend signer address. Pre-filled with the REAL signer below. Do NOT change it. The Worker holds the matching key. The signer is immutable; a wrong signer means a new Pass must be deployed.

Signer:

This page REFUSES to deploy the Pass with the old placeholder signer 0xE86Fcb583DD22E99e2CBbbcD2c0702CA712E9303 (key discarded). The field above is pre-filled with the real signer.

Not deployed yet.

PunchInPass: -
Constructor args for verify (copy to BscScan): -

Step 6 - Deploy PunchInMint

Three constructor arguments: the token address (Step 3), the card address (Step 4), and the Pass address (Step 5). No signer in v2. The pack mint stays LOCKED until the Pass sells out (500/500). The owner can close it between 48-hour Pack Open Phases (packMintOpen).

Token: -
Card: -
Pass: -

Not deployed yet.

PunchInMint: -
Constructor args for verify (copy to BscScan): -

Step 7 - Deploy PunchInGame

Two constructor arguments: the token address and the card address (filled in automatically). The game stays CLOSED at launch (gameOpen false); it opens in Phase 2.

Not deployed yet.

PunchInGame: -
Constructor args for verify (copy to BscScan): -

Step 8 - Deploy PunchInMarket

One constructor argument: the card address (filled in automatically). No owner, no fee, no withdraw, no rescue. Live as soon as it is deployed; listings need Life Cards, which come in Phase 2.

Not deployed yet.

PunchInMarket: -
Constructor args for verify (copy to BscScan): -

Step 9 - Wire the Life Card (one-time each)

Owner only. Tells the Life Card contract that the Mint may mint cards and the Game may update career records. Each can only be set ONCE, so check the addresses before you send. Both must be done before any card can be minted or played.

Not wired yet.

Step 10 - Fund the pools

Owner only. Approves the Mint and Game to pull $PUNCHIN from your wallet, then funds the mint pool with 5,000,000 and the game pool with 11,000,000. The remaining 4,000,000 stays in your wallet as the liquidity allocation; it is never sent to a contract. You add LP manually on PancakeSwap later.

Pools not funded yet.

Step 11 - Open the Pass mint (Phase 1)

Owner only. Opens the Whitelist Pass mint (500 free passes, Agent ID + backend signature + X tasks). The pack mint opens AUTOMATICALLY when the Pass sells out (500/500); there is nothing to open for it here. Do NOT open the card mint or the game here. Those are Phase 2, later, with a separate announcement. Open the Pass mint only when the X tasks and the backend Worker are ready.

Pass mint not open yet.

Owner panel

If you closed this page after deploying, paste the contract addresses here and press Load contracts. The panel then works without redeploying.

Mint:
Token:
Card:
Pass:
Game:
Market:

Owner: -
Pass mint open: -
Passes sold: -
Pass signer: -
Pack mint open (Pass sold out): -
Packs sold: -
Free packs claimed: -
Card mint active: -
Game open: -
Mint pool: -
Game pool: -
Mint BNB balance: -

Pack phases (48 hours each): close the pack mint when a phase ends, then burn the unsold packs' $PUNCHIN and refund the buyers of that phase manually. Burn amount is in whole $PUNCHIN.


Burn unsold $PUNCHIN:
Owner panel ready. Deploy the contracts first, or load their addresses above.

Phase 2 - Life Card (LATER, separate announcement)

Do NOT do this at launch. Phase 2 is a separate phase with its own announcement. When it starts: open the card mint (0.005 BNB each, max 20 per wallet, Agent ID required), then open the game. The market is already live from Step 8. There is NO free card claim in v2.

Phase 2 not started. Card mint and game are closed.

Verify on BscScan (after deploy)

Compiler: solc 0.8.28, Optimizer: enabled, runs 200, viaIR: true, EVM version: cancun, License: MIT.
Verification method: Standard JSON Input - upload the matching file from verify/ for each contract.
PunchInToken: file PunchInToken.sol, verify JSON verify/verify-input-punchin-token.json, flattened source flattened/PunchInToken.flattened.sol, constructor args: none.
PunchInLifeCard: file PunchInLifeCard.sol, verify JSON verify/verify-input-punchin-lifecard.json, flattened source flattened/PunchInLifeCard.flattened.sol, constructor args: none.
PunchInPass: file PunchInPass.sol, verify JSON verify/verify-input-punchin-pass.json, flattened source flattened/PunchInPass.flattened.sol, constructor args: signer address 0x32c0A2DFd66beE072DE6576393A1c26FE7170736, ABI-encoded (shown as "Constructor args" after Step 5; copy that hex into BscScan's constructor-arguments field).
PunchInMint: file PunchInMint.sol, verify JSON verify/verify-input-punchin-mint.json, flattened source flattened/PunchInMint.flattened.sol, constructor args: token address, card address, pass address, ABI-encoded (shown after Step 6).
PunchInGame: file PunchInGame.sol, verify JSON verify/verify-input-punchin-game.json, flattened source flattened/PunchInGame.flattened.sol, constructor args: token address, card address, ABI-encoded (shown after Step 7).
PunchInMarket: file PunchInMarket.sol, verify JSON verify/verify-input-punchin-market.json, flattened source flattened/PunchInMarket.flattened.sol, constructor args: card address, ABI-encoded (shown after Step 8).
After verify, paste the six contract addresses into the website config (punchin.fun) so the Pass, Mint, Status, Market, and the game go live.