ETH Price: $2,100.83 (+2.94%)

Contract

0xB3410A30af5033aF822B8eA5Ad3bd0a19490ea97
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x734cc2819883c402c77f9b70bda728ac7066a758daba0d7525beadb8d3b5bc31 Claim(pending)2026-03-05 9:27:407 days ago1772702860IN
0xB3410A30...19490ea97
0 ETH(Pending)(Pending)
Claim246465952026-03-13 5:56:231 hr ago1773381383IN
0xB3410A30...19490ea97
0 ETH0.000055570.03132038
Claim246465422026-03-13 5:45:351 hr ago1773380735IN
0xB3410A30...19490ea97
0 ETH0.000026180.03396485
Claim246465042026-03-13 5:37:591 hr ago1773380279IN
0xB3410A30...19490ea97
0 ETH0.000100480.03302711
Claim246464952026-03-13 5:36:111 hr ago1773380171IN
0xB3410A30...19490ea97
0 ETH0.000078290.03610252
Claim246464912026-03-13 5:35:231 hr ago1773380123IN
0xB3410A30...19490ea97
0 ETH0.000037190.03878932
Claim246464502026-03-13 5:27:111 hr ago1773379631IN
0xB3410A30...19490ea97
0 ETH0.0000850.0335799
Claim246463952026-03-13 5:16:112 hrs ago1773378971IN
0xB3410A30...19490ea97
0 ETH0.000101740.03329879
Claim246462362026-03-13 4:44:232 hrs ago1773377063IN
0xB3410A30...19490ea97
0 ETH0.000024550.03184745
Claim246458582026-03-13 3:28:473 hrs ago1773372527IN
0xB3410A30...19490ea97
0 ETH0.000025730.03282898
Claim246458452026-03-13 3:26:113 hrs ago1773372371IN
0xB3410A30...19490ea97
0 ETH0.000044810.03464926
Claim246457862026-03-13 3:14:234 hrs ago1773371663IN
0xB3410A30...19490ea97
0 ETH0.000040670.03286792
Claim246456182026-03-13 2:40:474 hrs ago1773369647IN
0xB3410A30...19490ea97
0 ETH0.000026080.03327255
Claim246454672026-03-13 2:10:355 hrs ago1773367835IN
0xB3410A30...19490ea97
0 ETH0.000027860.03553854
Claim246453342026-03-13 1:43:235 hrs ago1773366203IN
0xB3410A30...19490ea97
0 ETH0.000122340.15511626
Claim246452782026-03-13 1:31:595 hrs ago1773365519IN
0xB3410A30...19490ea97
0 ETH0.00003730.03426275
Claim246451802026-03-13 1:12:236 hrs ago1773364343IN
0xB3410A30...19490ea97
0 ETH0.000062460.06722972
Claim246451032026-03-13 0:56:596 hrs ago1773363419IN
0xB3410A30...19490ea97
0 ETH0.00008620.10751318
Claim246450992026-03-13 0:56:116 hrs ago1773363371IN
0xB3410A30...19490ea97
0 ETH0.000086730.11250818
Claim246450552026-03-13 0:47:236 hrs ago1773362843IN
0xB3410A30...19490ea97
0 ETH0.000112310.1378008
Claim246449952026-03-13 0:35:236 hrs ago1773362123IN
0xB3410A30...19490ea97
0 ETH0.000242690.25664472
Claim246448182026-03-12 23:59:357 hrs ago1773359975IN
0xB3410A30...19490ea97
0 ETH0.000040030.03573002
Claim246447642026-03-12 23:48:477 hrs ago1773359327IN
0xB3410A30...19490ea97
0 ETH0.000033610.03506362
Claim246446892026-03-12 23:33:477 hrs ago1773358427IN
0xB3410A30...19490ea97
0 ETH0.000106540.1308989
Claim246445332026-03-12 23:01:598 hrs ago1773356519IN
0xB3410A30...19490ea97
0 ETH0.000413170.53600333
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RewardsDistributor

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.13;

import './interfaces/IERC20.sol';
import './interfaces/IRewardsDistributor.sol';
import './interfaces/IVotingEscrow.sol';
import "@openzeppelin/contracts/access/Ownable.sol";
import {BlackTimeLibrary} from "./libraries/BlackTimeLibrary.sol";

