Created
March 1, 2023 23:22
-
-
Save cupOJoseph/1078ff84f7e9887988eb2996a4ac460b to your computer and use it in GitHub Desktop.
contract from our solidity 102 workshop at eth denver 2023
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.8.19; | |
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; | |
contract Farm{ | |
//track time of last deposit | |
//block.timestamp | |
mapping(address user => uint timestamp) public timeOfLastDeposit; | |
//track how much deposited | |
mapping(address user => uint balance) public userBalances; | |
// create instance of ERC20 tokens | |
address public rewardTokenAddress; | |
address public lockedTokenAddress; | |
IERC20 rewardToken; | |
constructor(address _rewardTokenAddress, address _lockedTokenAddress){ | |
lockedTokenAddress = _lockedTokenAddress; | |
rewardTokenAddress = _rewardTokenAddress; | |
rewardToken = IERC20(rewardTokenAddress); | |
} | |
function deposit(uint amount) public{ | |
//take tokens from user and move to this contract | |
IERC20 lockedToken = IERC20(lockedTokenAddress); | |
lockedToken.transferFrom(msg.sender, address(this), amount); | |
//update balance of user | |
require(userBalances[msg.sender] + amount >= userBalances[msg.sender], "overflow???? how did you even do this?"); | |
userBalances[msg.sender] += amount; | |
//update timestamp of last deposit | |
timeOfLastDeposit[msg.sender] = block.timestamp; | |
} | |
function claim() public{ | |
//calculate how much you can claim | |
uint timePassed = block.timestamp - timeOfLastDeposit[msg.sender]; | |
uint reward = timePassed * userBalances[msg.sender] * 10000; | |
if(userBalances[msg.sender] > 100000){ | |
reward = reward * 2; | |
} | |
//transfer to the claimer | |
rewardToken.transferFrom(address(this), msg.sender, reward); | |
//update time of last deposit | |
timeOfLastDeposit[msg.sender] = block.timestamp; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment