ETH Price: $3,267.28 (-0.57%)

Contract

0x8650714D080905FC457C73e6Af8A492Be86A600c
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake216500282025-01-18 7:58:5923 hrs ago1737187139IN
0x8650714D...Be86A600c
0 ETH0.000645988.82133026
Unstake216466302025-01-17 20:33:5935 hrs ago1737146039IN
0x8650714D...Be86A600c
0 ETH0.0008136814.49342558
Unstake216440642025-01-17 11:58:2343 hrs ago1737115103IN
0x8650714D...Be86A600c
0 ETH0.00041737.4330082
Unstake216278002025-01-15 5:28:474 days ago1736918927IN
0x8650714D...Be86A600c
0 ETH0.00025543.48717345
Unstake216140202025-01-13 7:17:236 days ago1736752643IN
0x8650714D...Be86A600c
0 ETH0.000223623.0532736
Unstake216138742025-01-13 6:48:116 days ago1736750891IN
0x8650714D...Be86A600c
0 ETH0.00028263.85910167
Unstake216052242025-01-12 1:48:477 days ago1736646527IN
0x8650714D...Be86A600c
0 ETH0.000170392.32644114
Unstake216027192025-01-11 17:25:357 days ago1736616335IN
0x8650714D...Be86A600c
0 ETH0.000313914.28674712
Unstake215935562025-01-10 10:43:478 days ago1736505827IN
0x8650714D...Be86A600c
0 ETH0.000350096.23728924
Unstake215897012025-01-09 21:47:239 days ago1736459243IN
0x8650714D...Be86A600c
0 ETH0.000371016.72810034
Unstake215870292025-01-09 12:49:599 days ago1736426999IN
0x8650714D...Be86A600c
0 ETH0.000331665.90758419
Unstake215774292025-01-08 4:40:5911 days ago1736311259IN
0x8650714D...Be86A600c
0 ETH0.000286115.09741832
Unstake215760582025-01-08 0:04:3511 days ago1736294675IN
0x8650714D...Be86A600c
0 ETH0.000566727.73775741
Unstake215713672025-01-07 8:21:3511 days ago1736238095IN
0x8650714D...Be86A600c
0 ETH0.000330735.89105643
Unstake215685822025-01-06 23:03:2312 days ago1736204603IN
0x8650714D...Be86A600c
0 ETH0.0007082211.62126074
Unstake215670942025-01-06 18:04:4712 days ago1736186687IN
0x8650714D...Be86A600c
0 ETH0.0021125128.84294435
Unstake215651122025-01-06 11:25:5912 days ago1736162759IN
0x8650714D...Be86A600c
0 ETH0.000439417.82853683
Unstake215600802025-01-05 18:30:3513 days ago1736101835IN
0x8650714D...Be86A600c
0 ETH0.000453018.07079312
Unstake215438702025-01-03 12:10:5915 days ago1735906259IN
0x8650714D...Be86A600c
0 ETH0.0005932910.56780076
Unstake215409612025-01-03 2:26:3516 days ago1735871195IN
0x8650714D...Be86A600c
0 ETH0.000506079.01221388
Unstake215384172025-01-02 17:55:3516 days ago1735840535IN
0x8650714D...Be86A600c
0 ETH0.0008028112.75723995
Unstake215330972025-01-02 0:07:4717 days ago1735776467IN
0x8650714D...Be86A600c
0 ETH0.0021099128.80751332
Unstake215314702025-01-01 18:40:5917 days ago1735756859IN
0x8650714D...Be86A600c
0 ETH0.0022312230.46376596
Unstake215207472024-12-31 6:44:4719 days ago1735627487IN
0x8650714D...Be86A600c
0 ETH0.0009293812.68920596
Unstake215164662024-12-30 16:24:2319 days ago1735575863IN
0x8650714D...Be86A600c
0 ETH0.000478998.53366294
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Staking

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion
File 1 of 4 : Staking.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";

