Every detail of the Undeads staking mechanism, from the first stake to the last claim. No surprises. No fine print.
Connect your wallet on the Stake page. Your unstaked souls appear in the left grid. Tap any soul to select it. The selection counter at the bottom shows how many you've picked. Tap Stake Selected (or Stake All) and confirm the transaction in your wallet.
When the transaction confirms, the staking contract calls setLocked
on each soul in the NFT contract. From that moment the soul is
locked inside your wallet:
balanceOf still counts it. It still shows up in your wallet's NFT list._beforeTokenTransfers.You can stake more souls at any time. Each new stake takes effect for the very next royalty deposit.
Royalty income arrives whenever a Undead sells on a marketplace that respects royalties (OpenSea and marketplaces that honor the royalty). Half of the royalty automatically flows to the staking contract; the other half goes to the creator wallet.
Your unclaimed earnings are tracked by a Synthetix-style pull model: rewards accumulate against your address as new royalties enter the pool. Nothing rebases. Nothing decays. Nothing is spent on gas on your behalf until you choose to claim.
Your share at any moment is calculated as:
(your active stake) ÷ (total active stake) × royalty deposit
Undeads in cooldown do not earn. Other souls you have staked keep earning normally.
On the Stake page, your accumulated rewards display in real time under Earned. Tap Claim to pull them to your wallet. There is no minimum, no cap, and no time gate. Claim whenever the gas math makes sense for you.
Claiming does not unstake. It just sweeps your accrued ETH and zeros the counter.
To unstake, select the staked souls you want to retrieve and hit Unstake Selected. This is the request unstake step. No soul leaves staking yet. Instead:
When the timer hits zero, the Finalize button activates. Confirm
the transaction and the staking contract calls setLocked(id, false)
on each soul. The lock lifts. Undead is fully yours again, free to transfer, list,
or re-stake.
Changed your mind? Anytime during the cooldown, hit Cancel on the cooldown card. You can cancel individual souls (tap each chip to select, then Cancel selected) or all at once.
Canceled souls go straight back to Staked and immediately resume earning. No cost beyond gas. No penalty. No restart of any timer.
This trips up a lot of people, so read it carefully.
Always unlist before you stake. Always unstake before you list.
Listings live off-chain on the marketplace. The staking lock lives on-chain in the NFT contract. They don't know about each other. Mixing them creates the problems below, none of which are theoretical.
OpenSea (and Blur, Magic Eden, every aggregator) keeps your listing visible because the signed order is still cryptographically valid. The marketplace has no idea the token is locked. Three concrete consequences:
_beforeTokenTransfers. They pay gas for
nothing and get nothing in return. Repeat enough times and marketplace
algorithms flag the collection.
Same outcome as above, in reverse. Your existing listing keeps drawing failed buy attempts and keeps anchoring the floor until you either cancel it on the marketplace or unstake. Cancellation costs gas. Unstaking takes an hour.
A staked soul cannot be sold, period. To actually sell:
In that order. Don't list before finalizing, don't relist a stale order, don't leave an old order live "just in case." Cancel anything stale first, then list fresh.
The staking contract has no recovery function. Your staked souls are tied to your wallet address. Protect your keys.
No. The contract uses msg.sender for every action. Only the
wallet that staked an soul can request, cancel, or finalize unstaking. Nobody,
including the deployer, can override this.
Royalties depend on secondary sales. If no Undead sells in a given week, no new rewards accumulate that week. Your stake doesn't lose value, you just don't earn until the next sale.
Yes, as long as the wallet holds the NFTs. A Gnosis Safe (or any contract
wallet) can call stake, requestUnstake,
claim, and the others.
No. Claim transfers exactly what's accrued at the moment of the transaction. Future royalty deposits keep accruing to you as long as your souls stay staked.
To prevent a wallet from sandwiching a large royalty deposit: stake right before, unstake right after, capture the deposit unfairly. The cooldown means anyone trying that trick stops earning during the wait, which neutralizes the attack while keeping the wait short for honest users.
Ethereum mainnet gas varies. A typical stake of 5 souls is a few cents. Claim is similar. Finalize is similar. Cancel is similar.
Each Undead sale on a royalty-respecting marketplace splits the royalty: 50% to the creator wallet, 50% to the staking contract. The staking contract distributes its half to stakers pro-rata.