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)
-
Open:
https://explorer.hiro.so/sandbox/contract-call/SP14VDDN583TB43F06NFV36YRAS0QWQC75QBDFBFR.cp-staking/get-all-user-stakes?chain=mainnet -
In
user, paste your own STX address (SP…) -
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)
-
Open:
https://explorer.hiro.so/sandbox/contract-call/SP14VDDN583TB43F06NFV36YRAS0QWQC75QBDFBFR.cp-staking/unstake-item?chain=mainnet -
Connect Wallet (top right) with the wallet that staked
-
collection: the contract principal from Step 1 — e.g.SP3QSAJQ4EA8WXEDSRRKMZZ29NH91VZ6C5X88FGZQ.crashpunks-v2 -
staked-id: a single NFT ID — e.g.1281 -
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)
-
Click Call function and sign in your wallet
-
Once confirmed, change
staked-idto the next ID and repeat. Switchcollectionwhen you move to a different collection.
Step 2b — Unstake in BATCHES (unstake-many, up to 10 at once)
-
Open:
https://explorer.hiro.so/sandbox/contract-call/SP14VDDN583TB43F06NFV36YRAS0QWQC75QBDFBFR.cp-staking/unstake-many?chain=mainnet -
Connect Wallet with the staking wallet
-
collection: the contract principal (
one collection per call — don’t mix collections in the same batch) -
nfts: add up to 10 IDs from that collection (use the explorer’s “add item” for each uint) -
Toggle post-conditions Deny → Allow Mode
-
Click Call function and sign
-
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 ![]()
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.