contract Staking is Ownable {
    // maximum upper limit of the cooldown period
    uint256 public constant COOLDOWN_UPPER_LIMIT = 365 days;

    // token used for staking
    IERC20Upgradeable public immutable token;

    // amounts staked, address to value staked mapping
    mapping(address => uint256) public staked;

    // timestamps timers until which the penalty is applied, 0 means it is cleared
    mapping(address => uint256) public timers;

    // amounts set for the cooldown period
    mapping(address => uint256) public amounts;

    // snapshotted penalties, address to penalty mapping
    mapping(address => uint16) public penalties;

    // cooldown period
    uint256 public cooldown = 14 days;

    // penalty for unstaking, divided by 100 to get the total percentages
    uint16 public penalty = 1000;

    // wallet to which the tokens go for penalties
    address public treasury;

    error CooldownOverflow();
    error NotEnoughBalance();
    error NotEnoughStakedBalance();
    error PenaltyOverflow();
    error UnstakingDifferentAmount();
    error ZeroAmount();
    error ZeroAddress();

    event Staked(address indexed account, uint256 amount);
    event Unstaked(address indexed account, uint256 amount);
    event CooldownChanged(uint256 newCooldown);
    event PenaltyChanged(uint16 newPenalty);
    event SetCooldownTimer(address indexed account, uint256 amount);
    event TreasuryChanged(address newTreasury);

    /**
     * @param token_ staking token address
     * @param treasury_ address for the treasury wallet
     */
    constructor(IERC20Upgradeable token_, address treasury_) {
        if (address(token_) == address(0) || address(treasury_) == address(0)) {
            revert ZeroAddress();
        }
        token = token_;
        treasury = treasury_;
    }

    /**
     * @notice Allows any wallet to stake available tokens.
     *         The penalty for unstaking is updated to the current global one when a wallet stakes more tokens.
     * @param amount amount of tokens to stake
     */
    function stake(uint256 amount) external {
        if (amount == 0) {
            revert ZeroAmount();
        }
        if (amount > token.balanceOf(msg.sender)) {
            revert NotEnoughBalance();
        }
        staked[msg.sender] += amount;
        penalties[msg.sender] = penalty;
        require(token.transferFrom(msg.sender, address(this), amount), "transfer failed");
        emit Staked(msg.sender, amount);
    }

    /**
     * @notice Allows any wallet to unstake staked tokens.
     *         There is a penalty for unstaking the tokens during or without the cooldown period.
     *         The cooldown period is set via setCooldownTimer(amount) method.
     * @param amount amount of tokens to unstake
     */
    function unstake(uint256 amount) external {
        if (amount == 0) {
            revert ZeroAmount();
        }
        if (amount > staked[msg.sender]) {
            revert NotEnoughStakedBalance();
        }
        if (amount != amounts[msg.sender] && amounts[msg.sender] != 0) {
            revert UnstakingDifferentAmount();
        }
        uint256 penaltyAmount = calculatePenalty(amount);
        staked[msg.sender] -= amount;
        setCooldownTimer(0);
        if (penaltyAmount > 0) {
            require(token.transfer(treasury, penaltyAmount), "penalty transfer failed");
        }
        if (amount != penaltyAmount) {
            require(token.transfer(msg.sender, amount - penaltyAmount), "transfer failed");
        }
        emit Unstaked(msg.sender, amount);
    }

    /**
     * @notice Sets the cooldown timer for passed amount.
     * @param amount amount of set for the cooldown period
     */
    function setCooldownTimer(uint256 amount) public {
        if (amount > staked[msg.sender]) {
            revert NotEnoughStakedBalance();
        }
        timers[msg.sender] = amount == 0 ? 0 : block.timestamp + cooldown;
        amounts[msg.sender] = amount;
        penalties[msg.sender] = amount == 0 ? 0 : penalty;
        emit SetCooldownTimer(msg.sender, amount);
    }

    /**
     * @notice Allows the owner to set the cooldown period (maximum of 365 days).
     * @param newCooldown new cooldown period
     */
    function setCooldown(uint256 newCooldown) external onlyOwner {
        if (newCooldown > COOLDOWN_UPPER_LIMIT) {
            revert CooldownOverflow();
        }
        cooldown = newCooldown;
        emit CooldownChanged(newCooldown);
    }

    /**
     * @notice Allows the owner to set the penalty (maximum of 10000 = 100%).
     * @param newPenalty new penalty
     */
    function setPenalty(uint16 newPenalty) external onlyOwner {
        if (newPenalty > 10000) {
            revert PenaltyOverflow();
        }
        penalty = newPenalty;
        emit PenaltyChanged(newPenalty);
    }

    /**
     * @notice Allows the owner to set the treasury address.
     * @param newTreasury new treasury address
     */
    function setTreasury(address newTreasury) external onlyOwner {
        if (newTreasury == address(0)) {
            revert ZeroAddress();
        }
        treasury = newTreasury;
        emit TreasuryChanged(newTreasury);
    }

    /**
     * @notice Calculates a penalty based on the given sender and amount.
     *         Can be used to return the penalty amount without actually unstaking.
     * @param amount amount on which the penalty is calculated
     * @return amount amount of penalty
     */
    function calculatePenalty(uint256 amount) public view returns (uint256) {
        if (amounts[msg.sender] == 0) {
            return (amount * penalty / 100) / 100;
        } else if (timers[msg.sender] > block.timestamp) {
            return (amount * penalties[msg.sender] / 100) / 100;
        } else {
            return 0;
        }
    }
}