contract RewardsDistributor is IRewardsDistributor, Ownable {

    event CheckpointToken(
        uint time,
        uint tokens
    );

    event Claimed(
        uint tokenId,
        uint amount,
        uint claim_epoch,
        uint max_epoch
    );

    event SetDepositor(address indexed old, address indexed latest);

    uint256 public immutable WEEK;

    uint public start_time;
    mapping(uint => uint) public time_cursor_of;

    uint public last_token_time;
    uint[1000000000000000] public tokens_per_week;
    uint public token_last_balance;

    address public immutable voting_escrow;
    address public immutable token;
    address public depositor;

    uint8 public constant MAX_EPOCHS = 20;

    constructor(address _voting_escrow) {
        WEEK = BlackTimeLibrary.WEEK;
        uint _t = block.timestamp / WEEK * WEEK;
        start_time = _t;
        last_token_time = _t;
        address _token = IVotingEscrow(_voting_escrow).token();
        token = _token;
        voting_escrow = _voting_escrow;
        require(IERC20(_token).approve(_voting_escrow, type(uint).max), "approval failed");
    }

    function _checkpoint_token() internal {
        uint token_balance = IERC20(token).balanceOf(address(this));
        uint to_distribute = token_balance - token_last_balance;
        token_last_balance = token_balance;

        uint t = last_token_time;
        uint since_last = block.timestamp - t;
        last_token_time = block.timestamp;
        if(to_distribute > 0){
            uint this_week = t / WEEK * WEEK;
            uint next_week = 0;

            for (uint i = 0; i < 20; i++) {
                next_week = this_week + WEEK;
                if (block.timestamp < next_week) {
                    if (since_last == 0 && block.timestamp == t) {
                        tokens_per_week[this_week] += to_distribute;
                    } else {
                        tokens_per_week[this_week] += to_distribute * (block.timestamp - t) / since_last;
                    }
                    break;
                } else {
                    if (since_last == 0 && next_week == t) {
                        tokens_per_week[this_week] += to_distribute;
                    } else {
                        tokens_per_week[this_week] += to_distribute * (next_week - t) / since_last;
                    }
                }
                t = next_week;
                this_week = next_week;
            }
        }
        emit CheckpointToken(block.timestamp, to_distribute);
    }

    function checkpoint_token() external {
        require(msg.sender == depositor, "NOT_DEPOSITOR");
        _checkpoint_token();
    }

    function _claim(uint _tokenId, address ve, uint _last_token_time) internal returns (uint) {
        uint to_distribute = 0;

        uint max_user_epoch = IVotingEscrow(ve).user_point_epoch(_tokenId);
        uint _start_time = start_time;

        if (max_user_epoch == 0) return 0;

        uint week_cursor = time_cursor_of[_tokenId];
        if (week_cursor == 0) {
            IVotingEscrow.Point memory user_point = IVotingEscrow(ve).user_point_history(_tokenId, 1);
            week_cursor = user_point.ts / WEEK * WEEK;
        }

        if (week_cursor >= _last_token_time) return 0;
        if (week_cursor < _start_time) week_cursor = _start_time;

        uint supply;

        for (uint i = 0; i < MAX_EPOCHS; i++) {
            if (week_cursor >= _last_token_time) break;
            uint balance_of = IVotingEscrow(ve).balanceOfNFTAt(_tokenId, week_cursor + WEEK - 1);
            supply = IVotingEscrow(ve).totalSupplyAtT(week_cursor + WEEK - 1);
            supply = supply == 0 ? 1 : supply;
            to_distribute += balance_of * tokens_per_week[week_cursor] / supply;
            week_cursor += WEEK;
        }
        time_cursor_of[_tokenId] = week_cursor;

        emit Claimed(_tokenId, to_distribute, week_cursor, max_user_epoch);

        return to_distribute;
    }

    function _claimable(uint _tokenId, address ve, uint _last_token_time) internal view returns (uint) {
        uint to_distribute = 0;

        uint max_user_epoch = IVotingEscrow(ve).user_point_epoch(_tokenId);
        uint _start_time = start_time;

        if (max_user_epoch == 0) return 0;

        uint week_cursor = time_cursor_of[_tokenId];
        if (week_cursor == 0) {
            IVotingEscrow.Point memory user_point = IVotingEscrow(ve).user_point_history(_tokenId, 1);
            week_cursor = user_point.ts / WEEK * WEEK;
        }

        if (week_cursor >= _last_token_time) return 0;
        if (week_cursor < _start_time) week_cursor = _start_time;
        uint supply;

        for (uint i = 0; i < MAX_EPOCHS; i++) {
            if (week_cursor >= _last_token_time) break;
            uint balance_of = IVotingEscrow(ve).balanceOfNFTAt(_tokenId, week_cursor + WEEK - 1);
            supply = IVotingEscrow(ve).totalSupplyAtT(week_cursor + WEEK - 1);
            supply = supply == 0 ? 1 : supply;
            to_distribute += balance_of * tokens_per_week[week_cursor] / supply;
            week_cursor += WEEK;
        }

        return to_distribute;
    }

    function claimable(uint _tokenId) external view returns (uint) {
        uint _last_token_time = last_token_time / WEEK * WEEK;
        return _claimable(_tokenId, voting_escrow, _last_token_time);
    }

    function claim(uint256 _tokenId) external returns (uint256) {
        uint _last_token_time = last_token_time;
        _last_token_time = _last_token_time / WEEK * WEEK;
        uint amount = _claim(_tokenId, voting_escrow, _last_token_time);
        if (amount != 0) {
            // if locked.end then send directly
            IVotingEscrow.LockedBalance memory _locked = IVotingEscrow(voting_escrow).locked(_tokenId);
            // If lock has expired and is not permanent, transfer tokens directly
            if (_locked.end < block.timestamp && !_locked.isPermanent) {
                address _nftOwner = IVotingEscrow(voting_escrow).ownerOf(_tokenId);
                IERC20(token).transfer(_nftOwner, amount);
            } else {
                IVotingEscrow(voting_escrow).deposit_for(_tokenId, amount);
            }
            token_last_balance -= amount;
        }
        return amount;
    }

    function claim_many(uint[] memory _tokenIds) external returns (bool) {
        uint _last_token_time = last_token_time;
        _last_token_time = _last_token_time / WEEK * WEEK;
        address _voting_escrow = voting_escrow;
        uint total = 0;
        uint tokenIdsLen = _tokenIds.length;

        for (uint i = 0; i < tokenIdsLen; i++) {
            uint _tokenId = _tokenIds[i];
            require(_tokenId != 0, "INVALID_TOKEN_ID");
            uint amount = _claim(_tokenId, _voting_escrow, _last_token_time);
            if (amount != 0) {
                // if locked.end then send directly
                IVotingEscrow.LockedBalance memory _locked = IVotingEscrow(_voting_escrow).locked(_tokenId);
                if(_locked.end < block.timestamp && !_locked.isPermanent){
                    address _nftOwner = IVotingEscrow(_voting_escrow).ownerOf(_tokenId);
                    IERC20(token).transfer(_nftOwner, amount);
                } else {
                    IVotingEscrow(_voting_escrow).deposit_for(_tokenId, amount);
                }
                total += amount;
            }
        }
        if (total != 0) {
            token_last_balance -= total;
        }

        return true;
    }

    function setDepositor(address _depositor) external onlyOwner {
        emit SetDepositor(depositor, _depositor);
        depositor = _depositor;
    }

    function withdrawERC20(address _token) external onlyOwner {
        require(_token != address(0));
        uint256 _balance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(msg.sender, _balance);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

// SPDX-License-Identifier: MIT OR GPL-3.0-or-later
pragma solidity 0.8.13;

interface IRewardsDistributor {
    function checkpoint_token() external;
    function voting_escrow() external view returns(address);
    function claimable(uint _tokenId) external view returns (uint);
    function claim(uint _tokenId) external returns (uint);
}

// SPDX-License-Identifier: MIT OR GPL-3.0-or-later
pragma solidity 0.8.13;

interface IVotingEscrow {

    struct Point {
        int128 bias;
        int128 slope; // # -dweight / dt
        uint256 ts;
        uint256 blk; // block
        uint256 permanent;
        uint smNFT;
        uint smNFTBonus;
    }

    struct LockedBalance {
        int128 amount;
        uint end;
        bool isPermanent;
        bool isSMNFT;
    }

    function create_lock_for(uint _value, uint _lock_duration, address _to, bool isSMSFT) external returns (uint);

    function locked(uint id) external view returns(LockedBalance memory);
    function tokenOfOwnerByIndex(address _owner, uint _tokenIndex) external view returns (uint);

    function token() external view returns (address);
    function team() external returns (address);
    function epoch() external view returns (uint);
    function point_history(uint loc) external view returns (Point memory);
    function user_point_history(uint tokenId, uint loc) external view returns (Point memory);
    function permanentLockBalance() external view returns (uint256);
    function user_point_epoch(uint tokenId) external view returns (uint);

    function ownerOf(uint) external view returns (address);
    function isApprovedOrOwner(address, uint) external view returns (bool);
    function transferFrom(address, address, uint) external;

    function voted(uint) external view returns (bool);
    function attachments(uint) external view returns (uint);
    function voting(uint tokenId) external;
    function abstain(uint tokenId) external;
    function attach(uint tokenId) external;
    function detach(uint tokenId) external;
    function approve(address _approved, uint _tokenId) external;

    function checkpoint() external;
    function deposit_for(uint tokenId, uint value) external;

    function balanceOfNFT(uint _id) external view returns (uint);
    function balanceOfNFTAt(uint _tokenId, uint _t) external view returns (uint);
    function balanceOf(address _owner) external view returns (uint);
    function totalSupply() external view returns (uint);
    function totalSupplyAtT(uint256 _t) external view returns (uint);
    function supply() external view returns (uint);

    function decimals() external view returns(uint8);


    function lockPermanent(uint _tokenId) external;

    function unlockPermanent(uint _tokenId) external;

    function smNFTBalance() external view returns (uint);
    function calculate_sm_nft_bonus(uint amount) external view returns (uint);
    function calculate_original_sm_nft_amount(uint amount) external view returns (uint);
    function ownerToNFTokenCountFn(address owner) external view returns (uint);
}

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.13;

library BlackTimeLibrary {

    uint256 internal constant WEEK = 7 * 86400;
    uint internal constant NO_VOTING_WINDOW = 3600;
    uint256 internal constant MAX_LOCK_DURATION = 86400 * 365 * 4;

    /// @dev Returns start of epoch based on current timestamp
    function epochStart(uint256 timestamp) internal pure returns (uint256) {
        unchecked {
            return timestamp - (timestamp % WEEK);
        }
    }

    /// @dev Returns start of next epoch / end of current epoch
    function epochNext(uint256 timestamp) internal pure returns (uint256) {
        unchecked {
            return timestamp - (timestamp % WEEK) + WEEK;
        }
    }

    /// @dev Returns start of voting window
    function epochVoteStart(uint256 timestamp) internal pure returns (uint256) {
        unchecked {
            return timestamp - (timestamp % WEEK) + NO_VOTING_WINDOW;
        }
    }

    /// @dev Returns end of voting window / beginning of unrestricted voting window
    function epochVoteEnd(uint256 timestamp) internal pure returns (uint256) {
        unchecked {
            return timestamp - (timestamp % WEEK) + WEEK - NO_VOTING_WINDOW;
        }
    }

    /// @dev Returns the status if it is the last hour of the epoch
    function isLastHour(uint256 timestamp) internal pure returns (bool) {
        // return block.timestamp % 7 days >= 6 days + 23 hours;
        return timestamp >= BlackTimeLibrary.epochVoteEnd(timestamp) 
        && timestamp < BlackTimeLibrary.epochNext(timestamp);
    }

    /// @dev Returns duration in multiples of epoch
    function epochMultiples(uint256 duration) internal pure returns (uint256) {
        unchecked {
            return (duration / WEEK) * WEEK;
        }
    }

    function isLastEpoch(uint256 timestamp, uint256 endTime) internal pure returns (bool) {
        unchecked {
            return  endTime - WEEK <= timestamp && timestamp < endTime;
        }
    }

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_voting_escrow","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"CheckpointToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claim_epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"max_epoch","type":"uint256"}],"name":"Claimed","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":true,"internalType":"address","name":"old","type":"address"},{"indexed":true,"internalType":"address","name":"latest","type":"address"}],"name":"SetDepositor","type":"event"},{"inputs":[],"name":"MAX_EPOCHS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkpoint_token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"claim_many","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"last_token_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_depositor","type":"address"}],"name":"setDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"time_cursor_of","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token_last_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens_per_week","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":[],"name":"voting_escrow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b5060405162001e1b38038062001e1b8339810160408190526200003491620001fe565b6200003f33620001ae565b62093a80608081905260009062000057814262000230565b62000063919062000253565b905080600181905550806003819055506000826001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000da9190620001fe565b6001600160a01b0381811660c081905290851660a081905260405163095ea7b360e01b8152600481019190915260001960248201529192509063095ea7b3906044016020604051808303816000875af11580156200013c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000162919062000281565b620001a55760405162461bcd60e51b815260206004820152600f60248201526e185c1c1c9bdd985b0819985a5b1959608a1b604482015260640160405180910390fd5b505050620002a5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200021157600080fd5b81516001600160a01b03811681146200022957600080fd5b9392505050565b6000826200024e57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156200027c57634e487b7160e01b600052601160045260246000fd5b500290565b6000602082840312156200029457600080fd5b815180151581146200022957600080fd5b60805160a05160c051611a9762000384600039600081816102cc015281816104f5015281816107f001526110be0152600081816102320152818161033001528181610666015281816106ac015281816107540152818161088301526109de015260008181610292015281816102f6015281816106290152818161097f015281816109a001528181610d2101528181610d4201528181610dcb01528181610e7701528181610f5901528181611176015281816111bd01528181611475015281816114960152818161151f015281816115cb01526116ad0152611a976000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063c7c4ff46116100ad578063f2c098b711610071578063f2c098b714610267578063f2fde38b1461027a578063f4359ce51461028d578063f4f3b200146102b4578063fc0c546a146102c757600080fd5b8063c7c4ff46146101e7578063c8b72f8f14610200578063d1d58b251461021a578063dfe050311461022d578063edf599971461025457600080fd5b8063715018a6116100f4578063715018a61461019e5780637f58e8f8146101a8578063811a40fe146101b1578063834ee417146101b95780638da5cb5b146101c257600080fd5b80631f1db0431461012657806322b04bfc1461014e578063379607f51461016b578063486d25fe1461017e575b600080fd5b61013961013436600461173d565b6102ee565b60405190151581526020015b60405180910390f35b61015d66038d7ea4c680045481565b604051908152602001610145565b61015d6101793660046117e3565b610621565b61015d61018c3660046117e3565b60026020526000908152604090205481565b6101a661090e565b005b61015d60035481565b6101a6610922565b61015d60015481565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610145565b66038d7ea4c68005546101cf906001600160a01b031681565b610208601481565b60405160ff9091168152602001610145565b61015d6102283660046117e3565b61097a565b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b61015d6102623660046117e3565b610a03565b6101a6610275366004611811565b610a20565b6101a6610288366004611811565b610a90565b61015d7f000000000000000000000000000000000000000000000000000000000000000081565b6101a66102c2366004611811565b610b09565b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6003546000907f000000000000000000000000000000000000000000000000000000000000000061031f8183611844565b6103299190611866565b83519091507f000000000000000000000000000000000000000000000000000000000000000090600090815b818110156105f057600087828151811061037157610371611885565b60200260200101519050806000036103c35760405162461bcd60e51b815260206004820152601060248201526f1253959053125117d513d2d15397d25160821b60448201526064015b60405180910390fd5b60006103d0828789610c08565b905080156105db57604051635a2d1e0760e11b8152600481018390526000906001600160a01b0388169063b45a3c0e90602401608060405180830381865afa158015610420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044491906118c2565b905042816020015110801561045b57508060400151155b1561056b576040516331a9108f60e11b8152600481018490526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611938565b60405163a9059cbb60e01b81526001600160a01b038083166004830152602482018690529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015610540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105649190611955565b50506105cd565b604051631dd33fc560e31b815260048101849052602481018390526001600160a01b0388169063ee99fe2890604401600060405180830381600087803b1580156105b457600080fd5b505af11580156105c8573d6000803e3d6000fd5b505050505b6105d78287611970565b9550505b505080806105e890611988565b915050610355565b508115610615578166038d7ea4c68004600082825461060f91906119a1565b90915550505b50600195945050505050565b6003546000907f00000000000000000000000000000000000000000000000000000000000000006106528183611844565b61065c9190611866565b9050600061068b847f000000000000000000000000000000000000000000000000000000000000000084610c08565b9050801561090757604051635a2d1e0760e11b8152600481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b45a3c0e90602401608060405180830381865afa1580156106fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071f91906118c2565b905042816020015110801561073657508060400151155b15610866576040516331a9108f60e11b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190611938565b60405163a9059cbb60e01b81526001600160a01b038083166004830152602482018690529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190611955565b50506108e8565b604051631dd33fc560e31b815260048101869052602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ee99fe2890604401600060405180830381600087803b1580156108cf57600080fd5b505af11580156108e3573d6000803e3d6000fd5b505050505b8166038d7ea4c68004600082825461090091906119a1565b9091555050505b9392505050565b610916610ffc565b6109206000611056565b565b66038d7ea4c68005546001600160a01b031633146109725760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fa222a827a9a4aa27a960991b60448201526064016103ba565b6109206110a6565b6000807f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006003546109cc9190611844565b6109d69190611866565b9050610907837f00000000000000000000000000000000000000000000000000000000000000008361135c565b60048166038d7ea4c680008110610a1957600080fd5b0154905081565b610a28610ffc565b66038d7ea4c68005546040516001600160a01b038084169216907f59606f7c19dcf70cc6969f5671e89f2bd4a978609c2f5a522b79aaf715c32d8c90600090a366038d7ea4c6800580546001600160a01b0319166001600160a01b0392909216919091179055565b610a98610ffc565b6001600160a01b038116610afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ba565b610b0681611056565b50565b610b11610ffc565b6001600160a01b038116610b2457600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f91906119b8565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c039190611955565b505050565b60405163391044d760e21b815260048101849052600090819081906001600160a01b0386169063e441135c90602401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7891906119b8565b6001549091506000829003610c935760009350505050610907565b60008781526002602052604081205490819003610d7e576040516309bb79ed60e11b815260048101899052600160248201526000906001600160a01b03891690631376f3da9060440160e060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906119d1565b90507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008260400151610d709190611844565b610d7a9190611866565b9150505b858110610d92576000945050505050610907565b81811015610d9d5750805b6000805b6014811015610f945787831015610f945760006001600160a01b038a1663e0514aba8c6001610df07f000000000000000000000000000000000000000000000000000000000000000089611970565b610dfa91906119a1565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa158015610e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5f91906119b8565b90506001600160a01b038a16637116c60c6001610e9c7f000000000000000000000000000000000000000000000000000000000000000088611970565b610ea691906119a1565b6040518263ffffffff1660e01b8152600401610ec491815260200190565b602060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906119b8565b92508215610f135782610f16565b60015b92508260048566038d7ea4c680008110610f3257610f32611885565b0154610f3e9083611866565b610f489190611844565b610f529088611970565b9650610f7e7f000000000000000000000000000000000000000000000000000000000000000085611970565b9350508080610f8c90611988565b915050610da1565b5060008981526002602090815260409182902084905581518b8152908101879052908101839052606081018590527fcae2990aa9af8eb1c64713b7eddb3a80bf18e49a94a13fe0d0002b5d61d58f009060800160405180910390a15092979650505050505050565b6000546001600160a01b031633146109205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561110d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113191906119b8565b9050600066038d7ea4c68004548261114991906119a1565b66038d7ea4c68004839055600354909150600061116682426119a1565b426003559050821561131d5760007f000000000000000000000000000000000000000000000000000000000000000061119f8185611844565b6111a99190611866565b90506000805b6014811015611319576111e27f000000000000000000000000000000000000000000000000000000000000000084611970565b91508142101561126b57831580156111f957508442145b15611233578560048466038d7ea4c68000811061121857611218611885565b0160008282546112289190611970565b909155506113199050565b8361123e86426119a1565b6112489088611866565b6112529190611844565b60048466038d7ea4c68000811061121857611218611885565b8315801561127857508482145b156112b2578560048466038d7ea4c68000811061129757611297611885565b0160008282546112a79190611970565b909155506113009050565b836112bd86846119a1565b6112c79088611866565b6112d19190611844565b60048466038d7ea4c6800081106112ea576112ea611885565b0160008282546112fa9190611970565b90915550505b819450819250808061131190611988565b9150506111af565b5050505b60408051428152602081018590527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6910160405180910390a150505050565b60405163391044d760e21b815260048101849052600090819081906001600160a01b0386169063e441135c90602401602060405180830381865afa1580156113a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cc91906119b8565b60015490915060008290036113e75760009350505050610907565b600087815260026020526040812054908190036114d2576040516309bb79ed60e11b815260048101899052600160248201526000906001600160a01b03891690631376f3da9060440160e060405180830381865afa15801561144d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147191906119d1565b90507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000082604001516114c49190611844565b6114ce9190611866565b9150505b8581106114e6576000945050505050610907565b818110156114f15750805b6000805b60148110156116e857878310156116e85760006001600160a01b038a1663e0514aba8c60016115447f000000000000000000000000000000000000000000000000000000000000000089611970565b61154e91906119a1565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906119b8565b90506001600160a01b038a16637116c60c60016115f07f000000000000000000000000000000000000000000000000000000000000000088611970565b6115fa91906119a1565b6040518263ffffffff1660e01b815260040161161891815260200190565b602060405180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165991906119b8565b92508215611667578261166a565b60015b92508260048566038d7ea4c68000811061168657611686611885565b01546116929083611866565b61169c9190611844565b6116a69088611970565b96506116d27f000000000000000000000000000000000000000000000000000000000000000085611970565b93505080806116e090611988565b9150506114f5565b509398975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611735576117356116f6565b604052919050565b6000602080838503121561175057600080fd5b823567ffffffffffffffff8082111561176857600080fd5b818501915085601f83011261177c57600080fd5b81358181111561178e5761178e6116f6565b8060051b915061179f84830161170c565b81815291830184019184810190888411156117b957600080fd5b938501935b838510156117d7578435825293850193908501906117be565b98975050505050505050565b6000602082840312156117f557600080fd5b5035919050565b6001600160a01b0381168114610b0657600080fd5b60006020828403121561182357600080fd5b8135610907816117fc565b634e487b7160e01b600052601160045260246000fd5b60008261186157634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156118805761188061182e565b500290565b634e487b7160e01b600052603260045260246000fd5b8051600f81900b81146118ad57600080fd5b919050565b805180151581146118ad57600080fd5b6000608082840312156118d457600080fd5b6040516080810181811067ffffffffffffffff821117156118f7576118f76116f6565b6040526119038361189b565b81526020830151602082015261191b604084016118b2565b604082015261192c606084016118b2565b60608201529392505050565b60006020828403121561194a57600080fd5b8151610907816117fc565b60006020828403121561196757600080fd5b610907826118b2565b600082198211156119835761198361182e565b500190565b60006001820161199a5761199a61182e565b5060010190565b6000828210156119b3576119b361182e565b500390565b6000602082840312156119ca57600080fd5b5051919050565b600060e082840312156119e357600080fd5b60405160e0810181811067ffffffffffffffff82111715611a0657611a066116f6565b604052611a128361189b565b8152611a206020840161189b565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152809150509291505056fea2646970667358221220661a9bf050f8b884797afb7cd102045cf04b52c87990aab8036fa2e2c892cd2a64736f6c634300080d00330000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d44

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063c7c4ff46116100ad578063f2c098b711610071578063f2c098b714610267578063f2fde38b1461027a578063f4359ce51461028d578063f4f3b200146102b4578063fc0c546a146102c757600080fd5b8063c7c4ff46146101e7578063c8b72f8f14610200578063d1d58b251461021a578063dfe050311461022d578063edf599971461025457600080fd5b8063715018a6116100f4578063715018a61461019e5780637f58e8f8146101a8578063811a40fe146101b1578063834ee417146101b95780638da5cb5b146101c257600080fd5b80631f1db0431461012657806322b04bfc1461014e578063379607f51461016b578063486d25fe1461017e575b600080fd5b61013961013436600461173d565b6102ee565b60405190151581526020015b60405180910390f35b61015d66038d7ea4c680045481565b604051908152602001610145565b61015d6101793660046117e3565b610621565b61015d61018c3660046117e3565b60026020526000908152604090205481565b6101a661090e565b005b61015d60035481565b6101a6610922565b61015d60015481565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610145565b66038d7ea4c68005546101cf906001600160a01b031681565b610208601481565b60405160ff9091168152602001610145565b61015d6102283660046117e3565b61097a565b6101cf7f0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d4481565b61015d6102623660046117e3565b610a03565b6101a6610275366004611811565b610a20565b6101a6610288366004611811565b610a90565b61015d7f0000000000000000000000000000000000000000000000000000000000093a8081565b6101a66102c2366004611811565b610b09565b6101cf7f00000000000000000000000000da8466b296e382e5da2bf20962d0cb87200c7881565b6003546000907f0000000000000000000000000000000000000000000000000000000000093a8061031f8183611844565b6103299190611866565b83519091507f0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d4490600090815b818110156105f057600087828151811061037157610371611885565b60200260200101519050806000036103c35760405162461bcd60e51b815260206004820152601060248201526f1253959053125117d513d2d15397d25160821b60448201526064015b60405180910390fd5b60006103d0828789610c08565b905080156105db57604051635a2d1e0760e11b8152600481018390526000906001600160a01b0388169063b45a3c0e90602401608060405180830381865afa158015610420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044491906118c2565b905042816020015110801561045b57508060400151155b1561056b576040516331a9108f60e11b8152600481018490526000906001600160a01b03891690636352211e90602401602060405180830381865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611938565b60405163a9059cbb60e01b81526001600160a01b038083166004830152602482018690529192507f00000000000000000000000000da8466b296e382e5da2bf20962d0cb87200c789091169063a9059cbb906044016020604051808303816000875af1158015610540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105649190611955565b50506105cd565b604051631dd33fc560e31b815260048101849052602481018390526001600160a01b0388169063ee99fe2890604401600060405180830381600087803b1580156105b457600080fd5b505af11580156105c8573d6000803e3d6000fd5b505050505b6105d78287611970565b9550505b505080806105e890611988565b915050610355565b508115610615578166038d7ea4c68004600082825461060f91906119a1565b90915550505b50600195945050505050565b6003546000907f0000000000000000000000000000000000000000000000000000000000093a806106528183611844565b61065c9190611866565b9050600061068b847f0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d4484610c08565b9050801561090757604051635a2d1e0760e11b8152600481018590526000907f0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d446001600160a01b03169063b45a3c0e90602401608060405180830381865afa1580156106fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071f91906118c2565b905042816020015110801561073657508060400151155b15610866576040516331a9108f60e11b8152600481018690526000907f0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d446001600160a01b031690636352211e90602401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190611938565b60405163a9059cbb60e01b81526001600160a01b038083166004830152602482018690529192507f00000000000000000000000000da8466b296e382e5da2bf20962d0cb87200c789091169063a9059cbb906044016020604051808303816000875af115801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190611955565b50506108e8565b604051631dd33fc560e31b815260048101869052602481018390527f0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d446001600160a01b03169063ee99fe2890604401600060405180830381600087803b1580156108cf57600080fd5b505af11580156108e3573d6000803e3d6000fd5b505050505b8166038d7ea4c68004600082825461090091906119a1565b9091555050505b9392505050565b610916610ffc565b6109206000611056565b565b66038d7ea4c68005546001600160a01b031633146109725760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fa222a827a9a4aa27a960991b60448201526064016103ba565b6109206110a6565b6000807f0000000000000000000000000000000000000000000000000000000000093a807f0000000000000000000000000000000000000000000000000000000000093a806003546109cc9190611844565b6109d69190611866565b9050610907837f0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d448361135c565b60048166038d7ea4c680008110610a1957600080fd5b0154905081565b610a28610ffc565b66038d7ea4c68005546040516001600160a01b038084169216907f59606f7c19dcf70cc6969f5671e89f2bd4a978609c2f5a522b79aaf715c32d8c90600090a366038d7ea4c6800580546001600160a01b0319166001600160a01b0392909216919091179055565b610a98610ffc565b6001600160a01b038116610afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ba565b610b0681611056565b50565b610b11610ffc565b6001600160a01b038116610b2457600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f91906119b8565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c039190611955565b505050565b60405163391044d760e21b815260048101849052600090819081906001600160a01b0386169063e441135c90602401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7891906119b8565b6001549091506000829003610c935760009350505050610907565b60008781526002602052604081205490819003610d7e576040516309bb79ed60e11b815260048101899052600160248201526000906001600160a01b03891690631376f3da9060440160e060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906119d1565b90507f0000000000000000000000000000000000000000000000000000000000093a807f0000000000000000000000000000000000000000000000000000000000093a808260400151610d709190611844565b610d7a9190611866565b9150505b858110610d92576000945050505050610907565b81811015610d9d5750805b6000805b6014811015610f945787831015610f945760006001600160a01b038a1663e0514aba8c6001610df07f0000000000000000000000000000000000000000000000000000000000093a8089611970565b610dfa91906119a1565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa158015610e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5f91906119b8565b90506001600160a01b038a16637116c60c6001610e9c7f0000000000000000000000000000000000000000000000000000000000093a8088611970565b610ea691906119a1565b6040518263ffffffff1660e01b8152600401610ec491815260200190565b602060405180830381865afa158015610ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0591906119b8565b92508215610f135782610f16565b60015b92508260048566038d7ea4c680008110610f3257610f32611885565b0154610f3e9083611866565b610f489190611844565b610f529088611970565b9650610f7e7f0000000000000000000000000000000000000000000000000000000000093a8085611970565b9350508080610f8c90611988565b915050610da1565b5060008981526002602090815260409182902084905581518b8152908101879052908101839052606081018590527fcae2990aa9af8eb1c64713b7eddb3a80bf18e49a94a13fe0d0002b5d61d58f009060800160405180910390a15092979650505050505050565b6000546001600160a01b031633146109205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000da8466b296e382e5da2bf20962d0cb87200c786001600160a01b0316906370a0823190602401602060405180830381865afa15801561110d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113191906119b8565b9050600066038d7ea4c68004548261114991906119a1565b66038d7ea4c68004839055600354909150600061116682426119a1565b426003559050821561131d5760007f0000000000000000000000000000000000000000000000000000000000093a8061119f8185611844565b6111a99190611866565b90506000805b6014811015611319576111e27f0000000000000000000000000000000000000000000000000000000000093a8084611970565b91508142101561126b57831580156111f957508442145b15611233578560048466038d7ea4c68000811061121857611218611885565b0160008282546112289190611970565b909155506113199050565b8361123e86426119a1565b6112489088611866565b6112529190611844565b60048466038d7ea4c68000811061121857611218611885565b8315801561127857508482145b156112b2578560048466038d7ea4c68000811061129757611297611885565b0160008282546112a79190611970565b909155506113009050565b836112bd86846119a1565b6112c79088611866565b6112d19190611844565b60048466038d7ea4c6800081106112ea576112ea611885565b0160008282546112fa9190611970565b90915550505b819450819250808061131190611988565b9150506111af565b5050505b60408051428152602081018590527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d6910160405180910390a150505050565b60405163391044d760e21b815260048101849052600090819081906001600160a01b0386169063e441135c90602401602060405180830381865afa1580156113a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cc91906119b8565b60015490915060008290036113e75760009350505050610907565b600087815260026020526040812054908190036114d2576040516309bb79ed60e11b815260048101899052600160248201526000906001600160a01b03891690631376f3da9060440160e060405180830381865afa15801561144d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147191906119d1565b90507f0000000000000000000000000000000000000000000000000000000000093a807f0000000000000000000000000000000000000000000000000000000000093a8082604001516114c49190611844565b6114ce9190611866565b9150505b8581106114e6576000945050505050610907565b818110156114f15750805b6000805b60148110156116e857878310156116e85760006001600160a01b038a1663e0514aba8c60016115447f0000000000000000000000000000000000000000000000000000000000093a8089611970565b61154e91906119a1565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906119b8565b90506001600160a01b038a16637116c60c60016115f07f0000000000000000000000000000000000000000000000000000000000093a8088611970565b6115fa91906119a1565b6040518263ffffffff1660e01b815260040161161891815260200190565b602060405180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165991906119b8565b92508215611667578261166a565b60015b92508260048566038d7ea4c68000811061168657611686611885565b01546116929083611866565b61169c9190611844565b6116a69088611970565b96506116d27f0000000000000000000000000000000000000000000000000000000000093a8085611970565b93505080806116e090611988565b9150506114f5565b509398975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611735576117356116f6565b604052919050565b6000602080838503121561175057600080fd5b823567ffffffffffffffff8082111561176857600080fd5b818501915085601f83011261177c57600080fd5b81358181111561178e5761178e6116f6565b8060051b915061179f84830161170c565b81815291830184019184810190888411156117b957600080fd5b938501935b838510156117d7578435825293850193908501906117be565b98975050505050505050565b6000602082840312156117f557600080fd5b5035919050565b6001600160a01b0381168114610b0657600080fd5b60006020828403121561182357600080fd5b8135610907816117fc565b634e487b7160e01b600052601160045260246000fd5b60008261186157634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156118805761188061182e565b500290565b634e487b7160e01b600052603260045260246000fd5b8051600f81900b81146118ad57600080fd5b919050565b805180151581146118ad57600080fd5b6000608082840312156118d457600080fd5b6040516080810181811067ffffffffffffffff821117156118f7576118f76116f6565b6040526119038361189b565b81526020830151602082015261191b604084016118b2565b604082015261192c606084016118b2565b60608201529392505050565b60006020828403121561194a57600080fd5b8151610907816117fc565b60006020828403121561196757600080fd5b610907826118b2565b600082198211156119835761198361182e565b500190565b60006001820161199a5761199a61182e565b5060010190565b6000828210156119b3576119b361182e565b500390565b6000602082840312156119ca57600080fd5b5051919050565b600060e082840312156119e357600080fd5b60405160e0810181811067ffffffffffffffff82111715611a0657611a066116f6565b604052611a128361189b565b8152611a206020840161189b565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c0820152809150509291505056fea2646970667358221220661a9bf050f8b884797afb7cd102045cf04b52c87990aab8036fa2e2c892cd2a64736f6c634300080d0033

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

0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d44

-----Decoded View---------------
Arg [0] : _voting_escrow (address): 0x4C3e7640B3e3A39a2e5d030A0C1412d80FEE1D44

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004c3e7640b3e3a39a2e5d030a0c1412d80fee1d44


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