ETH Price: $3,928.39 (+7.05%)

Contract

0xD565218D5380e5Cb2c2a2E7d1CF200E3e1FF3099
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TimeHelpers

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : TimeHelpers.sol
// SPDX-License-Identifier: AGPL-3.0-only

/*
    TimeHelpers.sol - SKALE Manager
    Copyright (C) 2019-Present SKALE Labs
    @author Dmytro Stebaiev

    SKALE Manager is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    SKALE Manager is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with SKALE Manager.  If not, see <https://www.gnu.org/licenses/>.
*/

pragma solidity 0.8.17;

import { ITimeHelpers } from "@skalenetwork/skale-manager-interfaces/delegation/ITimeHelpers.sol";

import { BokkyPooBahsDateTimeLibrary } from "../thirdparty/BokkyPooBahsDateTimeLibrary.sol";

/**
 * @title TimeHelpers
 * @dev The contract performs time operations.
 *
 * These functions are used to calculate monthly and Proof of Use epochs.
 */
contract TimeHelpers is ITimeHelpers {

    uint256 constant private _ZERO_YEAR = 2020;

    function calculateProofOfUseLockEndTime(uint256 month, uint256 lockUpPeriodDays)
        external
        view
        override
        returns (uint256 timestamp)
    {
        timestamp = BokkyPooBahsDateTimeLibrary.addDays(monthToTimestamp(month), lockUpPeriodDays);
    }

    function getCurrentMonth() external view virtual override returns (uint256 month) {
        return timestampToMonth(block.timestamp);
    }

    function timestampToYear(uint256 timestamp) external view virtual override returns (uint256 year) {
        (year, , ) = BokkyPooBahsDateTimeLibrary.timestampToDate(timestamp);
        require(year >= _ZERO_YEAR, "Timestamp is too far in the past");
        return year - _ZERO_YEAR;
    }

    function addDays(uint256 fromTimestamp, uint256 n) external pure override returns (uint256 result) {
        return BokkyPooBahsDateTimeLibrary.addDays(fromTimestamp, n);
    }

    function addMonths(uint256 fromTimestamp, uint256 n) external pure override returns (uint256 result) {
        return BokkyPooBahsDateTimeLibrary.addMonths(fromTimestamp, n);
    }

    function addYears(uint256 fromTimestamp, uint256 n) external pure override returns (uint256 result) {
        return BokkyPooBahsDateTimeLibrary.addYears(fromTimestamp, n);
    }

    function timestampToMonth(uint256 timestamp) public view virtual override returns (uint256 month) {
        uint256 year;
        (year, month, ) = BokkyPooBahsDateTimeLibrary.timestampToDate(timestamp);
        require(year >= _ZERO_YEAR, "Timestamp is too far in the past");
        month = month - 1 + (year - _ZERO_YEAR) * 12;
        require(month > 0, "Timestamp is too far in the past");
        return month;
    }

    function monthToTimestamp(uint256 month) public view virtual override returns (uint256 timestamp) {
        uint256 year = _ZERO_YEAR;
        uint256 _month = month;
        year = year + _month / 12;
        _month = _month % 12;
        _month = _month + 1;
        return BokkyPooBahsDateTimeLibrary.timestampFromDate(year, _month, 1);
    }
}

File 2 of 3 : ITimeHelpers.sol
// SPDX-License-Identifier: AGPL-3.0-only

/*
    ITimeHelpers.sol - SKALE Manager
    Copyright (C) 2018-Present SKALE Labs
    @author Artem Payvin

    SKALE Manager is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    SKALE Manager is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with SKALE Manager.  If not, see <https://www.gnu.org/licenses/>.
*/

pragma solidity >=0.6.10 <0.9.0;

