BNB Price: $712.27 (-2.43%)
Gas: 1 GWei
 

Overview

BNB Balance

BNB Smart Chain LogoBNB Smart Chain LogoBNB Smart Chain Logo0 BNB

BNB Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Leo

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: Gatekeeper.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^ 0.6.12;

import "./BokkyPooBahsDateTimeLibrary.sol";

interface IGatekeeper { function isTradingOpen() external view returns(bool); }

abstract contract Context
{
	function _msgSender() internal view virtual returns(address payable) { return msg.sender; }

	function _msgData() internal view virtual returns(bytes memory)
	{
		this; // silence state mutability warning without generating bytecode - see
			  // https://github.com/ethereum/solidity/issues/2691
		return msg.data;
	}
}

/**
 * @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.
 */
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() internal
	{
		address msgSender = _msgSender();
		_owner = msgSender;
		emit OwnershipTransferred(address(0), msgSender);
	}

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

	/**
	 * @dev Throws if called by any account other than the owner.
	 */
	modifier onlyOwner()
	{
		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 onlyOwner
	{
		emit OwnershipTransferred(_owner, address(0));
		_owner = address(0);
	}

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

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

contract Leo is Ownable, IGatekeeper
{
	int constant EARLY_OFFSET = 14;
	int constant LATE_OFFSET = -12;

	int public _utcOffset = -4;
	uint public _openingHour = 9;
	uint public _openingMinute = 30;
	uint public _closingHour = 16;
	uint public _closingMin = 0;

	constructor() public {}

	function isTradingOpen() public view override returns(bool)
	{
		uint256 blockTime = block.timestamp;
		return isTradingOpenAt(blockTime);
	}

	function isTradingOpenAt(uint256 timestamp) public view returns(bool)
	{
		uint256 localTimeStamp = applyOffset(timestamp);


		if (BokkyPooBahsDateTimeLibrary.isWeekEnd(localTimeStamp))
		{
			return false;
		}

		uint now_hour;
		uint now_minute;

		(, , , now_hour, now_minute, ) = BokkyPooBahsDateTimeLibrary.timestampToDateTime(localTimeStamp);

		return isOpeningHour(now_hour, now_minute);
	}

	function applyOffset(uint256 timestamp) internal view returns(uint256)
	{
		uint localTimeStamp;
		if (_utcOffset >= 0)
		{
			localTimeStamp = BokkyPooBahsDateTimeLibrary.addHours(timestamp, uint(_utcOffset));
		}
		else
		{
			localTimeStamp = BokkyPooBahsDateTimeLibrary.subHours(timestamp, uint(-_utcOffset));
		}
		return localTimeStamp;
	}


	function isOpeningHour(uint hour, uint minute) internal view returns(bool)
	{
		if ((hour < _openingHour) || (hour >= _closingHour))
		{
			return false;
		}

		if ((hour == _openingHour) && (minute < _openingMinute))
		{
			return false;
		}
		return true;
	}

	function setUTCOffset(int utcOffset) public onlyOwner()
	{
		require(utcOffset > EARLY_OFFSET, "Invalid UCT offset");
		require(utcOffset < LATE_OFFSET, "Invalid UCT offset");
		_utcOffset = utcOffset;
	}
}

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

pragma solidity ^0.6.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,,) = _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,) = _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) {
        (year,,) = _daysToDate(timestamp / SECONDS_PER_DAY);
    }
    function getMonth(uint timestamp) internal pure returns (uint month) {
        (,month,) = _daysToDate(timestamp / SECONDS_PER_DAY);
    }
    function getDay(uint timestamp) internal pure returns (uint day) {
        (,,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) = _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) = _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) = _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) = _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,,) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
        (uint toYear,,) = _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,) = _daysToDate(fromTimestamp / SECONDS_PER_DAY);
        (uint toYear, uint toMonth,) = _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;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_closingHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_closingMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_openingHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_openingMinute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_utcOffset","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isTradingOpenAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"int256","name":"utcOffset","type":"int256"}],"name":"setUTCOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526003196001556009600255601e6003556010600455600060055534801561002a57600080fd5b506000610035610084565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610088565b3390565b6106f9806100976000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063652421f511610071578063652421f514610111578063715018a6146101195780637579eb1a146101235780638da5cb5b14610140578063c89169ad14610164578063f2fde38b1461016c576100a9565b80630550245a146100ae57806311a1e853146100c857806321949a25146100f95780633871d6561461010157806356a060a214610109575b600080fd5b6100b6610192565b60408051918252519081900360200190f35b6100e5600480360360208110156100de57600080fd5b5035610198565b604080519115158252519081900360200190f35b6100b66101eb565b6100b66101f1565b6100e56101f7565b6100b6610209565b61012161020f565b005b6101216004803603602081101561013957600080fd5b50356102c3565b6101486103c7565b604080516001600160a01b039092168252519081900360200190f35b6100b66103d6565b6101216004803603602081101561018257600080fd5b50356001600160a01b03166103dc565b60035481565b6000806101a483610452565b90506101af8161048a565b156101be5760009150506101e6565b6000806101ca8361049f565b5090955093506101e092508491508390506104df565b93505050505b919050565b60045481565b60015481565b60004261020381610198565b91505090565b60055481565b610217610528565b6000546001600160a01b03908116911614610279576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102cb610528565b6000546001600160a01b0390811691161461032d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600e8113610377576040805162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081550d5081bd9999cd95d60721b604482015290519081900360640190fd5b600b1981126103c2576040805162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081550d5081bd9999cd95d60721b604482015290519081900360640190fd5b600155565b6000546001600160a01b031690565b60025481565b6103e4610528565b6000546001600160a01b03908116911614610446576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61044f8161052c565b50565b6000806000600154126104725761046b836001546105cc565b9050610484565b610481836001546000036105e0565b90505b92915050565b60006006610497836105f4565b101592915050565b600080808080806104b4620151808804610607565b91999098919750610e10620151809092068281049750603c9290068281049650919091069350915050565b60006002548310806104f357506004548310155b1561050057506000610484565b60025483148015610512575060035482105b1561051f57506000610484565b50600192915050565b3390565b6001600160a01b0381166105715760405162461bcd60e51b815260040180806020018281038252602681526020018061069e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610e10810282018281101561048457600080fd5b610e10810282038281111561048457600080fd5b6007620151809091046003010660010190565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161065e57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c9094029091039290920197509550935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220084f6ebf903638735cf822a3eeb9a7b5c076b5a809a02c65f1a0c9dc3774fed764736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063652421f511610071578063652421f514610111578063715018a6146101195780637579eb1a146101235780638da5cb5b14610140578063c89169ad14610164578063f2fde38b1461016c576100a9565b80630550245a146100ae57806311a1e853146100c857806321949a25146100f95780633871d6561461010157806356a060a214610109575b600080fd5b6100b6610192565b60408051918252519081900360200190f35b6100e5600480360360208110156100de57600080fd5b5035610198565b604080519115158252519081900360200190f35b6100b66101eb565b6100b66101f1565b6100e56101f7565b6100b6610209565b61012161020f565b005b6101216004803603602081101561013957600080fd5b50356102c3565b6101486103c7565b604080516001600160a01b039092168252519081900360200190f35b6100b66103d6565b6101216004803603602081101561018257600080fd5b50356001600160a01b03166103dc565b60035481565b6000806101a483610452565b90506101af8161048a565b156101be5760009150506101e6565b6000806101ca8361049f565b5090955093506101e092508491508390506104df565b93505050505b919050565b60045481565b60015481565b60004261020381610198565b91505090565b60055481565b610217610528565b6000546001600160a01b03908116911614610279576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6102cb610528565b6000546001600160a01b0390811691161461032d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600e8113610377576040805162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081550d5081bd9999cd95d60721b604482015290519081900360640190fd5b600b1981126103c2576040805162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081550d5081bd9999cd95d60721b604482015290519081900360640190fd5b600155565b6000546001600160a01b031690565b60025481565b6103e4610528565b6000546001600160a01b03908116911614610446576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61044f8161052c565b50565b6000806000600154126104725761046b836001546105cc565b9050610484565b610481836001546000036105e0565b90505b92915050565b60006006610497836105f4565b101592915050565b600080808080806104b4620151808804610607565b91999098919750610e10620151809092068281049750603c9290068281049650919091069350915050565b60006002548310806104f357506004548310155b1561050057506000610484565b60025483148015610512575060035482105b1561051f57506000610484565b50600192915050565b3390565b6001600160a01b0381166105715760405162461bcd60e51b815260040180806020018281038252602681526020018061069e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610e10810282018281101561048457600080fd5b610e10810282038281111561048457600080fd5b6007620151809091046003010660010190565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161065e57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c9094029091039290920197509550935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220084f6ebf903638735cf822a3eeb9a7b5c076b5a809a02c65f1a0c9dc3774fed764736f6c634300060c0033

