Skip to content

v1.2.0 β€” Daily & Weekly Missions

Choose a tag to compare

@Berny-art Berny-art released this 30 Jul 14:29
· 6 commits to main since this release

v1.2.0 β€” Daily & Weekly Missions

Second post-GA content release. DealersMissions is live on Abstract mainnet β€” a daily/weekly objective board scored entirely by observing the counters the game modules already keep, so no existing contract changed.

🎯 Missions (DealersMissions)

  • Snapshot-delta scoring (the BankHeist observation pattern): checkIn snapshots a full-metric baseline for the current daily and weekly epoch, the dealer plays normally, then claim re-reads the live counters and pays the difference. PVE / PVP / Heists / Core are read-only β€” no game module was modified or called back.
  • 12 metrics β€” PVE games/wins, PVP attack/defend wins and games, heist runs/stages/cash-outs, reputation and infamy gain, ANY_GAMES (the three attempt-spending actions summed, so heist- and PVP-leaning players aren't taxed), and MISSIONS_CLAIMED for capstones.
  • Rewards through Core β€” any mix of reputation, infamy, $CASH and loot drugs, paid over the existing authorization path.
  • Epochs advance themselves β€” daily = 00:00 UTC, weekly = unix-anchored (rolls Thursday 00:00 UTC). No admin tx ever advances a board, and the active set derives deterministically per epoch from the template pool (partial Fisher-Yates over the enabled templates), so every player grinds the same missions.
  • The boundary is a hard deadline β€” a met-but-unclaimed mission dies at the roll. Progress is measured against live counters, so honouring a stale epoch would let one play score twice.
  • Guardrails β€” daily action targets capped to the 5 free attempts (maxDailyTarget); one capstone per cadence with its target strictly below that board's size, enforced on add and on resize; pool bounded at 64 templates; mid-epoch template edits are safe because baselines snapshot every metric and claims are keyed by template id, so a shifted board can never double-pay.
  • One-call board β€” getMissionStatus(tokenId) returns every active daily + weekly with live progress, check-in state and claimability. MissionClaimed / MissionsCleared carry the full payout for indexers.
  • Mainnet: 0xaf461430D2e2cCd89CFE3Ee335F77a8BF3031F5b Β· Testnet: 0xDb6e3f433E9eA73FB60C2B9C3b1A24A7Fe66F8Bb

πŸ—‚ Launch board (pinned β€” SetupMissions)

Enabled templates exactly equal the active counts, so the board is pinned rather than rotating; only progress resets on the epoch boundary.

  • Daily (1) β€” ANY_GAMES 3 β†’ 10 rep + 1 Goods. Deliberately slack at 3 of the 5 free attempts, leaving room for a wanted poster or a jail stint.
  • Weekly (5) β€” PVE games 25, PVE wins 5, heist stages 5, PVP attack wins 3, plus the capstone that pays 1 Jewel once the other four are claimed. Sized as the wall: ~35 attempts against the ~35 a free week provides.

πŸ›  Ops

  • DeployMissions β€” deploys, authorizes on Core, ships paused with an empty pool; mainnet gated behind CONFIRM=DealersMissions.
  • SetupMissions β€” idempotent template seeder (skips when the pool is non-empty); retune live with setTemplate, no redeploy needed.
  • Wiring.s.sol gains _syncMissionsRefs, so every neighbouring redeploy re-points Missions, and SetupWiring covers it in the full-graph drift check.
  • verify-source.sh gains a missions target.
  • New /dealer-compare skill β€” rank wallets side by side on lifetime spend, activity and XP-eligible events.

βœ… Testing

74 mission tests (68 unit + 6 integration flows). Full suite: 640 passing, 0 failing β€” forge test --zksync --skip "RendererSVG" --skip "UploadTraits".

Deploying

Build and deploy from this tag so on-chain bytecode maps to source. Game contracts: forge build --zksync --skip "RendererSVG" --skip "UploadTraits". See script/DEPLOY.md.

Full changelog: v1.1.0...v1.2.0