Contract 0xdab8c8776a4041415a60ed6b339d8e667cf2a934 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd5236877b4a3abc2e2ac57de93eedea9e9c13d69928448a6b2c1a27c13a3bb8fTransfer559723772023-01-27 22:08:1111 hrs 34 mins ago0x263d802dbbc68098d8093d45de8739ab93e9866c IN  Perp Inu: PERPI Token0 ETH0.00011545
0xed616b45258fdfcb48b2d3bbcee80900b330ab632990ada763b9a196e1a920f4Approve559149412023-01-27 16:59:4916 hrs 43 mins ago0x5780c206f3863724cd2ee4ff659702624e3001ba IN  Perp Inu: PERPI Token0 ETH0.00005679
0xb8bcd22477cc1abacf3249be8bb1d2d75111209a0003f56c339bee1309f74e72Approve557763212023-01-27 5:18:141 day 4 hrs ago0x602a5d2c1c12059dabf5c7ab9b09b67f033234c2 IN  Perp Inu: PERPI Token0 ETH0.00003184
0xceafb250d9e00dd7d30e6460065b57efe3ed7b4a26d745428a72e6bdc7cb4a0bApprove557249352023-01-26 23:58:321 day 9 hrs ago0x03c280972c28a5d13831a4efcafc036f70cc3a94 IN  Perp Inu: PERPI Token0 ETH0.00005138
0x76d7db4e38a8768cfe09bbce45e2d973ef5802475110eb96f580a2c807043071Approve557013512023-01-26 21:25:431 day 12 hrs ago0xdce70d342646698199920918eae828e02ec34324 IN  Perp Inu: PERPI Token0 ETH0.00005115
0x665863a4794bd9fea54b6ff1c1354c5c4048021d3db14b003b26fd06387ff946Approve556752232023-01-26 19:08:001 day 14 hrs ago0x1996ad9971c325398fc4c9459a740cc017653dbb IN  Perp Inu: PERPI Token0 ETH0.00005162
0x39cceb408b008e7c4d3552570bc3c408af4c6155383190fe107e031d1e392305Approve556431032023-01-26 16:09:441 day 17 hrs ago0x3dd43c835ce960a127071db72e248ede0d823711 IN  Perp Inu: PERPI Token0 ETH0.00004213
0xfdef62c1d386329fb1ad5f3ae8a47715c65df7de81f27f02a845d1ca001885a3Approve556056632023-01-26 12:57:121 day 20 hrs ago0xc05ed8f3adbc1007d9d8debc21a721aa951fad50 IN  Perp Inu: PERPI Token0 ETH0.00002988
0xe28cde634569a2d8e378bb2b8603b21ac10e1733c4d76efd42d746a3c33fd702Transfer555910102023-01-26 11:32:311 day 22 hrs ago0x3168f036e8408234d7d3d9103b6b91f3176267ad IN  Perp Inu: PERPI Token0 ETH0.00002901
0xac7be29a14220be7de9a8f7463a2d7ee673c420f23b920096f6196be7e919d74Approve555773852023-01-26 10:11:211 day 23 hrs ago0x305ad938a16dcdcab5c8b8b4684258ad69d5b3f2 IN  Perp Inu: PERPI Token0 ETH0.00031814
0x71d78a80ebeffcd2f007d2e000be79b3d019f6fef56a79f27d75f2faf9fb92c0Approve555231012023-01-26 4:27:412 days 5 hrs ago0x4022a21fbd88e1a19cce4acec30f0e9d4e16069f IN  Perp Inu: PERPI Token0 ETH0.00035653
0xeff473d03d2ddbb132a3601b425056c0ce6deeee6523f384ee3b011f3f17fcf3Approve554876032023-01-26 0:57:002 days 8 hrs ago0x1e6127d4716c3ac3b3a2b005631c1c541c13d120 IN  Perp Inu: PERPI Token0 ETH0.00004675
0x135b0fb3022be933a17a624d19685735d739bb46caecd5c7d28ba3a2556072c1Approve553676532023-01-25 13:27:222 days 20 hrs ago0xa833fcdbe93bfb28d7809ae9f38e1ef4f240ca58 IN  Perp Inu: PERPI Token0 ETH0.00003189
0x07bd31d4dac50f32c27fb4bcc8009c46b2d03ff12fde48c4915973a7a29f2f32Approve553675132023-01-25 13:26:302 days 20 hrs ago0xadb0523b66b063d1039a8547548bec46e50ce36f IN  Perp Inu: PERPI Token0 ETH0.00003203
0x64fc3a9dd7aef0feb193c35d7952999e75b0d6e255d4899202788875bfb87973Approve553392832023-01-25 10:42:332 days 23 hrs ago0xf76d5f67ccca76a4b20771f7d4c978cde59a2b64 IN  Perp Inu: PERPI Token0 ETH0.00003005
0x983be4dcef61a1d65b5beeb5abfcbe57a88a03319cde5b742523e35d471e36a4Approve552961122023-01-25 5:50:253 days 3 hrs ago0xc4d8a1fe6fb7c5aa4e22fe3c0af02e15f3972734 IN  Perp Inu: PERPI Token0 ETH0.00002997
0x34cab13ad9a1cefb732c0479362aab398921c47b3a3ac516b7272cdfa2d705c0Approve552882362023-01-25 4:51:073 days 4 hrs ago0x75afbb8a087a30d9c3d04fba76b626822ed93c1c IN  Perp Inu: PERPI Token0 ETH0.00003213
0x7eea774342e5cff486b22590a80710b9b6d1fdd755ee8472d08221f34f53f141Approve552619082023-01-25 1:29:043 days 8 hrs ago0x6b40ee0a99f52bb70f0c74e09cf3618911497a9a IN  Perp Inu: PERPI Token0 ETH0.0000312
0x89bdc6ddaec963a33d0502f2131c4cfe58cafd21a8c11379e9cb3f822fd3c80fApprove552122672023-01-24 20:27:103 days 13 hrs ago0x73466b3f62abf74fb381aaa0aac7e4299e009707 IN  Perp Inu: PERPI Token0 ETH0.00003954
0x43090d383c3b12aeeff6ae4892289925afd0e87dcf044cb44bf473a28862d954Approve551738712023-01-24 16:40:403 days 17 hrs ago0xf06b40ffc8469f1dac63b9671412b093fafb1197 IN  Perp Inu: PERPI Token0 ETH0.00003472
0xbdb97e33ce2e9284963bb5f5d353e7d382e973a199417b9b4895329f34c2e8d4Approve551610282023-01-24 15:19:233 days 18 hrs ago0x89e3310ee904390cd6d10b4d785c4b5a35b7a46e IN  Perp Inu: PERPI Token0 ETH0.0000492
0xb45f3e1e34d1bbc00ff465e60940b6068672050428f8a1fdd78ef63d25ac8db9Approve551571332023-01-24 14:57:083 days 18 hrs ago0x36dc260fe7e1c681ca3ec4749ca88b8a2b688eed IN  Perp Inu: PERPI Token0 ETH0.00004195
0xe3b7627394954f0425563f670e22bde51b1e280134b06c5044dface7ab05a4aaApprove551570542023-01-24 14:56:383 days 18 hrs ago0x36dc260fe7e1c681ca3ec4749ca88b8a2b688eed IN  Perp Inu: PERPI Token0 ETH0.00004196
0xcde700771fd61ee64cc0cf518f8450f014ea839cdf2eb709d4570f257bc0dd68Approve551509722023-01-24 14:25:383 days 19 hrs ago0x4022a21fbd88e1a19cce4acec30f0e9d4e16069f IN  Perp Inu: PERPI Token0 ETH0.00003975
0xcefbf0c0b7064350408d826d84155966a6fef3ee34d05db193ef7e3140d0b97dApprove551435282023-01-24 13:44:593 days 19 hrs ago0xa7a7effdb2af2e8b68bffb9f96e883e71b411054 IN  Perp Inu: PERPI Token0 ETH0.00002894
[ Download CSV Export 

OVERVIEW

The Perp Inu toolbox is composed of tools useful for all user profiles. For developers, investors, influencers, and writers, our goal is to improve the daily use of the entire Arbitrum ecosystem.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfb6906a9198807bbdb314b8f335b4fce6c8b879f823d2c005edd53b066d6b4bd559150872023-01-27 17:00:3116 hrs 42 mins ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0xfb6906a9198807bbdb314b8f335b4fce6c8b879f823d2c005edd53b066d6b4bd559150872023-01-27 17:00:3116 hrs 42 mins ago 0x000000000022d473030f116ddee9f6b43ac78ba3 Perp Inu: PERPI Token0 ETH
0xfb6906a9198807bbdb314b8f335b4fce6c8b879f823d2c005edd53b066d6b4bd559150872023-01-27 17:00:3116 hrs 42 mins ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x50f8904baee138278c456bafcb1083601d91584df9f5f0b2e1330ec45b90a7c2557737622023-01-27 5:01:551 day 4 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x5ec7b3973ed6a2e3b676453f2a5780828647567ff5ef0cc0135f9ca3d46c0861557633222023-01-27 3:56:381 day 5 hrs ago 0x: Exchange Proxy Perp Inu: PERPI Token0 ETH
0x5ec7b3973ed6a2e3b676453f2a5780828647567ff5ef0cc0135f9ca3d46c0861557633222023-01-27 3:56:381 day 5 hrs ago 0x: Exchange Proxy Flash Wallet Perp Inu: PERPI Token0 ETH
0x5ec7b3973ed6a2e3b676453f2a5780828647567ff5ef0cc0135f9ca3d46c0861557633222023-01-27 3:56:381 day 5 hrs ago 0x: Exchange Proxy Perp Inu: PERPI Token0 ETH
0x5ec7b3973ed6a2e3b676453f2a5780828647567ff5ef0cc0135f9ca3d46c0861557633222023-01-27 3:56:381 day 5 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x5ec7b3973ed6a2e3b676453f2a5780828647567ff5ef0cc0135f9ca3d46c0861557633222023-01-27 3:56:381 day 5 hrs ago 0x: Exchange Proxy Perp Inu: PERPI Token0 ETH
0x6cde0c1bfc1ad0111b72b79c237dcdb74b436e5f7d4b984cf398f9497e21459b557342492023-01-27 1:01:441 day 8 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x6cde0c1bfc1ad0111b72b79c237dcdb74b436e5f7d4b984cf398f9497e21459b557342492023-01-27 1:01:441 day 8 hrs ago 0x000000000022d473030f116ddee9f6b43ac78ba3 Perp Inu: PERPI Token0 ETH
0x6cde0c1bfc1ad0111b72b79c237dcdb74b436e5f7d4b984cf398f9497e21459b557342492023-01-27 1:01:441 day 8 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0xa73b2ce445426884c661d4986e8fe8d2ac0971c008c715dcaf4e917742853d37557303602023-01-27 0:35:031 day 9 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0xa73b2ce445426884c661d4986e8fe8d2ac0971c008c715dcaf4e917742853d37557303602023-01-27 0:35:031 day 9 hrs ago 0x000000000022d473030f116ddee9f6b43ac78ba3 Perp Inu: PERPI Token0 ETH
0xa73b2ce445426884c661d4986e8fe8d2ac0971c008c715dcaf4e917742853d37557303602023-01-27 0:35:031 day 9 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x9834e4818e1594cb73983855a07e818d32a448605f31b57c5ab1bc6b69ff50c4557249672023-01-26 23:58:461 day 9 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x9834e4818e1594cb73983855a07e818d32a448605f31b57c5ab1bc6b69ff50c4557249672023-01-26 23:58:461 day 9 hrs ago 0x000000000022d473030f116ddee9f6b43ac78ba3 Perp Inu: PERPI Token0 ETH
0x9834e4818e1594cb73983855a07e818d32a448605f31b57c5ab1bc6b69ff50c4557249672023-01-26 23:58:461 day 9 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0xf83c03d70f2aa7b9c89c81cdc372e494a32287e62104ba9721e4eb789f0e0c62557103822023-01-26 22:20:471 day 11 hrs ago 0x051081f18611c5de462464dd96fe1d2f4ee2a50b Perp Inu: PERPI Token0 ETH
0x20d3de99a74b47e3f9dd029b4995e893b0a86ebc457aa933aacbac72a4f84f62557013952023-01-26 21:26:001 day 12 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x20d3de99a74b47e3f9dd029b4995e893b0a86ebc457aa933aacbac72a4f84f62557013952023-01-26 21:26:001 day 12 hrs ago 0x000000000022d473030f116ddee9f6b43ac78ba3 Perp Inu: PERPI Token0 ETH
0x20d3de99a74b47e3f9dd029b4995e893b0a86ebc457aa933aacbac72a4f84f62557013952023-01-26 21:26:001 day 12 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0xdd7f6d50563b425c1e5f6bcf8cce727f93fc96cc3bff2037fe54eeca52237fc2557008852023-01-26 21:23:151 day 12 hrs ago 0x051081f18611c5de462464dd96fe1d2f4ee2a50b Perp Inu: PERPI Token0 ETH
0x389a01e95006a026de8b665eff74e82e1837f277be61343fa02aafe777158ab6556754382023-01-26 19:09:041 day 14 hrs ago 0x9bff07b3cfb4b1343f289b41b3f4e4ea1ffe0872 Perp Inu: PERPI Token0 ETH
0x389a01e95006a026de8b665eff74e82e1837f277be61343fa02aafe777158ab6556754382023-01-26 19:09:041 day 14 hrs ago 0x000000000022d473030f116ddee9f6b43ac78ba3 Perp Inu: PERPI Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PerpInu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

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

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

File 2 of 6 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 value {ERC20} uses, unless this function is
     * 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;
        }
        _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;
        _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;
        }
        _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 3 of 6 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @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 4 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface 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 5 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 6 of 6 : PerpInu.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.4;

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