interface ITimeHelpers {
    function calculateProofOfUseLockEndTime(uint month, uint lockUpPeriodDays) external view returns (uint timestamp);
    function getCurrentMonth() external view returns (uint);
    function timestampToYear(uint timestamp) external view returns (uint);
    function timestampToMonth(uint timestamp) external view returns (uint);
    function monthToTimestamp(uint month) external view returns (uint timestamp);
    function addDays(uint fromTimestamp, uint n) external pure returns (uint);
    function addMonths(uint fromTimestamp, uint n) external pure returns (uint);
    function addYears(uint fromTimestamp, uint n) external pure returns (uint);
}

File 3 of 3 : BokkyPooBahsDateTimeLibrary.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// ----------------------------------------------------------------------------
// BokkyPooBah's DateTime Library v1.01
//
// A gas-efficient Solidity date and time library
//
// https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary
//
// Tested date range 1970/01/01 to 2345/12/31
//
// Conventions:
// Unit      | Range         | Notes
// :-------- |:-------------:|:-----
// timestamp | >= 0          | Unix timestamp, number of seconds since 1970/01/01 00:00:00 UTC
// year      | 1970 ... 2345 |
// month     | 1 ... 12      |
// day       | 1 ... 31      |
// hour      | 0 ... 23      |
// minute    | 0 ... 59      |
// second    | 0 ... 59      |
// dayOfWeek | 1 ... 7       | 1 = Monday, ..., 7 = Sunday
//
//
// Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018-2019. The MIT Licence.
// ----------------------------------------------------------------------------

