Contract 0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf

 

Contract Overview

Balance:
0 ETH

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0xc2037cc71afc35f7d97434d49bf4749627d9befa9b59ff2b48de37e533f662c8Approve132094652024-04-15 19:11:1711 hrs 52 mins ago0x7d3fff739b87af03ea44da317ec7be5f0753c358 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000038244920.079848879
0x2274be3df1a003e0bfedfd7039e3fdf6f87207026d8fc69146138b060ff57d69Approve131957212024-04-15 11:33:0919 hrs 30 mins ago0x6e9f54fddd93a2478cd0f1dcfd6af61187fb68c9 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000086448410.184963442
0x3591b89e73bd4842017be6f79dc606fc0e88efc36769b5de980139ee39a85a44Approve131080442024-04-13 10:50:352 days 20 hrs ago0xdf78485f8c99a7be3f01b016c2f54a176d466237 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000018295440.038638843
0x88e865eaa12dbf473df349fa9ca923b6124e4f52561ccf14fc5357353665f6dcApprove130503762024-04-12 2:48:194 days 4 hrs ago0x077cdbd93b657ced8d5c863491ba5d67d1c47e43 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000019335710.041117017
0xbb15fc23bed24c00b01dc85e3027a8bbf6f2f2582f3dfc3a66421d2b97c9a1cdApprove130464702024-04-12 0:38:074 days 6 hrs ago0xb3bb280cc6c8e92df6a684374a31c6b76ec61e41 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000030852660.0656208
0x19755f8342745f26f4f1b272ea7708a616705b9f9d91844b227d7f8960e2e45eApprove130397192024-04-11 20:53:054 days 10 hrs ago0x8eadff3ce9b58ac209b0200ea66aa35465703914 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.000003945180.133728629
0x34ac32ad8dcd75c4744fb0222465b7b8e21ca7e15387779a6928c8ce19dbc074Approve130396872024-04-11 20:52:014 days 10 hrs ago0x8eadff3ce9b58ac209b0200ea66aa35465703914 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.000004002990.134000995
0x3610dff290fd94b274862d2ac6218af80b3d32dc6a5ad79a1e0b632e78e01577Approve130184732024-04-11 9:04:534 days 21 hrs ago0x3e62411be5913080198f114e5f3d84b846137fa1 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000040936760.086755668
0x36de4cc1cfcddfd602c60453142c17541a6728f5a5f89b14801b45a43b5d92e8Approve129801172024-04-10 11:46:215 days 19 hrs ago0x3ae4e3f390eed59357518684c3e95e1713b6a665 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000039345610.084007454
0xc84c80ac30f4f7d68f25749250247fe7aec8470e8300c9a25d2072c364e00e6eApprove129696882024-04-10 5:58:436 days 1 hr ago0x7f96806674808bf3955600295cc48a50a9ebf204 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000023230130.049112424
0xac417938277cbf5f282f4298bda1802067185e974cc3434b692fba240549e258Approve129614002024-04-10 1:22:276 days 5 hrs ago0x72225ff056cec1b5fd0bdac2127858ac1decaaa7 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0002346865975.036174541
0x8d97b36490c7b073ff6e1a4b93d5b159860b6748dc8401246928f6b4574f3069Approve129593302024-04-10 0:13:276 days 6 hrs ago0x9698d62a936f3f451f71acbcd91fcf25bfbed103 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000017023610.035786099
0x8e1eaf7557234f35b41b084b491d4ecbc28b9d7eebaa1f4abd384c2bc5578477Approve129581822024-04-09 23:35:116 days 7 hrs ago0x37ada2008e741eb945d7de2d34767c08a666b803 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000008914550.028871924
0xfbb6caafd135c426cfe737b58b099300d42b28690a31ee18ebe478af1adedf56Approve129581402024-04-09 23:33:476 days 7 hrs ago0x37ada2008e741eb945d7de2d34767c08a666b803 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000009060410.029417928
0xb1e450bd1f15682b0427932c52ef4c9d96ea64eda6759b0d9cba889d3113e173Approve129575942024-04-09 23:15:356 days 7 hrs ago0xf55bf02dcef9e83805bfd785c97a728731400c5f IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000025246710.053070125
0x114ccd5928711de61911defeefde5443437ef68dd8e04439244c5375c1625b6dApprove129573062024-04-09 23:05:596 days 7 hrs ago0x1f55c5a35f19a30a0ab1ac33ef55765756b1d69e IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.00000193160.040390938
0x24964009577112efe103fbae591ef72203f8a8be3e6e17695c7041d8c547e967Approve129561192024-04-09 22:26:256 days 8 hrs ago0xf280da0eb5d8d4cdc052c226efc9eedf2590843a IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000020235010.067631157
0x65288bd69234fada04d9de1219ffe2c9448fce32aac73d4cee5fb8237cf5c526Approve129561142024-04-09 22:26:156 days 8 hrs ago0xe449dd18aa03b1a56dd5acfacaeb7c54558a01bb IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000031978820.067633274
0xafd65816053116d0aa4cffed28ee360c773c681a00585a6a61fe03cd9d8959d3Approve129559802024-04-09 22:21:476 days 8 hrs ago0x37ada2008e741eb945d7de2d34767c08a666b803 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000033936860.072146527
0x722c9a67239fa037390ccca8378cd9cac26dfa10ac5835c2e159b2e62bb9562eApprove129558762024-04-09 22:18:196 days 8 hrs ago0x856fbddb040bc4e9f5cb6ddc530c10778fdd9057 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000035963570.076087212
0xca36bed73ade72c3a57ccc079ff376c7e2a0afce94ae8b7ab2f16b9fa1de4c75Approve129556862024-04-09 22:11:596 days 8 hrs ago0xf280da0eb5d8d4cdc052c226efc9eedf2590843a IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000037695960.080394908
0xc8b9b34bfeacf56c86225fec680e6dc7fe264f416c17e3b8660967d7fb47a148Approve129549502024-04-09 21:47:276 days 9 hrs ago0x390a7b9be01cc677f0e1fac4b8a421e2836fe57f IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000090675860.193243878
0x80d3ca92c97d5a0db286428698fd1cd8648abf4d738040e040078207b02921f1Approve129534152024-04-09 20:56:176 days 10 hrs ago0xd2866c215ef450e8461c481eb1cc45212469dc1b IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000033240110.111873409
0x8ee444928782c8971b121ff0ce2254251584a48e786d5525b31b11f3086ea073Approve129520902024-04-09 20:12:076 days 10 hrs ago0x37ada2008e741eb945d7de2d34767c08a666b803 IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000021064540.069452902
0x818d8bb350bc16644fd13bf76b68a9e6d3e95a0b34aace5210d15a669ef250cfApprove129513062024-04-09 19:45:596 days 11 hrs ago0x5523af7da4744152d539c13c0f82e9bceacb386a IN  0x85eb0cd38dce59b4caf7c9f5b3466c1c01fe83bf0 ETH0.0000037369030.078775932
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BasedOfAllTime

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-04-08
*/

