La librería estándar de seguridad + construye un protocolo de staking desde cero
Ownable, ReentrancyGuard, Pausable: son módulos probados en batalla que heredas con una sola línea. El protocolo de staking es el caso de uso perfecto: los usuarios depositan tokens para ganar rewards. La fórmula de distribución de Synthetix (rewardPerToken) es el estándar de la industria.
Ownable ” admin funcionesReentrancyGuard ” anti-reentryPausable ” emergency stopSafeERC20 ” transfer segurocontract StakingRewards is Ownable, ReentrancyGuard, Pausable { IERC20 public immutable stakingToken; IERC20 public immutable rewardsToken; uint256 public rewardRate; uint256 public rewardPerTokenStored; uint256 public lastUpdateTime; uint256 private _totalSupply; mapping(address => uint256) private _balances; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = block.timestamp; if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } function stake(uint256 amount) external nonReentrant whenNotPaused updateReward(msg.sender) { _totalSupply += amount; _balances[msg.sender] += amount; stakingToken.safeTransferFrom(msg.sender, address(this), amount); } function earned(address account) public view returns (uint256) { return _balances[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18 + rewards[account]; } }