File 2 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * 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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "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 virtual onlyOwner {
        _transferOwnership(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 virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 4 : IERC20Upgradeable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 4 of 4 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "bytecodeHash": "none"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token_","type":"address"},{"internalType":"address","name":"treasury_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CooldownOverflow","type":"error"},{"inputs":[],"name":"NotEnoughBalance","type":"error"},{"inputs":[],"name":"NotEnoughStakedBalance","type":"error"},{"inputs":[],"name":"PenaltyOverflow","type":"error"},{"inputs":[],"name":"UnstakingDifferentAmount","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"CooldownChanged","type":"event"},{"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":"uint16","name":"newPenalty","type":"uint16"}],"name":"PenaltyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetCooldownTimer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"COOLDOWN_UPPER_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculatePenalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"penalties","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"penalty","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setCooldownTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newPenalty","type":"uint16"}],"name":"setPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"staked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20Upgradeable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a0604052621275006005556006805461ffff19166103e817905534801561002657600080fd5b50604051620012863803806200128683398101604081905261004791610124565b610050336100bc565b6001600160a01b038216158061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b039182166080526006805491909216620100000262010000600160b01b031990911617905561015e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461012157600080fd5b50565b6000806040838503121561013757600080fd5b82516101428161010c565b60208401519092506101538161010c565b809150509250929050565b6080516110f06200019660003960008181610332015281816104d6015281816105cc01528181610a6f0152610bca01526110f06000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80638968c0af116100cd578063a694fc3a11610081578063f2fde38b11610066578063f2fde38b146102fa578063f3eba1121461030d578063fc0c546a1461032d57600080fd5b8063a694fc3a146102d4578063f0f44260146102e757600080fd5b80638da5cb5b116100b25780638da5cb5b1461028357806396c62d70146102a157806398807d84146102b457600080fd5b80638968c0af146102655780638bafab4b1461027057600080fd5b80634fc3f41a1161012457806361d027b31161010957806361d027b314610209578063715018a614610254578063787a08a61461025c57600080fd5b80634fc3f41a146101d657806355a3b2c1146101e957600080fd5b80630edd2ffc146101565780632e17de781461017c57806331e8d9a6146101915780634ecce451146101b5575b600080fd5b6006546101649061ffff1681565b60405161ffff90911681526020015b60405180910390f35b61018f61018a366004610f61565b610354565b005b61016461019f366004610f7a565b60046020526000908152604090205461ffff1681565b6101c86101c3366004610f61565b61072f565b604051908152602001610173565b61018f6101e4366004610f61565b6107b7565b6101c86101f7366004610f7a565b60036020526000908152604090205481565b60065461022f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b61018f610839565b6101c860055481565b6101c86301e1338081565b61018f61027e366004610f61565b61084d565b60005473ffffffffffffffffffffffffffffffffffffffff1661022f565b61018f6102af366004610fb7565b61095e565b6101c86102c2366004610f7a565b60016020526000908152604090205481565b61018f6102e2366004610f61565b610a07565b61018f6102f5366004610f7a565b610ce4565b61018f610308366004610f7a565b610db4565b6101c861031b366004610f7a565b60026020526000908152604090205481565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b8060000361038e576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600160205260409020548111156103d7576040517f4c6ca7e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260036020526040902054811480159061040457503360009081526003602052604090205415155b1561043b576040517fae2772b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006104468261072f565b3360009081526001602052604081208054929350849290919061046a90849061100a565b9091555061047a9050600061084d565b80156105ae576006546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff9081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561051f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610543919061101d565b6105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f70656e616c7479207472616e73666572206661696c656400000000000000000060448201526064015b60405180910390fd5b8082146106f65773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb336105fc848661100a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561066c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610690919061101d565b6106f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7472616e73666572206661696c6564000000000000000000000000000000000060448201526064016105a5565b60405182815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759060200160405180910390a25050565b33600090815260036020526040812054810361077557600654606490819061075b9061ffff168561103f565b610765919061107c565b61076f919061107c565b92915050565b336000908152600260205260409020544210156107af5733600090815260046020526040902054606490819061075b9061ffff168561103f565b506000919050565b6107bf610e6b565b6301e133808111156107fd576040517f39a8636400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058190556040518181527faa382e040a4d9efeb5a813fb9d768cb574053b0dfd7cdf78936a29006e0a7a1c906020015b60405180910390a150565b610841610e6b565b61084b6000610eec565b565b33600090815260016020526040902054811115610896576040517f4c6ca7e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156108ae576005546108a990426110b7565b6108b1565b60005b33600090815260026020908152604080832093909355600390522081905580156108e15760065461ffff166108e4565b60005b3360008181526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff95909516949094179093555183815290917fb84c8b2fd4af52a39fb58972966ea1918386f1c50ea858e4f052ce41930b984891015b60405180910390a250565b610966610e6b565b6127108161ffff1611156109a6576040517fec27417b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040519081527f8cb7d657884b4f8dd60486fbe96f7b450ea909269a2065c8f9a6247e926fa0ec9060200161082e565b80600003610a41576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef91906110ca565b811115610b28576040517fad3a8b9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526001602052604081208054839290610b479084906110b7565b90915550506006543360008181526004602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90951694909417909355517f23b872dd00000000000000000000000000000000000000000000000000000000815291820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af1158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c919061101d565b610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7472616e73666572206661696c6564000000000000000000000000000000000060448201526064016105a5565b60405181815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610953565b610cec610e6b565b73ffffffffffffffffffffffffffffffffffffffff8116610d39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f6089060200161082e565b610dbc610e6b565b73ffffffffffffffffffffffffffffffffffffffff8116610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105a5565b610e6881610eec565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610f7357600080fd5b5035919050565b600060208284031215610f8c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610fb057600080fd5b9392505050565b600060208284031215610fc957600080fd5b813561ffff81168114610fb057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561076f5761076f610fdb565b60006020828403121561102f57600080fd5b81518015158114610fb057600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561107757611077610fdb565b500290565b6000826110b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561076f5761076f610fdb565b6000602082840312156110dc57600080fd5b505191905056fea164736f6c6343000810000a000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c0000000000000000000000005ed7edca7cea9522c0305f6eac7b63efa778fc78

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101515760003560e01c80638968c0af116100cd578063a694fc3a11610081578063f2fde38b11610066578063f2fde38b146102fa578063f3eba1121461030d578063fc0c546a1461032d57600080fd5b8063a694fc3a146102d4578063f0f44260146102e757600080fd5b80638da5cb5b116100b25780638da5cb5b1461028357806396c62d70146102a157806398807d84146102b457600080fd5b80638968c0af146102655780638bafab4b1461027057600080fd5b80634fc3f41a1161012457806361d027b31161010957806361d027b314610209578063715018a614610254578063787a08a61461025c57600080fd5b80634fc3f41a146101d657806355a3b2c1146101e957600080fd5b80630edd2ffc146101565780632e17de781461017c57806331e8d9a6146101915780634ecce451146101b5575b600080fd5b6006546101649061ffff1681565b60405161ffff90911681526020015b60405180910390f35b61018f61018a366004610f61565b610354565b005b61016461019f366004610f7a565b60046020526000908152604090205461ffff1681565b6101c86101c3366004610f61565b61072f565b604051908152602001610173565b61018f6101e4366004610f61565b6107b7565b6101c86101f7366004610f7a565b60036020526000908152604090205481565b60065461022f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b61018f610839565b6101c860055481565b6101c86301e1338081565b61018f61027e366004610f61565b61084d565b60005473ffffffffffffffffffffffffffffffffffffffff1661022f565b61018f6102af366004610fb7565b61095e565b6101c86102c2366004610f7a565b60016020526000908152604090205481565b61018f6102e2366004610f61565b610a07565b61018f6102f5366004610f7a565b610ce4565b61018f610308366004610f7a565b610db4565b6101c861031b366004610f7a565b60026020526000908152604090205481565b61022f7f000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c81565b8060000361038e576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600160205260409020548111156103d7576040517f4c6ca7e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260036020526040902054811480159061040457503360009081526003602052604090205415155b1561043b576040517fae2772b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006104468261072f565b3360009081526001602052604081208054929350849290919061046a90849061100a565b9091555061047a9050600061084d565b80156105ae576006546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff9081166004830152602482018390527f000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c169063a9059cbb906044016020604051808303816000875af115801561051f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610543919061101d565b6105ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f70656e616c7479207472616e73666572206661696c656400000000000000000060448201526064015b60405180910390fd5b8082146106f65773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c1663a9059cbb336105fc848661100a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af115801561066c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610690919061101d565b6106f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7472616e73666572206661696c6564000000000000000000000000000000000060448201526064016105a5565b60405182815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759060200160405180910390a25050565b33600090815260036020526040812054810361077557600654606490819061075b9061ffff168561103f565b610765919061107c565b61076f919061107c565b92915050565b336000908152600260205260409020544210156107af5733600090815260046020526040902054606490819061075b9061ffff168561103f565b506000919050565b6107bf610e6b565b6301e133808111156107fd576040517f39a8636400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058190556040518181527faa382e040a4d9efeb5a813fb9d768cb574053b0dfd7cdf78936a29006e0a7a1c906020015b60405180910390a150565b610841610e6b565b61084b6000610eec565b565b33600090815260016020526040902054811115610896576040517f4c6ca7e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156108ae576005546108a990426110b7565b6108b1565b60005b33600090815260026020908152604080832093909355600390522081905580156108e15760065461ffff166108e4565b60005b3360008181526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff95909516949094179093555183815290917fb84c8b2fd4af52a39fb58972966ea1918386f1c50ea858e4f052ce41930b984891015b60405180910390a250565b610966610e6b565b6127108161ffff1611156109a6576040517fec27417b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040519081527f8cb7d657884b4f8dd60486fbe96f7b450ea909269a2065c8f9a6247e926fa0ec9060200161082e565b80600003610a41576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c73ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef91906110ca565b811115610b28576040517fad3a8b9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526001602052604081208054839290610b479084906110b7565b90915550506006543360008181526004602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90951694909417909355517f23b872dd00000000000000000000000000000000000000000000000000000000815291820152306024820152604481018290527f000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c73ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af1158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c919061101d565b610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7472616e73666572206661696c6564000000000000000000000000000000000060448201526064016105a5565b60405181815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610953565b610cec610e6b565b73ffffffffffffffffffffffffffffffffffffffff8116610d39576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f6089060200161082e565b610dbc610e6b565b73ffffffffffffffffffffffffffffffffffffffff8116610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105a5565b610e6881610eec565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a5565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610f7357600080fd5b5035919050565b600060208284031215610f8c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610fb057600080fd5b9392505050565b600060208284031215610fc957600080fd5b813561ffff81168114610fb057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561076f5761076f610fdb565b60006020828403121561102f57600080fd5b81518015158114610fb057600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561107757611077610fdb565b500290565b6000826110b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561076f5761076f610fdb565b6000602082840312156110dc57600080fd5b505191905056fea164736f6c6343000810000a

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c0000000000000000000000005ed7edca7cea9522c0305f6eac7b63efa778fc78

-----Decoded View---------------
Arg [0] : token_ (address): 0xa62cc35625B0C8dc1fAEA39d33625Bb4C15bD71C
Arg [1] : treasury_ (address): 0x5ED7EDCa7CEA9522c0305f6EAc7B63efa778FC78

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a62cc35625b0c8dc1faea39d33625bb4c15bd71c
Arg [1] : 0000000000000000000000005ed7edca7cea9522c0305f6eac7b63efa778fc78


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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  ]

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.