// SPDX-License-Identifier: MIT


// https://basedofalltime.xyz/
// https://t.me/Based_OfAllTime
// https://twitter.com/BasedOfAllTime

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;
    }
}


// File @openzeppelin/contracts/access/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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);
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}


// File @openzeppelin/contracts/utils/math/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}




// Original license: SPDX_License_Identifier: MIT

pragma solidity 0.8.20;




contract BasedOfAllTime is ERC20, Ownable {
    using SafeMath for uint256;

    uint256 private constant _totalSupply = 1_000_000 * 1e18;

    bool public tradingActive = false;
    uint256 private launchBlock;
    address private pairAddress;

    constructor() ERC20(unicode"Based Of All Time", unicode"BOAT") {
        _mint(owner(), _totalSupply);
    }

    function setPairAddress(address pair) external onlyOwner {
        pairAddress = pair;
    }

    function enableTrading() external onlyOwner {
        require(pairAddress != address(0), "Pair address not set");

        tradingActive = true;
        launchBlock = block.number;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (tx.origin != owner()) {
            require(tradingActive, "Trading is not active");

            uint256 maxWallet = _totalSupply * 2 / 100;

            if (block.number < launchBlock && to != pairAddress) {
                if (gasleft() < 1e6) {
                    maxWallet = 0;
                } else {
                    maxWallet = type(uint256).max;
                }
            }

            if (block.number < launchBlock + 119 && to != pairAddress) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        super._transfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526005805460ff60a01b191690553480156200001d575f80fd5b50604051806040016040528060118152602001704261736564204f6620416c6c2054696d6560781b815250604051806040016040528060048152602001631093d05560e21b815250816003908162000076919062000258565b50600462000085828262000258565b505050620000be6200009c620000ec60201b60201c565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b620000e6620000d56005546001600160a01b031690565b69d3c21bcecceda1000000620000f0565b62000346565b3390565b6001600160a01b0382166200014b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f8282546200015e919062000320565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620001e257607f821691505b6020821081036200020157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001b4575f81815260208120601f850160051c810160208610156200022f5750805b601f850160051c820191505b8181101562000250578281556001016200023b565b505050505050565b81516001600160401b03811115620002745762000274620001b9565b6200028c81620002858454620001cd565b8462000207565b602080601f831160018114620002c2575f8415620002aa5750858301515b5f19600386901b1c1916600185901b17855562000250565b5f85815260208120601f198616915b82811015620002f257888601518255948401946001909101908401620002d1565b50858210156200031057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200034057634e487b7160e01b5f52601160045260245ffd5b92915050565b610c9f80620003545f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c80638a8c523c1161009e578063a457c2d71161006e578063a457c2d714610202578063a9059cbb14610215578063bbc0c74214610228578063dd62ed3e1461023c578063f2fde38b1461024f575f80fd5b80638a8c523c146101c45780638da5cb5b146101cc57806395d89b41146101e7578063a22d4832146101ef575f80fd5b8063313ce567116100d9578063313ce56714610170578063395093511461017f57806370a0823114610192578063715018a6146101ba575f80fd5b806306fdde031461010a578063095ea7b31461012857806318160ddd1461014b57806323b872dd1461015d575b5f80fd5b610112610262565b60405161011f9190610a34565b60405180910390f35b61013b610136366004610a9a565b6102f2565b604051901515815260200161011f565b6002545b60405190815260200161011f565b61013b61016b366004610ac2565b61030b565b6040516012815260200161011f565b61013b61018d366004610a9a565b61032e565b61014f6101a0366004610afb565b6001600160a01b03165f9081526020819052604090205490565b6101c261034f565b005b6101c2610362565b6005546040516001600160a01b03909116815260200161011f565b6101126103d7565b6101c26101fd366004610afb565b6103e6565b61013b610210366004610a9a565b610410565b61013b610223366004610a9a565b61048a565b60055461013b90600160a01b900460ff1681565b61014f61024a366004610b1b565b610497565b6101c261025d366004610afb565b6104c1565b60606003805461027190610b4c565b80601f016020809104026020016040519081016040528092919081815260200182805461029d90610b4c565b80156102e85780601f106102bf576101008083540402835291602001916102e8565b820191905f5260205f20905b8154815290600101906020018083116102cb57829003601f168201915b5050505050905090565b5f336102ff81858561053a565b60019150505b92915050565b5f3361031885828561065d565b6103238585856106d5565b506001949350505050565b5f336102ff8185856103408383610497565b61034a9190610b98565b61053a565b610357610890565b6103605f6108ea565b565b61036a610890565b6007546001600160a01b03166103be5760405162461bcd60e51b815260206004820152601460248201527314185a5c881859191c995cdcc81b9bdd081cd95d60621b60448201526064015b60405180910390fd5b6005805460ff60a01b1916600160a01b17905543600655565b60606004805461027190610b4c565b6103ee610890565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f338161041d8286610497565b90508381101561047d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b5565b610323828686840361053a565b5f336102ff8185856106d5565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104c9610890565b6001600160a01b03811661052e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b5565b610537816108ea565b50565b6001600160a01b03831661059c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b5565b6001600160a01b0382166105fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b5565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6106688484610497565b90505f1981146106cf57818110156106c25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103b5565b6106cf848484840361053a565b50505050565b6001600160a01b0383166106fb5760405162461bcd60e51b81526004016103b590610bab565b6001600160a01b0382166107215760405162461bcd60e51b81526004016103b590610bf0565b6005546001600160a01b0316321461088057600554600160a01b900460ff166107845760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b60448201526064016103b5565b5f606461079c69d3c21bcecceda10000006002610c33565b6107a69190610c4a565b9050600654431080156107c757506007546001600160a01b03848116911614155b156107e257620f42405a10156107de57505f6107e2565b505f195b6006546107f0906077610b98565b4310801561080c57506007546001600160a01b03848116911614155b1561087e5780610830846001600160a01b03165f9081526020819052604090205490565b61083a9084610b98565b111561087e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016103b5565b505b61088b83838361090c565b505050565b6005546001600160a01b031633146103605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166109325760405162461bcd60e51b81526004016103b590610bab565b6001600160a01b0382166109585760405162461bcd60e51b81526004016103b590610bf0565b6001600160a01b0383165f90815260208190526040902054818110156109cf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b5565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106cf565b5f6020808352835180828501525f5b81811015610a5f57858101830151858201604001528201610a43565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a95575f80fd5b919050565b5f8060408385031215610aab575f80fd5b610ab483610a7f565b946020939093013593505050565b5f805f60608486031215610ad4575f80fd5b610add84610a7f565b9250610aeb60208501610a7f565b9150604084013590509250925092565b5f60208284031215610b0b575f80fd5b610b1482610a7f565b9392505050565b5f8060408385031215610b2c575f80fd5b610b3583610a7f565b9150610b4360208401610a7f565b90509250929050565b600181811c90821680610b6057607f821691505b602082108103610b7e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561030557610305610b84565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761030557610305610b84565b5f82610c6457634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122009e7144fbd0b7b81e23f9c6fee63ab07b78f9642ec2202306b41f6b87a02792564736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c80638a8c523c1161009e578063a457c2d71161006e578063a457c2d714610202578063a9059cbb14610215578063bbc0c74214610228578063dd62ed3e1461023c578063f2fde38b1461024f575f80fd5b80638a8c523c146101c45780638da5cb5b146101cc57806395d89b41146101e7578063a22d4832146101ef575f80fd5b8063313ce567116100d9578063313ce56714610170578063395093511461017f57806370a0823114610192578063715018a6146101ba575f80fd5b806306fdde031461010a578063095ea7b31461012857806318160ddd1461014b57806323b872dd1461015d575b5f80fd5b610112610262565b60405161011f9190610a34565b60405180910390f35b61013b610136366004610a9a565b6102f2565b604051901515815260200161011f565b6002545b60405190815260200161011f565b61013b61016b366004610ac2565b61030b565b6040516012815260200161011f565b61013b61018d366004610a9a565b61032e565b61014f6101a0366004610afb565b6001600160a01b03165f9081526020819052604090205490565b6101c261034f565b005b6101c2610362565b6005546040516001600160a01b03909116815260200161011f565b6101126103d7565b6101c26101fd366004610afb565b6103e6565b61013b610210366004610a9a565b610410565b61013b610223366004610a9a565b61048a565b60055461013b90600160a01b900460ff1681565b61014f61024a366004610b1b565b610497565b6101c261025d366004610afb565b6104c1565b60606003805461027190610b4c565b80601f016020809104026020016040519081016040528092919081815260200182805461029d90610b4c565b80156102e85780601f106102bf576101008083540402835291602001916102e8565b820191905f5260205f20905b8154815290600101906020018083116102cb57829003601f168201915b5050505050905090565b5f336102ff81858561053a565b60019150505b92915050565b5f3361031885828561065d565b6103238585856106d5565b506001949350505050565b5f336102ff8185856103408383610497565b61034a9190610b98565b61053a565b610357610890565b6103605f6108ea565b565b61036a610890565b6007546001600160a01b03166103be5760405162461bcd60e51b815260206004820152601460248201527314185a5c881859191c995cdcc81b9bdd081cd95d60621b60448201526064015b60405180910390fd5b6005805460ff60a01b1916600160a01b17905543600655565b60606004805461027190610b4c565b6103ee610890565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f338161041d8286610497565b90508381101561047d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b5565b610323828686840361053a565b5f336102ff8185856106d5565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104c9610890565b6001600160a01b03811661052e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b5565b610537816108ea565b50565b6001600160a01b03831661059c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b5565b6001600160a01b0382166105fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b5565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6106688484610497565b90505f1981146106cf57818110156106c25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103b5565b6106cf848484840361053a565b50505050565b6001600160a01b0383166106fb5760405162461bcd60e51b81526004016103b590610bab565b6001600160a01b0382166107215760405162461bcd60e51b81526004016103b590610bf0565b6005546001600160a01b0316321461088057600554600160a01b900460ff166107845760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b60448201526064016103b5565b5f606461079c69d3c21bcecceda10000006002610c33565b6107a69190610c4a565b9050600654431080156107c757506007546001600160a01b03848116911614155b156107e257620f42405a10156107de57505f6107e2565b505f195b6006546107f0906077610b98565b4310801561080c57506007546001600160a01b03848116911614155b1561087e5780610830846001600160a01b03165f9081526020819052604090205490565b61083a9084610b98565b111561087e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016103b5565b505b61088b83838361090c565b505050565b6005546001600160a01b031633146103605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166109325760405162461bcd60e51b81526004016103b590610bab565b6001600160a01b0382166109585760405162461bcd60e51b81526004016103b590610bf0565b6001600160a01b0383165f90815260208190526040902054818110156109cf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b5565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106cf565b5f6020808352835180828501525f5b81811015610a5f57858101830151858201604001528201610a43565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a95575f80fd5b919050565b5f8060408385031215610aab575f80fd5b610ab483610a7f565b946020939093013593505050565b5f805f60608486031215610ad4575f80fd5b610add84610a7f565b9250610aeb60208501610a7f565b9150604084013590509250925092565b5f60208284031215610b0b575f80fd5b610b1482610a7f565b9392505050565b5f8060408385031215610b2c575f80fd5b610b3583610a7f565b9150610b4360208401610a7f565b90509250929050565b600181811c90821680610b6057607f821691505b602082108103610b7e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561030557610305610b84565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761030557610305610b84565b5f82610c6457634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122009e7144fbd0b7b81e23f9c6fee63ab07b78f9642ec2202306b41f6b87a02792564736f6c63430008140033

Deployed ByteCode Sourcemap

27823:1669:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9742:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12102:201;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;12102:201:0;1004:187:1;10871:108:0;10959:12;;10871:108;;;1342:25:1;;;1330:2;1315:18;10871:108:0;1196:177:1;12883:261:0;;;;;;:::i;:::-;;:::i;10713:93::-;;;10796:2;1853:36:1;;1841:2;1826:18;10713:93:0;1711:184:1;13553:238:0;;;;;;:::i;:::-;;:::i;11042:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;11143:18:0;11116:7;11143:18;;;;;;;;;;;;11042:127;2987:103;;;:::i;:::-;;28302:191;;;:::i;2346:87::-;2419:6;;2346:87;;-1:-1:-1;;;;;2419:6:0;;;2237:51:1;;2225:2;2210:18;2346:87:0;2091:203:1;9961:104:0;;;:::i;28200:94::-;;;;;;:::i;:::-;;:::i;14294:436::-;;;;;;:::i;:::-;;:::i;11375:193::-;;;;;;:::i;:::-;;:::i;27972:33::-;;;;;-1:-1:-1;;;27972:33:0;;;;;;11631:151;;;;;;:::i;:::-;;:::i;3245:238::-;;;;;;:::i;:::-;;:::i;9742:100::-;9796:13;9829:5;9822:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9742:100;:::o;12102:201::-;12185:4;790:10;12241:32;790:10;12257:7;12266:6;12241:8;:32::i;:::-;12291:4;12284:11;;;12102:201;;;;;:::o;12883:261::-;12980:4;790:10;13038:38;13054:4;790:10;13069:6;13038:15;:38::i;:::-;13087:27;13097:4;13103:2;13107:6;13087:9;:27::i;:::-;-1:-1:-1;13132:4:0;;12883:261;-1:-1:-1;;;;12883:261:0:o;13553:238::-;13641:4;790:10;13697:64;790:10;13713:7;13750:10;13722:25;790:10;13713:7;13722:9;:25::i;:::-;:38;;;;:::i;:::-;13697:8;:64::i;2987:103::-;2232:13;:11;:13::i;:::-;3052:30:::1;3079:1;3052:18;:30::i;:::-;2987:103::o:0;28302:191::-;2232:13;:11;:13::i;:::-;28365:11:::1;::::0;-1:-1:-1;;;;;28365:11:0::1;28357:58;;;::::0;-1:-1:-1;;;28357:58:0;;3413:2:1;28357:58:0::1;::::0;::::1;3395:21:1::0;3452:2;3432:18;;;3425:30;-1:-1:-1;;;3471:18:1;;;3464:50;3531:18;;28357:58:0::1;;;;;;;;;28428:13;:20:::0;;-1:-1:-1;;;;28428:20:0::1;-1:-1:-1::0;;;28428:20:0::1;::::0;;28473:12:::1;28459:11;:26:::0;28302:191::o;9961:104::-;10017:13;10050:7;10043:14;;;;;:::i;28200:94::-;2232:13;:11;:13::i;:::-;28268:11:::1;:18:::0;;-1:-1:-1;;;;;;28268:18:0::1;-1:-1:-1::0;;;;;28268:18:0;;;::::1;::::0;;;::::1;::::0;;28200:94::o;14294:436::-;14387:4;790:10;14387:4;14470:25;790:10;14487:7;14470:9;:25::i;:::-;14443:52;;14534:15;14514:16;:35;;14506:85;;;;-1:-1:-1;;;14506:85:0;;3762:2:1;14506:85:0;;;3744:21:1;3801:2;3781:18;;;3774:30;3840:34;3820:18;;;3813:62;-1:-1:-1;;;3891:18:1;;;3884:35;3936:19;;14506:85:0;3560:401:1;14506:85:0;14627:60;14636:5;14643:7;14671:15;14652:16;:34;14627:8;:60::i;11375:193::-;11454:4;790:10;11510:28;790:10;11527:2;11531:6;11510:9;:28::i;11631:151::-;-1:-1:-1;;;;;11747:18:0;;;11720:7;11747:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11631:151::o;3245:238::-;2232:13;:11;:13::i;:::-;-1:-1:-1;;;;;3348:22:0;::::1;3326:110;;;::::0;-1:-1:-1;;;3326:110:0;;4168:2:1;3326:110:0::1;::::0;::::1;4150:21:1::0;4207:2;4187:18;;;4180:30;4246:34;4226:18;;;4219:62;-1:-1:-1;;;4297:18:1;;;4290:36;4343:19;;3326:110:0::1;3966:402:1::0;3326:110:0::1;3447:28;3466:8;3447:18;:28::i;:::-;3245:238:::0;:::o;18287:346::-;-1:-1:-1;;;;;18389:19:0;;18381:68;;;;-1:-1:-1;;;18381:68:0;;4575:2:1;18381:68:0;;;4557:21:1;4614:2;4594:18;;;4587:30;4653:34;4633:18;;;4626:62;-1:-1:-1;;;4704:18:1;;;4697:34;4748:19;;18381:68:0;4373:400:1;18381:68:0;-1:-1:-1;;;;;18468:21:0;;18460:68;;;;-1:-1:-1;;;18460:68:0;;4980:2:1;18460:68:0;;;4962:21:1;5019:2;4999:18;;;4992:30;5058:34;5038:18;;;5031:62;-1:-1:-1;;;5109:18:1;;;5102:32;5151:19;;18460:68:0;4778:398:1;18460:68:0;-1:-1:-1;;;;;18541:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18593:32;;1342:25:1;;;18593:32:0;;1315:18:1;18593:32:0;;;;;;;18287:346;;;:::o;18924:419::-;19025:24;19052:25;19062:5;19069:7;19052:9;:25::i;:::-;19025:52;;-1:-1:-1;;19092:16:0;:37;19088:248;;19174:6;19154:16;:26;;19146:68;;;;-1:-1:-1;;;19146:68:0;;5383:2:1;19146:68:0;;;5365:21:1;5422:2;5402:18;;;5395:30;5461:31;5441:18;;;5434:59;5510:18;;19146:68:0;5181:353:1;19146:68:0;19258:51;19267:5;19274:7;19302:6;19283:16;:25;19258:8;:51::i;:::-;19014:329;18924:419;;;:::o;28501:988::-;-1:-1:-1;;;;;28633:18:0;;28625:68;;;;-1:-1:-1;;;28625:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28712:16:0;;28704:64;;;;-1:-1:-1;;;28704:64:0;;;;;;;:::i;:::-;2419:6;;-1:-1:-1;;;;;2419:6:0;28785:9;:20;28781:655;;28830:13;;-1:-1:-1;;;28830:13:0;;;;28822:47;;;;-1:-1:-1;;;28822:47:0;;6551:2:1;28822:47:0;;;6533:21:1;6590:2;6570:18;;;6563:30;-1:-1:-1;;;6609:18:1;;;6602:51;6670:18;;28822:47:0;6349:345:1;28822:47:0;28886:17;28925:3;28906:16;27947;28921:1;28906:16;:::i;:::-;:22;;;;:::i;:::-;28886:42;;28964:11;;28949:12;:26;:47;;;;-1:-1:-1;28985:11:0;;-1:-1:-1;;;;;28979:17:0;;;28985:11;;28979:17;;28949:47;28945:242;;;29033:3;29021:9;:15;29017:155;;;-1:-1:-1;29073:1:0;29017:155;;;-1:-1:-1;;;29017:155:0;29222:11;;:17;;29236:3;29222:17;:::i;:::-;29207:12;:32;:53;;;;-1:-1:-1;29249:11:0;;-1:-1:-1;;;;;29243:17:0;;;29249:11;;29243:17;;29207:53;29203:222;;;29337:9;29320:13;29330:2;-1:-1:-1;;;;;11143:18:0;11116:7;11143:18;;;;;;;;;;;;11042:127;29320:13;29311:22;;:6;:22;:::i;:::-;:35;;29281:128;;;;-1:-1:-1;;;29281:128:0;;7296:2:1;29281:128:0;;;7278:21:1;7335:2;7315:18;;;7308:30;-1:-1:-1;;;7354:18:1;;;7347:49;7413:18;;29281:128:0;7094:343:1;29281:128:0;28807:629;28781:655;29448:33;29464:4;29470:2;29474:6;29448:15;:33::i;:::-;28501:988;;;:::o;2511:132::-;2419:6;;-1:-1:-1;;;;;2419:6:0;790:10;2575:23;2567:68;;;;-1:-1:-1;;;2567:68:0;;7644:2:1;2567:68:0;;;7626:21:1;;;7663:18;;;7656:30;7722:34;7702:18;;;7695:62;7774:18;;2567:68:0;7442:356:1;3643:197:0;3756:6;:17;;-1:-1:-1;;;;;;3756:17:0;-1:-1:-1;;;;;3756:17:0;;;;;;;;;;3643:197::o;15200:806::-;-1:-1:-1;;;;;15297:18:0;;15289:68;;;;-1:-1:-1;;;15289:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15376:16:0;;15368:64;;;;-1:-1:-1;;;15368:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15518:15:0;;15496:19;15518:15;;;;;;;;;;;15552:21;;;;15544:72;;;;-1:-1:-1;;;15544:72:0;;8005:2:1;15544:72:0;;;7987:21:1;8044:2;8024:18;;;8017:30;8083:34;8063:18;;;8056:62;-1:-1:-1;;;8134:18:1;;;8127:36;8180:19;;15544:72:0;7803:402:1;15544:72:0;-1:-1:-1;;;;;15652:15:0;;;:9;:15;;;;;;;;;;;15670:20;;;15652:38;;15870:13;;;;;;;;;;:23;;;;;;15922:26;;1342:25:1;;;15870:13:0;;15922:26;;1315:18:1;15922:26:0;;;;;;;15961:37;28501:988;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:1:o;2299:260::-;2367:6;2375;2428:2;2416:9;2407:7;2403:23;2399:32;2396:52;;;2444:1;2441;2434:12;2396:52;2467:29;2486:9;2467:29;:::i;:::-;2457:39;;2515:38;2549:2;2538:9;2534:18;2515:38;:::i;:::-;2505:48;;2299:260;;;;;:::o;2564:380::-;2643:1;2639:12;;;;2686;;;2707:61;;2761:4;2753:6;2749:17;2739:27;;2707:61;2814:2;2806:6;2803:14;2783:18;2780:38;2777:161;;2860:10;2855:3;2851:20;2848:1;2841:31;2895:4;2892:1;2885:15;2923:4;2920:1;2913:15;2777:161;;2564:380;;;:::o;2949:127::-;3010:10;3005:3;3001:20;2998:1;2991:31;3041:4;3038:1;3031:15;3065:4;3062:1;3055:15;3081:125;3146:9;;;3167:10;;;3164:36;;;3180:18;;:::i;5539:401::-;5741:2;5723:21;;;5780:2;5760:18;;;5753:30;5819:34;5814:2;5799:18;;5792:62;-1:-1:-1;;;5885:2:1;5870:18;;5863:35;5930:3;5915:19;;5539:401::o;5945:399::-;6147:2;6129:21;;;6186:2;6166:18;;;6159:30;6225:34;6220:2;6205:18;;6198:62;-1:-1:-1;;;6291:2:1;6276:18;;6269:33;6334:3;6319:19;;5945:399::o;6699:168::-;6772:9;;;6803;;6820:15;;;6814:22;;6800:37;6790:71;;6841:18;;:::i;6872:217::-;6912:1;6938;6928:132;;6982:10;6977:3;6973:20;6970:1;6963:31;7017:4;7014:1;7007:15;7045:4;7042:1;7035:15;6928:132;-1:-1:-1;7074:9:1;;6872:217::o

Swarm Source

ipfs://09e7144fbd0b7b81e23f9c6fee63ab07b78f9642ec2202306b41f6b87a027925
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.