contract PerpInu is ERC20, Ownable {
    constructor() ERC20("Perp Inu", "PERPI") {
        _mint(msg.sender, 1_000_000 * 10 ** 18);
    }
}

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

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":[{"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":[],"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":[{"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"}]

60806040523480156200001157600080fd5b5060408051808201825260088152675065727020496e7560c01b602080830191825283518085019094526005845264504552504960d81b9084015281519192916200005f91600391620001ec565b50805162000075906004906020840190620001ec565b505050620000926200008c620000ae60201b60201c565b620000b2565b620000a83369d3c21bcecceda100000062000104565b620002f4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200015f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806002600082825462000173919062000292565b90915550506001600160a01b03821660009081526020819052604081208054839290620001a290849062000292565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620001fa90620002b7565b90600052602060002090601f0160209004810192826200021e576000855562000269565b82601f106200023957805160ff191683800117855562000269565b8280016001018555821562000269579182015b82811115620002695782518255916020019190600101906200024c565b50620002779291506200027b565b5090565b5b808211156200027757600081556001016200027c565b60008219821115620002b257634e487b7160e01b81526011600452602481fd5b500190565b600181811c90821680620002cc57607f821691505b60208210811415620002ee57634e487b7160e01b600052602260045260246000fd5b50919050565b610a3180620003046000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d7146101cd578063a9059cbb146101e0578063dd62ed3e146101f3578063f2fde38b1461020657600080fd5b8063715018a6146101a05780638da5cb5b146101aa57806395d89b41146101c557600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce56714610155578063395093511461016457806370a082311461017757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610219565b6040516101049190610949565b60405180910390f35b61012061011b366004610920565b6102ab565b6040519015158152602001610104565b6002545b604051908152602001610104565b6101206101503660046108e5565b6102c3565b60405160128152602001610104565b610120610172366004610920565b6102e7565b610134610185366004610892565b6001600160a01b031660009081526020819052604090205490565b6101a8610309565b005b6005546040516001600160a01b039091168152602001610104565b6100f761031d565b6101206101db366004610920565b61032c565b6101206101ee366004610920565b6103ac565b6101346102013660046108b3565b6103ba565b6101a8610214366004610892565b6103e5565b606060038054610228906109c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610254906109c0565b80156102a15780601f10610276576101008083540402835291602001916102a1565b820191906000526020600020905b81548152906001019060200180831161028457829003601f168201915b5050505050905090565b6000336102b981858561045e565b5060019392505050565b6000336102d1858285610582565b6102dc8585856105fc565b506001949350505050565b6000336102b98185856102fa83836103ba565b610304919061099c565b61045e565b6103116107ca565b61031b6000610824565b565b606060048054610228906109c0565b6000338161033a82866103ba565b90508381101561039f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102dc828686840361045e565b6000336102b98185856105fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6103ed6107ca565b6001600160a01b0381166104525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610396565b61045b81610824565b50565b6001600160a01b0383166104c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610396565b6001600160a01b0382166105215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610396565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061058e84846103ba565b905060001981146105f657818110156105e95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610396565b6105f6848484840361045e565b50505050565b6001600160a01b0383166106605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610396565b6001600160a01b0382166106c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610396565b6001600160a01b0383166000908152602081905260409020548181101561073a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610396565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061077190849061099c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107bd91815260200190565b60405180910390a36105f6565b6005546001600160a01b0316331461031b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610396565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80356001600160a01b038116811461088d57600080fd5b919050565b6000602082840312156108a3578081fd5b6108ac82610876565b9392505050565b600080604083850312156108c5578081fd5b6108ce83610876565b91506108dc60208401610876565b90509250929050565b6000806000606084860312156108f9578081fd5b61090284610876565b925061091060208501610876565b9150604084013590509250925092565b60008060408385031215610932578182fd5b61093b83610876565b946020939093013593505050565b6000602080835283518082850152825b8181101561097557858101830151858201604001528201610959565b818111156109865783604083870101525b50601f01601f1916929092016040019392505050565b600082198211156109bb57634e487b7160e01b81526011600452602481fd5b500190565b600181811c908216806109d457607f821691505b602082108114156109f557634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212206075be8f018a8d18b6e0854a2e25e834e864d347398dd15184c1d60c811057e964736f6c63430008040033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.