← Code LabSolidity0/50 solved · 0%
Capstone · hard

50. Capstone — Staking + Rewards

Combine everything you learned.

Build a `Staking` contract: - `stake()` payable adds ether to `mapping(address => uint256) public staked` and records `stakedAt[msg.sender] = block.timestamp`. - `pending(address u)` returns `staked[u] * (block.timestamp - stakedAt[u]) / 1e18` (toy formula). - `unstake()` follows CEI: zero out, then pay back via `call{value: amount}`. - Emit `Staked` and `Unstaked` events. This is your graduation project — the same shape as the contract in the Staking Sandbox.
Required in your answer: staked[msg.sender] += msg.valuestakedAt[msg.sender] = block.timestampemit Stakedstaked[msg.sender] = 0.call{value: amount}emit Unstaked