01 · The challenge
What needed solving
A collection owner wanted to reward long-term holders with a yield mechanism — stake your NFT, earn the project token — but without the "stake-and-flip" pattern where users harvest after one block. They needed a structure that paid more for holding longer, with no early exits.
02 · Our approach
How we framed the work
We started with a discovery sprint to map the user journey, business goals and real constraints. From there we wrote a fixed-scope plan: clear milestones, weekly review gates on a staging URL, and a written exit criterion for every phase. The blockchain space rewards teams that ship — not teams that plan — so we biased the engagement towards working software from week two onward.
03 · The solution
What we built
Solidity NFT staking contract (staking_v_2.sol) that takes ERC-721 deposits and emits ERC-20 rewards. Each Stake struct packs tokenId, timeOfLastUpdate, owner and a TimeFrame enum (ONE_DAY, TWO_WEEKS, FOUR_WEEKS, EIGHT_WEEKS, TWELVE_WEEKS). Lock period is chosen at stake time and enforced — calls to unstake or claim before the period elapses revert with "lock period is not completed". Reward accrual is tiered across the lifetime of the stake: 4 tokens/day in weeks 1–2, 8 in weeks 2–4, 12.5 in weeks 4–8, 20 in weeks 8–12 — calculateLockRewards walks the tier boundaries and pays the weighted sum.
04 · The results
What changed for the client.
Tiered rates make long lockups economically dominant — kills the stake-and-flip loop
Hard lock enforcement (no early unstake or claim) keeps emissions predictable for treasury planning
Five preset timeframes simplify the UX — users pick a tier, not a custom number of seconds
Tech stack
Want a similar outcome for your business? We'd love to hear about it.