// SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.18; import "./ISomaStaking.sol"; library SomaStakingLibrary { uint256 internal constant PRECISION_FACTOR = 10 ** 25; function rewardsUnlocked(ISomaStaking.Strategy memory _strategy, uint256 timestamp) internal pure returns (uint256) { uint256 locked = (timestamp >= _strategy.endDate) ? _strategy.rewardsLocked : ((timestamp - _strategy.startDate) * _strategy.rewardsLocked) / (_strategy.endDate - _strategy.startDate); return locked - _strategy.rewardsUnlocked; } function rewardsToTPS(uint256 totalStake, uint256 _rewardsUnlocked) internal pure returns (uint256 tps) { return (_rewardsUnlocked * PRECISION_FACTOR) / totalStake; } function stakeToRewards(uint256 stake, uint256 tps) internal pure returns (uint256) { return (stake * tps) / PRECISION_FACTOR; } }