Deployed Bytecode Sourcemap

2677:1654:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2844:31;;;:::i;:::-;;;;;;;;;;;;;;;;3111:399;;;;;;;;;;;;;;;;-1:-1:-1;3111:399:1;;:::i;:::-;;;;;;;;;;;;;;;;;;2878:29;;;:::i;2784:26::-;;;:::i;2967:141::-;;;:::i;2910:27::-;;;:::i;2027:123::-;;;:::i;:::-;;4125:204;;;;;;;;;;;;;;;;-1:-1:-1;4125:204:1;;:::i;1467:64::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1467:64:1;;;;;;;;;;;;;;2813:28;;;:::i;2284:95::-;;;;;;;;;;;;;;;;-1:-1:-1;2284:95:1;-1:-1:-1;;;;;2284:95:1;;:::i;2844:31::-;;;;:::o;3111:399::-;3175:4;3186:22;3211;3223:9;3211:11;:22::i;:::-;3186:47;;3243:53;3281:14;3243:37;:53::i;:::-;3239:83;;;3312:5;3305:12;;;;;3239:83;3326:13;3343:15;3396:63;3444:14;3396:47;:63::i;:::-;-1:-1:-1;3363:96:1;;-1:-1:-1;3363:96:1;-1:-1:-1;3471:35:1;;-1:-1:-1;3363:96:1;;-1:-1:-1;3363:96:1;;-1:-1:-1;3471:13:1;:35::i;:::-;3464:42;;;;;3111:399;;;;:::o;2878:29::-;;;;:::o;2784:26::-;;;;:::o;2967:141::-;3021:4;3052:15;3078:26;3052:15;3078;:26::i;:::-;3071:33;;;2967:141;:::o;2910:27::-;;;;:::o;2027:123::-;1651:12;:10;:12::i;:::-;1641:6;;-1:-1:-1;;;;;1641:6:1;;;:22;;;1633:67;;;;;-1:-1:-1;;;1633:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2120:1:::1;2104:6:::0;;2083:40:::1;::::0;-1:-1:-1;;;;;2104:6:1;;::::1;::::0;2083:40:::1;::::0;2120:1;;2083:40:::1;2144:1;2127:19:::0;;-1:-1:-1;;;;;;2127:19:1::1;::::0;;2027:123::o;4125:204::-;1651:12;:10;:12::i;:::-;1641:6;;-1:-1:-1;;;;;1641:6:1;;;:22;;;1633:67;;;;;-1:-1:-1;;;1633:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2745:2:::1;4194:9;:24;4186:55;;;::::0;;-1:-1:-1;;;4186:55:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4186:55:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;4253:9:1::1;:23;4245:54;;;::::0;;-1:-1:-1;;;4245:54:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4245:54:1;;;;;;;;;;;;;::::1;;4303:10;:22:::0;4125:204::o;1467:64::-;1504:7;1522:6;-1:-1:-1;;;;;1522:6:1;1467:64;:::o;2813:28::-;;;;:::o;2284:95::-;1651:12;:10;:12::i;:::-;1641:6;;-1:-1:-1;;;;;1641:6:1;;;:22;;;1633:67;;;;;-1:-1:-1;;;1633:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2348:28:::1;2367:8;2348:18;:28::i;:::-;2284:95:::0;:::o;3513:345::-;3575:7;3589:19;3630:1;3616:10;;:15;3612:218;;3657:65;3694:9;3710:10;;3657:36;:65::i;:::-;3640:82;;3612:218;;;3759:66;3796:9;3813:10;;3812:11;;3759:36;:66::i;:::-;3742:83;;3612:218;3840:14;3513:345;-1:-1:-1;;3513:345:1:o;6119:133:0:-;6177:12;1349:1;6211:23;6224:9;6211:12;:23::i;:::-;:34;;;6119:133;-1:-1:-1;;6119:133:0:o;4569:433::-;4637:9;;;;;;4738:40;1019:12;4750:9;:27;4738:11;:40::i;:::-;4717:61;;;;;;-1:-1:-1;1070:7:0;1019:12;4800:27;;;4844:23;;;;-1:-1:-1;1118:2:0;4884:23;;;4926:25;;;;-1:-1:-1;4970:25:0;;;;;-1:-1:-1;4569:433:0;-1:-1:-1;;4569:433:0:o;3862:260:1:-;3931:4;3954:12;;3947:4;:19;3946:47;;;;3980:12;;3972:4;:20;;3946:47;3942:77;;;-1:-1:-1;4009:5:1;4002:12;;3942:77;4036:12;;4028:4;:20;4027:51;;;;;4063:14;;4054:6;:23;4027:51;4023:81;;;-1:-1:-1;4094:5:1;4087:12;;4023:81;-1:-1:-1;4114:4:1;3862:260;;;;:::o;218:91::-;296:10;218:91;:::o;2468:205::-;-1:-1:-1;;;;;2536:22:1;;2528:73;;;;-1:-1:-1;;;2528:73:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:6;;;2610:38;;-1:-1:-1;;;;;2610:38:1;;;;2631:6;;;2610:38;;;2652:6;:17;;-1:-1:-1;;;;;;2652:17:1;-1:-1:-1;;;;;2652:17:1;;;;;;;;;;2468:205::o;9235:202:0:-;1070:7;9361:25;;9349:37;;9404:25;;;;9396:34;;;;;11140:202;1070:7;11266:25;;11254:37;;11309:25;;;;11301:34;;;;;6897:175;7060:1;1019:12;6997:27;;;7055:1;7047:9;7046:15;7064:1;7046:19;;6897:175::o;3308:605::-;3364:9;;;3424:5;3449:31;;;3364:9;3506:6;3498:1;:5;;:14;;-1:-1:-1;3549:1:0;3544;3531:6;:10;;:14;3530:20;3526:24;;;;3560:9;3589:7;3572:4;3584:1;3580:5;;3572:14;:24;;-1:-1:-1;3629:1:0;3614:4;:12;;:16;3610:1;:20;3633:2;3610:25;3606:29;;3645:10;3667:4;3663:1;3658:2;:6;:13;;;;;;;-1:-1:-1;3681:8:0;3712:2;3696:4;:13;;:18;3692:22;;;-1:-1:-1;3737:2:0;3728:6;:11;-1:-1:-1;;3802:6:0;;;;3795:3;:14;:22;;;;:26;;;3767:1;3771:2;:6;;;3758:19;;;;;;;;-1:-1:-1;3728:11:0;-1:-1:-1;3795:26:0;-1:-1:-1;;;;3308:605:0:o

Swarm Source

ipfs://084f6ebf903638735cf822a3eeb9a7b5c076b5a809a02c65f1a0c9dc3774fed7

Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

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.