ETH Price: $2,804.02 (-5.08%)

Contract

0x9F7968de728aC7A6769141F63dCA03FD8b03A76F

Overview

ETH Balance

32.027911053406686476 ETH

ETH Value

$89,806.78 (@ $2,804.02/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Exit4212489902026-01-14 11:06:4611 days ago1768388806IN
0x9F7968de...D8b03A76F
0 ETH0.000001870.020016
Exit4179872332026-01-05 0:43:5720 days ago1767573837IN
0x9F7968de...D8b03A76F
0 ETH0.000000930.01
Exit4148982722025-12-27 2:18:1629 days ago1766801896IN
0x9F7968de...D8b03A76F
0 ETH0.000000930.01
Exit4131642802025-12-22 2:03:4234 days ago1766369022IN
0x9F7968de...D8b03A76F
0 ETH0.000000750.013985
Get Reward4131635682025-12-22 2:00:4434 days ago1766368844IN
0x9F7968de...D8b03A76F
0 ETH0.000000780.01
Exit4108471492025-12-15 9:20:1641 days ago1765790416IN
0x9F7968de...D8b03A76F
0 ETH0.000000930.01
Withdraw4012892432025-11-17 18:27:1369 days ago1763404033IN
0x9F7968de...D8b03A76F
0 ETH0.000003590.062136
Exit3784553712025-09-12 18:29:46135 days ago1757701786IN
0x9F7968de...D8b03A76F
0 ETH0.000000970.01
Exit3610342682025-07-24 10:01:23185 days ago1753351283IN
0x9F7968de...D8b03A76F
0 ETH0.000000940.01
Exit3593046492025-07-19 10:04:44190 days ago1752919484IN
0x9F7968de...D8b03A76F
0 ETH0.000000960.01
Withdraw3544414342025-07-05 8:12:26204 days ago1751703146IN
0x9F7968de...D8b03A76F
0 ETH0.000000580.01
Withdraw3442370882025-06-05 17:37:10234 days ago1749145030IN
0x9F7968de...D8b03A76F
0 ETH0.000001190.01
Exit3384210112025-05-19 20:11:44251 days ago1747685504IN
0x9F7968de...D8b03A76F
0 ETH0.00000080.01
Withdraw3303744702025-04-26 10:07:28274 days ago1745662048IN
0x9F7968de...D8b03A76F
0 ETH0.000000690.01
Withdraw3303744692025-04-26 10:07:28274 days ago1745662048IN
0x9F7968de...D8b03A76F
0 ETH0.000000690.01
Withdraw3303744692025-04-26 10:07:28274 days ago1745662048IN
0x9F7968de...D8b03A76F
0 ETH0.000000690.01
Withdraw3303744682025-04-26 10:07:28274 days ago1745662048IN
0x9F7968de...D8b03A76F
0 ETH0.000000690.01
Withdraw3303744682025-04-26 10:07:28274 days ago1745662048IN
0x9F7968de...D8b03A76F
0 ETH0.00000070.01
Withdraw3303744682025-04-26 10:07:28274 days ago1745662048IN
0x9F7968de...D8b03A76F
0 ETH0.00000070.01
Withdraw3303744682025-04-26 10:07:28274 days ago1745662048IN
0x9F7968de...D8b03A76F
0 ETH0.00000070.01
Withdraw3303744672025-04-26 10:07:27274 days ago1745662047IN
0x9F7968de...D8b03A76F
0 ETH0.00000070.01
Withdraw3303347712025-04-26 7:21:32274 days ago1745652092IN
0x9F7968de...D8b03A76F
0 ETH0.000000610.01
Withdraw3296451662025-04-24 7:14:27276 days ago1745478867IN
0x9F7968de...D8b03A76F
0 ETH0.000000780.01
Withdraw3112283052025-03-01 19:39:02330 days ago1740857942IN
0x9F7968de...D8b03A76F
0 ETH0.000000550.01
Exit2889964782024-12-27 2:07:01394 days ago1735265221IN
0x9F7968de...D8b03A76F
0 ETH0.000001390.01
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
4212489902026-01-14 11:06:4611 days ago1768388806
0x9F7968de...D8b03A76F
0.001 ETH
4179872332026-01-05 0:43:5720 days ago1767573837
0x9F7968de...D8b03A76F
0.01 ETH
4148982722025-12-27 2:18:1629 days ago1766801896
0x9F7968de...D8b03A76F
0.00182153 ETH
4131642802025-12-22 2:03:4234 days ago1766369022
0x9F7968de...D8b03A76F
0.02 ETH
4108471492025-12-15 9:20:1641 days ago1765790416
0x9F7968de...D8b03A76F
0.0022202 ETH
4012892432025-11-17 18:27:1369 days ago1763404033
0x9F7968de...D8b03A76F
0.14 ETH
3784553712025-09-12 18:29:46135 days ago1757701786
0x9F7968de...D8b03A76F
0.45 ETH
3610342682025-07-24 10:01:23185 days ago1753351283
0x9F7968de...D8b03A76F
0.004 ETH
3593046492025-07-19 10:04:44190 days ago1752919484
0x9F7968de...D8b03A76F
0.07699991 ETH
3544414342025-07-05 8:12:26204 days ago1751703146
0x9F7968de...D8b03A76F
1.995 ETH
3442370882025-06-05 17:37:10234 days ago1749145030
0x9F7968de...D8b03A76F
0.0143 ETH
3384210112025-05-19 20:11:44251 days ago1747685504
0x9F7968de...D8b03A76F
0.00084748 ETH
3303744702025-04-26 10:07:28274 days ago1745662048
0x9F7968de...D8b03A76F
0.001 ETH
3303744692025-04-26 10:07:28274 days ago1745662048
0x9F7968de...D8b03A76F
0.001 ETH
3303744692025-04-26 10:07:28274 days ago1745662048
0x9F7968de...D8b03A76F
0.001 ETH
3303744682025-04-26 10:07:28274 days ago1745662048
0x9F7968de...D8b03A76F
0.001 ETH
3303744682025-04-26 10:07:28274 days ago1745662048
0x9F7968de...D8b03A76F
0.001 ETH
3303744682025-04-26 10:07:28274 days ago1745662048
0x9F7968de...D8b03A76F
0.001 ETH
3303744682025-04-26 10:07:28274 days ago1745662048
0x9F7968de...D8b03A76F
0.001 ETH
3303744672025-04-26 10:07:27274 days ago1745662047
0x9F7968de...D8b03A76F
0.001 ETH
3303347712025-04-26 7:21:32274 days ago1745652092
0x9F7968de...D8b03A76F
0.001 ETH
3296451662025-04-24 7:14:27276 days ago1745478867
0x9F7968de...D8b03A76F
0.001 ETH
3112283052025-03-01 19:39:02330 days ago1740857942
0x9F7968de...D8b03A76F
0.3 ETH
2889964782024-12-27 2:07:01394 days ago1735265221
0x9F7968de...D8b03A76F
0.01 ETH
2637406322024-10-14 13:41:00468 days ago1728913260
0x9F7968de...D8b03A76F
0.005 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Minimal Proxy Contract for 0x62ff5be795262999fc1ebac29277575031d2da2c

Contract Name:
NyanRewards

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 400 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2021-09-08
*/

//SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/ownership/Ownable.sol

pragma solidity ^0.8.7;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
 
contract Ownable {
    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract StakedTokenWrapper {
    uint256 public totalSupply;

    mapping(address => uint256) private _balances;
    IERC20 public stakedToken;
    
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    string constant _transferErrorMessage = "staked token transfer failed";
    
    function stakeFor(address forWhom, uint128 amount) public payable virtual {
        IERC20 st = stakedToken;
        if(st == IERC20(address(0))) { //eth
            unchecked {
                totalSupply += msg.value;
                _balances[forWhom] += msg.value;
            }
        }
        else {
            require(msg.value == 0, "non-zero eth");
            require(amount > 0, "Cannot stake 0");
            require(st.transferFrom(msg.sender, address(this), amount), _transferErrorMessage);
            unchecked { 
                totalSupply += amount;
                _balances[forWhom] += amount;
            }
        }
        emit Staked(forWhom, amount);
    }

    function withdraw(uint128 amount) public virtual {
        require(amount <= _balances[msg.sender], "withdraw: balance is lower");
        unchecked {
            _balances[msg.sender] -= amount;
            totalSupply = totalSupply-amount;
        }
        IERC20 st = stakedToken;
        if(st == IERC20(address(0))) { //eth
            (bool success, ) = msg.sender.call{value: amount}("");
            require(success, "eth transfer failure");
        }
        else {
            require(stakedToken.transfer(msg.sender, amount), _transferErrorMessage);
        }
        emit Withdrawn(msg.sender, amount);
    }
}

contract NyanRewards is StakedTokenWrapper, Ownable {
    IERC20 public rewardToken;
    uint256 public rewardRate;
    uint64 public periodFinish;
    uint64 public lastUpdateTime;
    uint128 public rewardPerTokenStored;
    struct UserRewards {
        uint128 userRewardPerTokenPaid;
        uint128 rewards;
    }
    mapping(address => UserRewards) public userRewards;

    event RewardAdded(uint256 reward);
    event RewardPaid(address indexed user, uint256 reward);

    constructor(IERC20 _rewardToken, IERC20 _stakedToken) {
        rewardToken = _rewardToken;
        stakedToken = _stakedToken;
    }

    modifier updateReward(address account) {
        uint128 _rewardPerTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        rewardPerTokenStored = _rewardPerTokenStored;
        userRewards[account].rewards = earned(account);
        userRewards[account].userRewardPerTokenPaid = _rewardPerTokenStored;
        _;
    }

    function lastTimeRewardApplicable() public view returns (uint64) {
        uint64 blockTimestamp = uint64(block.timestamp);
        return blockTimestamp < periodFinish ? blockTimestamp : periodFinish;
    }

    function rewardPerToken() public view returns (uint128) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStored;
        }
        unchecked {
            uint256 rewardDuration = lastTimeRewardApplicable()-lastUpdateTime;
            return uint128(rewardPerTokenStored + rewardDuration*rewardRate*1e18/totalStakedSupply);
        }
    }

    function earned(address account) public view returns (uint128) {
        unchecked { 
            return uint128(balanceOf(account)*(rewardPerToken()-userRewards[account].userRewardPerTokenPaid)/1e18 + userRewards[account].rewards);
        }
    }

    function stake(uint128 amount) external payable {
        stakeFor(msg.sender, amount);
    }

    function stakeFor(address forWhom, uint128 amount) public payable override updateReward(forWhom) {
        super.stakeFor(forWhom, amount);
    }

    function withdraw(uint128 amount) public override updateReward(msg.sender) {
        super.withdraw(amount);
    }

    function exit() external {
        getReward();
        withdraw(uint128(balanceOf(msg.sender)));
    }

    function getReward() public updateReward(msg.sender) {
        uint256 reward = earned(msg.sender);
        if (reward > 0) {
            userRewards[msg.sender].rewards = 0;
            require(rewardToken.transfer(msg.sender, reward), "reward transfer failed");
            emit RewardPaid(msg.sender, reward);
        }
    }

    function setRewardParams(uint128 reward, uint64 duration) external onlyOwner {
        unchecked {
            require(reward > 0);
            rewardPerTokenStored = rewardPerToken();
            uint64 blockTimestamp = uint64(block.timestamp);
            uint256 maxRewardSupply = rewardToken.balanceOf(address(this));
            if(rewardToken == stakedToken)
                maxRewardSupply -= totalSupply;
            uint256 leftover = 0;
            if (blockTimestamp >= periodFinish) {
                rewardRate = reward/duration;
            } else {
                uint256 remaining = periodFinish-blockTimestamp;
                leftover = remaining*rewardRate;
                rewardRate = (reward+leftover)/duration;
            }
            require(reward+leftover <= maxRewardSupply, "not enough tokens");
            lastUpdateTime = blockTimestamp;
            periodFinish = blockTimestamp+duration;
            emit RewardAdded(reward);
        }
    }

    function withdrawReward() external onlyOwner {
        uint256 rewardSupply = rewardToken.balanceOf(address(this));
        //ensure funds staked by users can't be transferred out
        if(rewardToken == stakedToken)
                rewardSupply -= totalSupply;
        require(rewardToken.transfer(msg.sender, rewardSupply));
        rewardRate = 0;
        periodFinish = uint64(block.timestamp);
    }
}

/*
   ____            __   __        __   _
  / __/__ __ ___  / /_ / /  ___  / /_ (_)__ __
 _\ \ / // // _ \/ __// _ \/ -_)/ __// / \ \ /
/___/ \_, //_//_/\__//_//_/\__/ \__//_/ /_\_\
     /___/

* Synthetix: YFIRewards.sol
*
* Docs: https://docs.synthetix.io/
*
*
* MIT License
* ===========
*
* Copyright (c) 2020 Synthetix
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/

Contract ABI

API
[{"inputs":[{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"contract IERC20","name":"_stakedToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"reward","type":"uint128"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"setRewardParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"amount","type":"uint128"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"forWhom","type":"address"},{"internalType":"uint128","name":"amount","type":"uint128"}],"name":"stakeFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"stakedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewards","outputs":[{"internalType":"uint128","name":"userRewardPerTokenPaid","type":"uint128"},{"internalType":"uint128","name":"rewards","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"amount","type":"uint128"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawReward","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.