NFT staking lets holders lock or register their NFTs to earn rewards, usually a fungible token, points, or in-game perks. The contracts are not complicated; the hard questions are where the rewards come from and whether they will be worth anything after six months.
Two ways to stake an NFT
Custodial (escrow) staking
The holder transfers the NFT into a staking contract, which records the original owner and the timestamp. Rewards accrue until the owner withdraws, at which point the contract sends the NFT back. This is the classic design and the easiest to reason about, but it has costs: the NFT leaves the user's wallet, so it disappears from their profile, cannot be used for token-gated access elsewhere, and is exposed if the staking contract has a bug.
Non-custodial ("soft") staking
The NFT stays in the user's wallet. Either the NFT contract itself has a staking flag that blocks transfers while staked (common in collections designed with staking from day one), or rewards are calculated off-chain from ownership snapshots and distributed later. Soft staking is safer for users and better for user experience, but requires either control of the NFT contract or a trusted off-chain process.
| Question | Escrow staking | In-contract lock | Snapshot-based |
|---|---|---|---|
| Works with any existing collection | Yes | No, needs control of the NFT contract | Yes |
| NFT stays in user's wallet | No | Yes | Yes |
| Fully on-chain rewards | Yes | Yes | Usually Merkle claims, computed off-chain |
| Main risk | Contract holds all staked NFTs | Lock logic bugs block transfers | Trust in the operator's calculation |
Reward mechanics
Most staking contracts borrow the "reward per token" accumulator pattern from DeFi staking: a global counter grows with time and the emission rate, and each staker's pending reward is their weight multiplied by the counter's growth since they last claimed. It gives constant gas per action regardless of how many people are staking. Variations include:
- Rarity multipliers: rarer NFTs earn more. Store multipliers on-chain or prove them with a Merkle tree rather than trusting the frontend.
- Lock periods: higher rates for 30, 90 or 180-day locks, with or without an early-exit penalty.
- Set bonuses: extra weight for staking combinations, common in games.
- Non-token rewards: points, allowlist spots, in-game resources, or physical merchandise. These avoid creating a tradable token at all.
The underlying patterns are the same as in fungible-token staking; the DeFi staking platform guide explains the accumulator math and its edge cases.
The economics problem
During 2021 and 2022, many collections launched a reward token, let holders stake to earn it, and promised it would gain "utility" later. Most of those tokens lost nearly all their value because emissions were continuous and demand was not. Stakers sold rewards immediately, the price fell, and staking stopped being attractive.
Before you build, answer in writing:
- What can rewards be spent on, and who is buying them besides stakers?
- Is the emission schedule capped, and what happens when it ends?
- Does the reward come from real revenue (marketplace fees, game income) or only from new token issuance?
If the honest answer is "only issuance", consider non-tradable points or perks instead.
Security checklist
- Use
safeTransferFromand implementonERC721Receivedcorrectly; reject NFTs from unexpected collections. - Follow checks-effects-interactions and add reentrancy guards around withdraw and claim.
- Ensure users can always withdraw their NFTs, even if rewards run out or the contract is paused. An "emergency withdraw" that forfeits rewards is standard.
- Keep the reward token's mint authority narrowly scoped to the staking contract, with a hard cap.
- Get an independent review; the smart contract audit guide explains how to scope one.
Build steps and cost drivers
- Decide on staking model and reward type, with the economics written down.
- Write the staking contract (and reward token, if any) using audited building blocks such as OpenZeppelin.
- Build a dashboard: connect wallet, list eligible NFTs, stake, unstake, claim, show accrued rewards.
- Index staking events so the dashboard loads quickly, rather than querying every token on-chain.
- Audit, deploy to testnet with real holders, then mainnet.
As a reasoned estimate, a single-collection staking contract with a dashboard is roughly four to eight weeks for one contract engineer and one frontend engineer, plus an audit. Multi-collection support, rarity proofs, lock tiers and game integration push it higher. If you are a game studio, the staking logic often belongs inside the wider NFT gaming platform design rather than as a separate product. Projects that want NFTs to earn yield from borrowers rather than emissions should look at NFT lending instead.
What to ask a vendor
- Is the code based on audited libraries, and who audited the final version?
- Can users always withdraw their NFTs, and under what conditions can the admin pause?
- Who holds admin keys, and are they in a multisig?
- How are rarity and multipliers verified on-chain?
Frequently asked questions
Can I add staking to a collection that is already minted?
Yes, with escrow staking or snapshot-based rewards. In-wallet locking needs the NFT contract itself to support it, which an already-deployed, non-upgradeable contract usually does not.
Do staked NFTs still receive royalties or airdrops?
Royalties go to creators, not holders, so staking does not affect them. Airdrops based on wallet snapshots will miss escrow-staked NFTs unless the project counts the staking contract's records.
Which chain is best for NFT staking?
The chain where the collection already lives. Bridging NFTs just to stake them adds risk. For new projects, low-fee networks make frequent claims affordable.