contract StakingRewards { uint256 public immutable PID; // ip of pair XFT/ETH in Onsen IERC20 public rewardsTokenXFT; IERC20 public rewardsTokenSUSHI; IERC20 public stakingToken; IMasterChef public masterChef; PoolInfo public poolInfo; uint256 public periodFinish; uint256 public rewardRate; uint256 public rewardsDuration; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; mapping(address => UserInfo) public userInfo; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewardsXFT; mapping(address => uint256) public rewardsSUSHI; uint256 private _totalStaked; function totalStaked() external view override returns (uint256); // staked balance for specific user function balanceOf(address _account) external view override returns (uint256); // reward notified for duration function getRewardForDuration() external view override returns (uint256); // withdraw all staked tokens and get reward function exit() external override; function stake(uint256 _amount) external override nonReentrant whenNotPaused updateReward(msg.sender); function withdraw(uint256 _amount) public override nonReentrant updateReward(msg.sender); // get reward in both tokens function getReward() public override nonReentrant updateReward(msg.sender); // function lastTimeRewardApplicable() public view override returns (uint256); // reward per token in XFT function rewardPerToken() public view override returns (uint256); // reward XFT for specific user function earnedXFT(address _account) public view override returns (uint256); // reward SUSHI for specific user function earnedSushi(address _account) public view override returns (uint256); // onlyOwner // Ensure the provided reward amount is not more than the balance in the contract. // This keeps the reward rate in the right range, preventing overflows due to // very high values of rewardRate in the earned and rewardsPerToken functions; // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. function notifyRewardAmount(uint256 _reward) external onlyOwner updateReward(address(0)); // function updatePeriodFinish(uint256 _timestamp) external onlyOwner updateReward(address(0)); // Pausable // status function paused() public view virtual returns (bool); function pause() public onlyOwner; function unpause() public onlyOwner; // Ownble function owner() public view virtual returns (address); // transfere ownership to zero address function renounceOwnership() public virtual onlyOwner; function transferOwnership(address newOwner) public virtual onlyOwner; }