Combine everything you learned.
staked[msg.sender] += msg.valuestakedAt[msg.sender] = block.timestampemit Stakedstaked[msg.sender] = 0.call{value: amount}emit Unstaked// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Staking {
mapping(address => uint256) public staked;
mapping(address => uint256) public stakedAt;
event Staked(address indexed user, uint256 amount);
event Unstaked(address indexed user, uint256 amount);
function stake() external payable { /* TODO */ }
function pending(address u) external view returns (uint256) { /* TODO */ }
function unstake() external { /* TODO CEI */ }
}