library BokkyPooBahsDateTimeLibrary {

    uint constant SECONDS_PER_DAY = 24 * 60 * 60;
    uint constant SECONDS_PER_HOUR = 60 * 60;
    uint constant SECONDS_PER_MINUTE = 60;
    int constant OFFSET19700101 = 2440588;

    uint constant DOW_MON = 1;
    uint constant DOW_TUE = 2;
    uint constant DOW_WED = 3;
    uint constant DOW_THU = 4;
    uint constant DOW_FRI = 5;
    uint constant DOW_SAT = 6;
    uint constant DOW_SUN = 7;

    // ------------------------------------------------------------------------
    // Calculate the number of days from 1970/01/01 to year/month/day using
    // the date conversion algorithm from
    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php
    // and subtracting the offset 2440588 so that 1970/01/01 is day 0
    //
    // days = day
    //      - 32075
    //      + 1461 * (year + 4800 + (month - 14) / 12) / 4
    //      + 367 * (month - 2 - (month - 14) / 12 * 12) / 12
    //      - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4
    //      - offset
    // ------------------------------------------------------------------------
    function _daysFromDate(uint year, uint month, uint day) internal pure returns (uint _days) {
        require(year >= 1970);
        int _year = int(year);
        int _month = int(month);
        int _day = int(day);

        int __days = _day
          - 32075
          + 1461 * (_year + 4800 + (_month - 14) / 12) / 4
          + 367 * (_month - 2 - (_month - 14) / 12 * 12) / 12
          - 3 * ((_year + 4900 + (_month - 14) / 12) / 100) / 4
          - OFFSET19700101;

        _days = uint(__days);
    }

    // ------------------------------------------------------------------------
    // Calculate year/month/day from the number of days since 1970/01/01 using
    // the date conversion algorithm from
    //   http://aa.usno.navy.mil/faq/docs/JD_Formula.php
    // and adding the offset 2440588 so that 1970/01/01 is day 0
    //
    // int L = days + 68569 + offset
    // int N = 4 * L / 146097
    // L = L - (146097 * N + 3) / 4
    // year = 4000 * (L + 1) / 1461001
    // L = L - 1461 * year / 4 + 31
    // month = 80 * L / 2447
    // dd = L - 2447 * month / 80
    // L = month / 11
    // month = month + 2 - 12 * L
    // year = 100 * (N - 49) + year + L
    // ------------------------------------------------------------------------
    function _daysToDate(uint _days) internal pure returns (uint year, uint month, uint day) {
        int __days = int(_days);

        int L = __days + 68569 + OFFSET19700101;
        int N = 4 * L / 146097;
        L = L - (146097 * N + 3) / 4;
        int _year = 4000 * (L + 1) / 1461001;
        L = L - 1461 * _year / 4 + 31;
        int _month = 80 * L / 2447;
        int _day = L - 2447 * _month / 80;
        L = _month / 11;
        _month = _month + 2 - 12 * L;
        _year = 100 * (N - 49) + _year + L;

        year = uint(_year);
        month = uint(_month);
        day = uint(_day);
    }

    function timestampFromDate(uint year, uint month, uint day) internal pure returns (uint timestamp) {
        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY;
    }
    function timestampFromDateTime(uint year, uint month, uint day, uint hour, uint minute, uint second) internal pure returns (uint timestamp) {
        timestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + hour * SECONDS_PER_HOUR + minute * SECONDS_PER_MINUTE + second;
    }
    function timestampToDate(uint timestamp) internal pure returns (uint year, uint month, uint day) {
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
    }
    function timestampToDateTime(uint timestamp) internal pure returns (uint year, uint month, uint day, uint hour, uint minute, uint second) {
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        uint secs = timestamp % SECONDS_PER_DAY;
        hour = secs / SECONDS_PER_HOUR;
        secs = secs % SECONDS_PER_HOUR;
        minute = secs / SECONDS_PER_MINUTE;
        second = secs % SECONDS_PER_MINUTE;
    }

    function isValidDate(uint year, uint month, uint day) internal pure returns (bool valid) {
        if (year >= 1970 && month > 0 && month <= 12) {
            uint daysInMonth = _getDaysInMonth(year, month);
            if (day > 0 && day <= daysInMonth) {
                valid = true;
            }
        }
    }
    function isValidDateTime(uint year, uint month, uint day, uint hour, uint minute, uint second) internal pure returns (bool valid) {
        if (isValidDate(year, month, day)) {
            if (hour < 24 && minute < 60 && second < 60) {
                valid = true;
            }
        }
    }
    function isLeapYear(uint timestamp) internal pure returns (bool leapYear) {
        uint year;
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        leapYear = _isLeapYear(year);
    }
    function _isLeapYear(uint year) internal pure returns (bool leapYear) {
        leapYear = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
    }
    function isWeekDay(uint timestamp) internal pure returns (bool weekDay) {
        weekDay = getDayOfWeek(timestamp) <= DOW_FRI;
    }
    function isWeekEnd(uint timestamp) internal pure returns (bool weekEnd) {
        weekEnd = getDayOfWeek(timestamp) >= DOW_SAT;
    }
    function getDaysInMonth(uint timestamp) internal pure returns (uint daysInMonth) {
        uint year;
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        daysInMonth = _getDaysInMonth(year, month);
    }
    function _getDaysInMonth(uint year, uint month) internal pure returns (uint daysInMonth) {
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            daysInMonth = 31;
        } else if (month != 2) {
            daysInMonth = 30;
        } else {
            daysInMonth = _isLeapYear(year) ? 29 : 28;
        }
    }
    // 1 = Monday, 7 = Sunday
    function getDayOfWeek(uint timestamp) internal pure returns (uint dayOfWeek) {
        uint _days = timestamp / SECONDS_PER_DAY;
        dayOfWeek = (_days + 3) % 7 + 1;
    }

    function getYear(uint timestamp) internal pure returns (uint year) {
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
    }
    function getMonth(uint timestamp) internal pure returns (uint month) {
        uint year;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
    }
    function getDay(uint timestamp) internal pure returns (uint day) {
        uint year;
        uint month;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
    }
    function getHour(uint timestamp) internal pure returns (uint hour) {
        uint secs = timestamp % SECONDS_PER_DAY;
        hour = secs / SECONDS_PER_HOUR;
    }
    function getMinute(uint timestamp) internal pure returns (uint minute) {
        uint secs = timestamp % SECONDS_PER_HOUR;
        minute = secs / SECONDS_PER_MINUTE;
    }
    function getSecond(uint timestamp) internal pure returns (uint second) {
        second = timestamp % SECONDS_PER_MINUTE;
    }

    function addYears(uint timestamp, uint _years) internal pure returns (uint newTimestamp) {
        uint year;
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        year += _years;
        uint daysInMonth = _getDaysInMonth(year, month);
        if (day > daysInMonth) {
            day = daysInMonth;
        }
        newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
        require(newTimestamp >= timestamp);
    }
    function addMonths(uint timestamp, uint _months) internal pure returns (uint newTimestamp) {
        uint year;
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        month += _months;
        year += (month - 1) / 12;
        month = (month - 1) % 12 + 1;
        uint daysInMonth = _getDaysInMonth(year, month);
        if (day > daysInMonth) {
            day = daysInMonth;
        }
        newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
        require(newTimestamp >= timestamp);
    }
    function addDays(uint timestamp, uint _days) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp + _days * SECONDS_PER_DAY;
        require(newTimestamp >= timestamp);
    }
    function addHours(uint timestamp, uint _hours) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp + _hours * SECONDS_PER_HOUR;
        require(newTimestamp >= timestamp);
    }
    function addMinutes(uint timestamp, uint _minutes) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp + _minutes * SECONDS_PER_MINUTE;
        require(newTimestamp >= timestamp);
    }
    function addSeconds(uint timestamp, uint _seconds) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp + _seconds;
        require(newTimestamp >= timestamp);
    }

    function subYears(uint timestamp, uint _years) internal pure returns (uint newTimestamp) {
        uint year;
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        year -= _years;
        uint daysInMonth = _getDaysInMonth(year, month);
        if (day > daysInMonth) {
            day = daysInMonth;
        }
        newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
        require(newTimestamp <= timestamp);
    }
    function subMonths(uint timestamp, uint _months) internal pure returns (uint newTimestamp) {
        uint year;
        uint month;
        uint day;
        (year, month, day) = _daysToDate(timestamp / SECONDS_PER_DAY);
        uint yearMonth = year * 12 + (month - 1) - _months;
        year = yearMonth / 12;
        month = yearMonth % 12 + 1;
        uint daysInMonth = _getDaysInMonth(year, month);
        if (day > daysInMonth) {
            day = daysInMonth;
        }
        newTimestamp = _daysFromDate(year, month, day) * SECONDS_PER_DAY + timestamp % SECONDS_PER_DAY;
        require(newTimestamp <= timestamp);
    }
    function subDays(uint timestamp, uint _days) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp - _days * SECONDS_PER_DAY;
        require(newTimestamp <= timestamp);
    }
    function subHours(uint timestamp, uint _hours) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp - _hours * SECONDS_PER_HOUR;
        require(newTimestamp <= timestamp);
    }
    function subMinutes(uint timestamp, uint _minutes) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp - _minutes * SECONDS_PER_MINUTE;
        require(newTimestamp <= timestamp);
    }
    function subSeconds(uint timestamp, uint _seconds) internal pure returns (uint newTimestamp) {
        newTimestamp = timestamp - _seconds;
        require(newTimestamp <= timestamp);
    }

    function diffYears(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _years) {
        require(fromTimestamp <= toTimestamp);
        uint fromYear;
        uint fromMonth;
        uint fromDay;
        uint toYear;
        uint toMonth;
        uint toDay;
        (fromYear, fromMonth, fromDay) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
        (toYear, toMonth, toDay) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
        _years = toYear - fromYear;
    }
    function diffMonths(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _months) {
        require(fromTimestamp <= toTimestamp);
        uint fromYear;
        uint fromMonth;
        uint fromDay;
        uint toYear;
        uint toMonth;
        uint toDay;
        (fromYear, fromMonth, fromDay) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
        (toYear, toMonth, toDay) = _daysToDate(toTimestamp / SECONDS_PER_DAY);
        _months = toYear * 12 + toMonth - fromYear * 12 - fromMonth;
    }
    function diffDays(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _days) {
        require(fromTimestamp <= toTimestamp);
        _days = (toTimestamp - fromTimestamp) / SECONDS_PER_DAY;
    }
    function diffHours(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _hours) {
        require(fromTimestamp <= toTimestamp);
        _hours = (toTimestamp - fromTimestamp) / SECONDS_PER_HOUR;
    }
    function diffMinutes(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _minutes) {
        require(fromTimestamp <= toTimestamp);
        _minutes = (toTimestamp - fromTimestamp) / SECONDS_PER_MINUTE;
    }
    function diffSeconds(uint fromTimestamp, uint toTimestamp) internal pure returns (uint _seconds) {
        require(fromTimestamp <= toTimestamp);
        _seconds = toTimestamp - fromTimestamp;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"fromTimestamp","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"addDays","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTimestamp","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"addMonths","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTimestamp","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"addYears","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"month","type":"uint256"},{"internalType":"uint256","name":"lockUpPeriodDays","type":"uint256"}],"name":"calculateProofOfUseLockEndTime","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMonth","outputs":[{"internalType":"uint256","name":"month","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"month","type":"uint256"}],"name":"monthToTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"timestampToMonth","outputs":[{"internalType":"uint256","name":"month","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"timestampToYear","outputs":[{"internalType":"uint256","name":"year","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50610960806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063568b55b21161005b578063568b55b2146100eb5780637217523c146100fe578063bf64d84914610111578063ddd1b67e1461012457600080fd5b80632713b2c61461008d5780634355644d146100b2578063442b8c79146100c5578063489a636f146100d8575b600080fd5b6100a061009b36600461077c565b61012c565b60405190815260200160405180910390f35b6100a06100c036600461077c565b610147565b6100a06100d336600461077c565b610159565b6100a06100e636600461079e565b610165565b6100a06100f936600461079e565b6101ac565b6100a061010c36600461077c565b6101f7565b6100a061011f36600461079e565b610203565b6100a061028a565b600061014061013a846101ac565b8361029a565b9392505050565b600061014083836102c2565b92915050565b60006101408383610399565b6000610170826103cd565b50909150506107e48110156101a05760405162461bcd60e51b8152600401610197906107b7565b60405180910390fd5b6101536107e482610802565b60006107e4826101bd600c8261082b565b6101c7908361083f565b91506101d4600c82610852565b90506101e181600161083f565b90506101ef828260016103ee565b949350505050565b6000610140838361029a565b60008061020f836103cd565b50925090506107e48110156102365760405162461bcd60e51b8152600401610197906107b7565b6102426107e482610802565b61024d90600c610866565b610258600184610802565b610262919061083f565b9150600082116102845760405162461bcd60e51b8152600401610197906107b7565b50919050565b600061029542610203565b905090565b60006102a96201518083610866565b6102b3908461083f565b90508281101561015357600080fd5b60008080806102dc6102d7620151808861082b565b610409565b919450925090506102ed858361083f565b9150600c6102fc600184610802565b610306919061082b565b610310908461083f565b9250600c61031f600184610802565b6103299190610852565b61033490600161083f565b91506000610342848461057d565b905080821115610350578091505b61035d6201518088610852565b6201518061036c868686610603565b6103769190610866565b610380919061083f565b94508685101561038f57600080fd5b5050505092915050565b60008080806103ae6102d7620151808861082b565b919450925090506103bf858461083f565b92506000610342848461057d565b600080806103e16102d7620151808661082b565b9196909550909350915050565b6000620151806103ff858585610603565b6101ef9190610866565b60008080838162253d8c6104208362010bd961087d565b61042a919061087d565b9050600062023ab161043d8360046108a5565b61044791906108d5565b905060046104588262023ab16108a5565b61046390600361087d565b61046d91906108d5565b6104779083610903565b9150600062164b0961048a84600161087d565b61049690610fa06108a5565b6104a091906108d5565b905060046104b0826105b56108a5565b6104ba91906108d5565b6104c49084610903565b6104cf90601f61087d565b9250600061098f6104e18560506108a5565b6104eb91906108d5565b9050600060506104fd8361098f6108a5565b61050791906108d5565b6105119086610903565b905061051e600b836108d5565b945061052b85600c6108a5565b61053683600261087d565b6105409190610903565b9150848361054f603187610903565b61055a9060646108a5565b610564919061087d565b61056e919061087d565b9a919950975095505050505050565b6000816001148061058e5750816003145b806105995750816005145b806105a45750816007145b806105af5750816008145b806105ba575081600a145b806105c5575081600c145b156105d25750601f610153565b816002146105e25750601e610153565b6105eb83610740565b6105f657601c6105f9565b601d5b60ff169392505050565b60006107b284101561061457600080fd5b838383600062253d8c60046064600c61062e600e88610903565b61063891906108d5565b6106448861132461087d565b61064e919061087d565b61065891906108d5565b6106639060036108a5565b61066d91906108d5565b600c8061067b600e88610903565b61068591906108d5565b61069090600c6108a5565b61069b600288610903565b6106a59190610903565b6106b19061016f6108a5565b6106bb91906108d5565b6004600c6106ca600e89610903565b6106d491906108d5565b6106e0896112c061087d565b6106ea919061087d565b6106f6906105b56108a5565b61070091906108d5565b61070c617d4b87610903565b610716919061087d565b610720919061087d565b61072a9190610903565b6107349190610903565b98975050505050505050565b600061074d600483610852565b1580156107635750610760606483610852565b15155b80610153575061077561019083610852565b1592915050565b6000806040838503121561078f57600080fd5b50508035926020909101359150565b6000602082840312156107b057600080fd5b5035919050565b6020808252818101527f54696d657374616d7020697320746f6f2066617220696e207468652070617374604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610153576101536107ec565b634e487b7160e01b600052601260045260246000fd5b60008261083a5761083a610815565b500490565b80820180821115610153576101536107ec565b60008261086157610861610815565b500690565b8082028115828204841417610153576101536107ec565b808201828112600083128015821682158216171561089d5761089d6107ec565b505092915050565b80820260008212600160ff1b841416156108c1576108c16107ec565b8181058314821517610153576101536107ec565b6000826108e4576108e4610815565b600160ff1b8214600019841416156108fe576108fe6107ec565b500590565b8181036000831280158383131683831282161715610923576109236107ec565b509291505056fea2646970667358221220520c8a16dab0b8466662d76def13ac7bedbabafe044151790138b1ca6adb327164736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063568b55b21161005b578063568b55b2146100eb5780637217523c146100fe578063bf64d84914610111578063ddd1b67e1461012457600080fd5b80632713b2c61461008d5780634355644d146100b2578063442b8c79146100c5578063489a636f146100d8575b600080fd5b6100a061009b36600461077c565b61012c565b60405190815260200160405180910390f35b6100a06100c036600461077c565b610147565b6100a06100d336600461077c565b610159565b6100a06100e636600461079e565b610165565b6100a06100f936600461079e565b6101ac565b6100a061010c36600461077c565b6101f7565b6100a061011f36600461079e565b610203565b6100a061028a565b600061014061013a846101ac565b8361029a565b9392505050565b600061014083836102c2565b92915050565b60006101408383610399565b6000610170826103cd565b50909150506107e48110156101a05760405162461bcd60e51b8152600401610197906107b7565b60405180910390fd5b6101536107e482610802565b60006107e4826101bd600c8261082b565b6101c7908361083f565b91506101d4600c82610852565b90506101e181600161083f565b90506101ef828260016103ee565b949350505050565b6000610140838361029a565b60008061020f836103cd565b50925090506107e48110156102365760405162461bcd60e51b8152600401610197906107b7565b6102426107e482610802565b61024d90600c610866565b610258600184610802565b610262919061083f565b9150600082116102845760405162461bcd60e51b8152600401610197906107b7565b50919050565b600061029542610203565b905090565b60006102a96201518083610866565b6102b3908461083f565b90508281101561015357600080fd5b60008080806102dc6102d7620151808861082b565b610409565b919450925090506102ed858361083f565b9150600c6102fc600184610802565b610306919061082b565b610310908461083f565b9250600c61031f600184610802565b6103299190610852565b61033490600161083f565b91506000610342848461057d565b905080821115610350578091505b61035d6201518088610852565b6201518061036c868686610603565b6103769190610866565b610380919061083f565b94508685101561038f57600080fd5b5050505092915050565b60008080806103ae6102d7620151808861082b565b919450925090506103bf858461083f565b92506000610342848461057d565b600080806103e16102d7620151808661082b565b9196909550909350915050565b6000620151806103ff858585610603565b6101ef9190610866565b60008080838162253d8c6104208362010bd961087d565b61042a919061087d565b9050600062023ab161043d8360046108a5565b61044791906108d5565b905060046104588262023ab16108a5565b61046390600361087d565b61046d91906108d5565b6104779083610903565b9150600062164b0961048a84600161087d565b61049690610fa06108a5565b6104a091906108d5565b905060046104b0826105b56108a5565b6104ba91906108d5565b6104c49084610903565b6104cf90601f61087d565b9250600061098f6104e18560506108a5565b6104eb91906108d5565b9050600060506104fd8361098f6108a5565b61050791906108d5565b6105119086610903565b905061051e600b836108d5565b945061052b85600c6108a5565b61053683600261087d565b6105409190610903565b9150848361054f603187610903565b61055a9060646108a5565b610564919061087d565b61056e919061087d565b9a919950975095505050505050565b6000816001148061058e5750816003145b806105995750816005145b806105a45750816007145b806105af5750816008145b806105ba575081600a145b806105c5575081600c145b156105d25750601f610153565b816002146105e25750601e610153565b6105eb83610740565b6105f657601c6105f9565b601d5b60ff169392505050565b60006107b284101561061457600080fd5b838383600062253d8c60046064600c61062e600e88610903565b61063891906108d5565b6106448861132461087d565b61064e919061087d565b61065891906108d5565b6106639060036108a5565b61066d91906108d5565b600c8061067b600e88610903565b61068591906108d5565b61069090600c6108a5565b61069b600288610903565b6106a59190610903565b6106b19061016f6108a5565b6106bb91906108d5565b6004600c6106ca600e89610903565b6106d491906108d5565b6106e0896112c061087d565b6106ea919061087d565b6106f6906105b56108a5565b61070091906108d5565b61070c617d4b87610903565b610716919061087d565b610720919061087d565b61072a9190610903565b6107349190610903565b98975050505050505050565b600061074d600483610852565b1580156107635750610760606483610852565b15155b80610153575061077561019083610852565b1592915050565b6000806040838503121561078f57600080fd5b50508035926020909101359150565b6000602082840312156107b057600080fd5b5035919050565b6020808252818101527f54696d657374616d7020697320746f6f2066617220696e207468652070617374604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610153576101536107ec565b634e487b7160e01b600052601260045260246000fd5b60008261083a5761083a610815565b500490565b80820180821115610153576101536107ec565b60008261086157610861610815565b500690565b8082028115828204841417610153576101536107ec565b808201828112600083128015821682158216171561089d5761089d6107ec565b505092915050565b80820260008212600160ff1b841416156108c1576108c16107ec565b8181058314821517610153576101536107ec565b6000826108e4576108e4610815565b600160ff1b8214600019841416156108fe576108fe6107ec565b500590565b8181036000831280158383131683831282161715610923576109236107ec565b509291505056fea2646970667358221220520c8a16dab0b8466662d76def13ac7bedbabafe044151790138b1ca6adb327164736f6c63430008110033

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

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.