Staking NFTdefi

Source

STAKING NFT

  • remember to approve contract to use token
  • make erc20 & erc721 for test

learn about stake logic here

expermential code & idea. this kind of dapp can be the next hype or wave. (3rd generation of dapp`s)

  • decress reward by decressing value from 100 in line 8

Review

  • Reward per token
function rewardPerToken() public view returns (uint) {
    if (_totalSupply == 0) {
        return 0;
    }
    return
        rewardPerTokenStored +
        (((block.timestamp - lastUpdateTime) * rewardRate * 1e18) / _totalSupply);
}
  • Earned token
function earned(address account) public view returns (uint) {
    return
        ((_balances[account] *
            (rewardPerToken() - userRewardPerTokenPaid[account])) / 1e18) +
        rewards[account];
}
  • Reward token
function getReward() external updateReward(msg.sender) {
    uint reward = rewards[msg.sender];
    rewards[msg.sender] = 0;
    rewardsToken.transfer(msg.sender, reward);
}
  • Stake & Withdraw
function stake(uint _tokenId) external updateReward(msg.sender) {
    stakingToken.transferFrom(msg.sender, address(this), _tokenId);
}

function withdraw(uint _tokenId) external updateReward(msg.sender) {
    stakingToken.transferFrom(address(this), msg.sender, _tokenId);
}