Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
69,420,069,420 FLUNKLE
Holders
37
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000105 FLUNKLEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Flunkle
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 420 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.22; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } /** * @title Flunkle * @notice Flunkle token contract * @notice This contract is a gas-optimized ERC20 + EIP-2612 */ contract Flunkle is ERC20 { constructor() ERC20("Flunkle", "FLUNKLE", 18) { _mint(msg.sender, 69_420_069_420 ether); } }
{ "optimizer": { "enabled": true, "runs": 420 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"amount","type":"uint256"}],"name":"Approval","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","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"}]
Contract Creation Code
60e060405234801562000010575f80fd5b5060405180604001604052806007815260200166466c756e6b6c6560c81b81525060405180604001604052806007815260200166464c554e4b4c4560c81b8152506012825f908162000063919062000251565b50600162000072838262000251565b5060ff81166080524660a05262000088620000ae565b60c05250620000a891503390506be04eef7ff6825b5a4d30000062000148565b620003bd565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f604051620000e091906200031d565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546200015b919062000397565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620001dc57607f821691505b602082108103620001fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200024c57805f5260205f20601f840160051c81016020851015620002285750805b601f840160051c820191505b8181101562000249575f815560010162000234565b50505b505050565b81516001600160401b038111156200026d576200026d620001b3565b62000285816200027e8454620001c7565b8462000201565b602080601f831160018114620002bb575f8415620002a35750858301515b5f19600386901b1c1916600185901b17855562000315565b5f85815260208120601f198616915b82811015620002eb57888601518255948401946001909101908401620002ca565b50858210156200030957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8083546200032c81620001c7565b600182811680156200034757600181146200035d576200038b565b60ff19841687528215158302870194506200038b565b875f526020805f205f5b85811015620003825781548a82015290840190820162000367565b50505082870194505b50929695505050505050565b80820180821115620003b757634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c051610aa3620003e85f395f61046501525f61043001525f6101750152610aa35ff3fe608060405234801561000f575f80fd5b50600436106100da575f3560e01c80633644e5151161008857806395d89b411161006357806395d89b41146101ef578063a9059cbb146101f7578063d505accf1461020a578063dd62ed3e1461021f575f80fd5b80633644e515146101a957806370a08231146101b15780637ecebe00146101d0575f80fd5b806323b872dd116100b857806323b872dd1461013657806330adf81f14610149578063313ce56714610170575f80fd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f80fd5b6100e6610249565b6040516100f391906107f2565b60405180910390f35b61010f61010a366004610859565b6102d4565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610881565b610340565b6101287f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6101977f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f3565b61012861042d565b6101286101bf3660046108ba565b60036020525f908152604090205481565b6101286101de3660046108ba565b60056020525f908152604090205481565b6100e6610487565b61010f610205366004610859565b610494565b61021d6102183660046108da565b61050a565b005b61012861022d366004610947565b600460209081525f928352604080842090915290825290205481565b5f805461025590610978565b80601f016020809104026020016040519081016040528092919081815260200182805461028190610978565b80156102cc5780601f106102a3576101008083540402835291602001916102cc565b820191905f5260205f20905b8154815290600101906020018083116102af57829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061032e9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146103995761037583826109b0565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f90815260036020526040812080548592906103c09084906109b0565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061041a9087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146104625761045d61075a565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461025590610978565b335f908152600360205260408120805483919083906104b49084906109b0565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061032e9086815260200190565b4284101561055f5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f61056861042d565b6001600160a01b038981165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f80855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa15801561067d573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906106b35750886001600160a01b0316816001600160a01b0316145b6106f05760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610556565b6001600160a01b039081165f9081526004602090815260408083208b8516808552908352928190208a905551898152919350918a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161078a91906109cf565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f602080835283518060208501525f5b8181101561081e57858101830151858201604001528201610802565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610854575f80fd5b919050565b5f806040838503121561086a575f80fd5b6108738361083e565b946020939093013593505050565b5f805f60608486031215610893575f80fd5b61089c8461083e565b92506108aa6020850161083e565b9150604084013590509250925092565b5f602082840312156108ca575f80fd5b6108d38261083e565b9392505050565b5f805f805f805f60e0888a0312156108f0575f80fd5b6108f98861083e565b96506109076020890161083e565b95506040880135945060608801359350608088013560ff8116811461092a575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610958575f80fd5b6109618361083e565b915061096f6020840161083e565b90509250929050565b600181811c9082168061098c57607f821691505b6020821081036109aa57634e487b7160e01b5f52602260045260245ffd5b50919050565b8181038181111561033a57634e487b7160e01b5f52601160045260245ffd5b5f8083545f60018260011c915060018316806109ec57607f831692505b60208084108203610a0b57634e487b7160e01b5f52602260045260245ffd5b818015610a1f5760018114610a3457610a5f565b60ff1986168952841515850289019650610a5f565b5f8a8152602090205f5b86811015610a575781548b820152908501908301610a3e565b505084890196505b50949897505050505050505056fea2646970667358221220a97d0b99f6747b35e6ddd9a1098083108799bd0cf604ef4c5f6ec3bd8726368864736f6c63430008160033
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100da575f3560e01c80633644e5151161008857806395d89b411161006357806395d89b41146101ef578063a9059cbb146101f7578063d505accf1461020a578063dd62ed3e1461021f575f80fd5b80633644e515146101a957806370a08231146101b15780637ecebe00146101d0575f80fd5b806323b872dd116100b857806323b872dd1461013657806330adf81f14610149578063313ce56714610170575f80fd5b806306fdde03146100de578063095ea7b3146100fc57806318160ddd1461011f575b5f80fd5b6100e6610249565b6040516100f391906107f2565b60405180910390f35b61010f61010a366004610859565b6102d4565b60405190151581526020016100f3565b61012860025481565b6040519081526020016100f3565b61010f610144366004610881565b610340565b6101287f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6101977f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016100f3565b61012861042d565b6101286101bf3660046108ba565b60036020525f908152604090205481565b6101286101de3660046108ba565b60056020525f908152604090205481565b6100e6610487565b61010f610205366004610859565b610494565b61021d6102183660046108da565b61050a565b005b61012861022d366004610947565b600460209081525f928352604080842090915290825290205481565b5f805461025590610978565b80601f016020809104026020016040519081016040528092919081815260200182805461028190610978565b80156102cc5780601f106102a3576101008083540402835291602001916102cc565b820191905f5260205f20905b8154815290600101906020018083116102af57829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061032e9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146103995761037583826109b0565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f90815260036020526040812080548592906103c09084906109b0565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061041a9087815260200190565b60405180910390a3506001949350505050565b5f7f000000000000000000000000000000000000000000000000000000000000000146146104625761045d61075a565b905090565b507f35985fb026ddae21e6064fac5f8adade9d4b49c343c5e26e47e2fabf7b3befcc90565b6001805461025590610978565b335f908152600360205260408120805483919083906104b49084906109b0565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061032e9086815260200190565b4284101561055f5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f61056861042d565b6001600160a01b038981165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f80855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa15801561067d573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906106b35750886001600160a01b0316816001600160a01b0316145b6106f05760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610556565b6001600160a01b039081165f9081526004602090815260408083208b8516808552908352928190208a905551898152919350918a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161078a91906109cf565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f602080835283518060208501525f5b8181101561081e57858101830151858201604001528201610802565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610854575f80fd5b919050565b5f806040838503121561086a575f80fd5b6108738361083e565b946020939093013593505050565b5f805f60608486031215610893575f80fd5b61089c8461083e565b92506108aa6020850161083e565b9150604084013590509250925092565b5f602082840312156108ca575f80fd5b6108d38261083e565b9392505050565b5f805f805f805f60e0888a0312156108f0575f80fd5b6108f98861083e565b96506109076020890161083e565b95506040880135945060608801359350608088013560ff8116811461092a575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610958575f80fd5b6109618361083e565b915061096f6020840161083e565b90509250929050565b600181811c9082168061098c57607f821691505b6020821081036109aa57634e487b7160e01b5f52602260045260245ffd5b50919050565b8181038181111561033a57634e487b7160e01b5f52601160045260245ffd5b5f8083545f60018260011c915060018316806109ec57607f831692505b60208084108203610a0b57634e487b7160e01b5f52602260045260245ffd5b818015610a1f5760018114610a3457610a5f565b60ff1986168952841515850289019650610a5f565b5f8a8152602090205f5b86811015610a575781548b820152908501908301610a3e565b505084890196505b50949897505050505050505056fea2646970667358221220a97d0b99f6747b35e6ddd9a1098083108799bd0cf604ef4c5f6ec3bd8726368864736f6c63430008160033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.