// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/extension/Staking721.sol";
import "@thirdweb-dev/contracts/eip/interface/IERC20.sol";
contract MyContract is Staking721 {
// ERC20 Reward Token address. See {_mintRewards}.
address public rewardToken;
/**
* We store the contract deployer's address only for the purposes of the example
* in the code comment below.
*
* Doing this is not necessary to use the `Staking721` extension.
*/
address public deployer;
constructor(
uint256 _timeUnit,
uint256 _rewardsPerUnitTime,
address _stakingToken,
address _rewardToken
) Staking721(_stakingToken) {
_setStakingCondition(_timeUnit, _rewardsPerUnitTime);
rewardToken = _rewardToken;
deployer = msg.sender;
}
/**
* @dev Mint/Transfer ERC20 rewards to the staker. Must override.
*
* @param _staker Address for sending rewards to.
* @param _rewards Amount of tokens to be given out as reward.
*
*/
function _mintRewards(address _staker, uint256 _rewards) internal override {
IERC20(rewardToken).transfer(_staker, _rewards);
}
// Returns whether staking restrictions can be set in given execution context.
function _canSetStakeConditions() internal view override returns (bool) {
return msg.sender == deployer;
}
}