PSA: How to recover your staked Crash Punks (and other collections) — no team needed

The Crash Punks staking site is no longer maintained, but your NFTs are not stuck. The cp-staking contract is fully permissionless — unstaking only checks that you’re the wallet that staked, ignores whether staking is “active,” and pays back any accrued $SNOW in the same transaction.

Contract: SP14VDDN583TB43F06NFV36YRAS0QWQC75QBDFBFR.cp-staking


Step 1 — See what you have staked (free, no wallet)

  1. Open: https://explorer.hiro.so/sandbox/contract-call/SP14VDDN583TB43F06NFV36YRAS0QWQC75QBDFBFR.cp-staking/get-all-user-stakes?chain=mainnet

  2. In user, paste your own STX address (SP…)

  3. Click Call function

It returns a list of {collection, nft} entries — every collection contract and the NFT IDs you have locked. Copy these; you need the collection principal and the IDs below.


Step 2a — Unstake ONE at a time (unstake-item)

  1. Open: https://explorer.hiro.so/sandbox/contract-call/SP14VDDN583TB43F06NFV36YRAS0QWQC75QBDFBFR.cp-staking/unstake-item?chain=mainnet

  2. Connect Wallet (top right) with the wallet that staked

  3. collection: the contract principal from Step 1 — e.g. SP3QSAJQ4EA8WXEDSRRKMZZ29NH91VZ6C5X88FGZQ.crashpunks-v2

  4. staked-id: a single NFT ID — e.g. 1281

  5. Find the post-conditions toggle and switch it from Deny → Allow Mode (otherwise the NFT can’t transfer back to you and the tx fails)

  6. Click Call function and sign in your wallet

  7. Once confirmed, change staked-id to the next ID and repeat. Switch collection when you move to a different collection.


Step 2b — Unstake in BATCHES (unstake-many, up to 10 at once)

  1. Open: https://explorer.hiro.so/sandbox/contract-call/SP14VDDN583TB43F06NFV36YRAS0QWQC75QBDFBFR.cp-staking/unstake-many?chain=mainnet

  2. Connect Wallet with the staking wallet

  3. collection: the contract principal (:warning: one collection per call — don’t mix collections in the same batch)

  4. nfts: add up to 10 IDs from that collection (use the explorer’s “add item” for each uint)

  5. Toggle post-conditions Deny → Allow Mode

  6. Click Call function and sign

  7. Repeat per batch of 10, then move to the next collection.


Notes

  • Must be signed by the original staking wallet, or you’ll get ERR-NOT-OWNER (u106).

  • No admin or team needed — works even with staking switched off.

  • If a batch ever fails, isolate the bad ID with unstake-item.

Happy to help anyone who gets stuck. — Rapha / juiceofBTC :yin_yang:


:warning: Disclaimer: This is community info, not official support. Do this at your own risk — verify the contract address yourself, double-check every value before signing, and understand that you alone are responsible for any transaction you broadcast.