Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0xBfC3dBb94a344a5b234B3F08d80a68e09f1F248c
Balance 0 ETH
Nonce 1
Code Size 6913 bytes
Indexed Transactions 0 (1 on-chain, 1.6% indexed)
External Etherscan · Sourcify

Contract Bytecode

6913 bytes
Copy Bytecode
0x6080604052600436106101d15760003560e01c80634d78fdc6116100f7578063a457c2d711610095578063bea9849e11610064578063bea9849e14610537578063d322157614610557578063dd62ed3e14610577578063f2fde38b1461059757600080fd5b8063a457c2d7146104b1578063a9059cbb146104d1578063aa4bde28146104f1578063b62496f51461050757600080fd5b8063781edb3c116100d1578063781edb3c1461043e5780637c0a893d1461045e5780638da5cb5b1461047e57806395d89b411461049c57600080fd5b80634d78fdc6146103d357806370a08231146103f3578063715018a61461042957600080fd5b806323b872dd1161016f57806334cf1fea1161013e57806334cf1fea14610354578063378dc3dc14610369578063395093511461037f57806349bd5a5e1461039f57600080fd5b806323b872dd146102e357806327a14fc2146103035780632cc25d1414610323578063313ce5671461033857600080fd5b8063098df585116101ab578063098df585146102555780630bd05b69146102775780631694505e1461028c57806318160ddd146102c457600080fd5b8063064a59d0146101dd57806306fdde0314610213578063095ea7b31461023557600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b506006546101fe90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561021f57600080fd5b506102286105b7565b60405161020a91906117d9565b34801561024157600080fd5b506101fe61025036600461183f565b610649565b34801561026157600080fd5b5061027561027036600461186b565b610663565b005b34801561028357600080fd5b5061027561080b565b34801561029857600080fd5b506006546102ac906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102d057600080fd5b506003545b60405190815260200161020a565b3480156102ef57600080fd5b506101fe6102fe366004611884565b61088b565b34801561030f57600080fd5b5061027561031e36600461186b565b6108af565b34801561032f57600080fd5b50610275610977565b34801561034457600080fd5b506040516012815260200161020a565b34801561036057600080fd5b50610275610b3f565b34801561037557600080fd5b506102d560075481565b34801561038b57600080fd5b506101fe61039a36600461183f565b610ba6565b3480156103ab57600080fd5b506102ac7f000000000000000000000000a6eb1299b2eb7ff9541c9fe8ebef5c83f393f03a81565b3480156103df57600080fd5b506102756103ee3660046118c5565b610bc8565b3480156103ff57600080fd5b506102d561040e3660046118c5565b6001600160a01b031660009081526001602052604090205490565b34801561043557600080fd5b50610275610ca7565b34801561044a57600080fd5b506102756104593660046118f7565b610d1b565b34801561046a57600080fd5b506102756104793660046118c5565b610e2e565b34801561048a57600080fd5b506000546001600160a01b03166102ac565b3480156104a857600080fd5b50610228610f13565b3480156104bd57600080fd5b506101fe6104cc36600461183f565b610f22565b3480156104dd57600080fd5b506101fe6104ec36600461183f565b610f9d565b3480156104fd57600080fd5b506102d560085481565b34801561051357600080fd5b506101fe6105223660046118c5565b600e6020526000908152604090205460ff1681565b34801561054357600080fd5b506102756105523660046118c5565b610fab565b34801561056357600080fd5b506102756105723660046118f7565b6110a2565b34801561058357600080fd5b506102d5610592366004611930565b611124565b3480156105a357600080fd5b506102756105b23660046118c5565b61114f565b6060600480546105c69061195e565b80601f01602080910402602001604051908101604052809291908181526020018280546105f29061195e565b801561063f5780601f106106145761010080835404028352916020019161063f565b820191906000526020600020905b81548152906001019060200180831161062257829003601f168201915b5050505050905090565b600033610657818585611239565b60019150505b92915050565b6000546001600160a01b031633146106965760405162461bcd60e51b815260040161068d90611998565b60405180910390fd5b478111156106fb5760405162461bcd60e51b815260206004820152602c60248201527f4e6572643a2043616e6e6f742073656e64206d6f7265207468616e20636f6e7460448201526b726163742062616c616e636560a01b606482015260840161068d565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610748576040519150601f19603f3d011682016040523d82523d6000602084013e61074d565b606091505b50509050801561080757600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156107c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e491906119cd565b604080516001600160a01b03909216825260208201859052015b60405180910390a15b5050565b6000546001600160a01b031633146108355760405162461bcd60e51b815260040161068d90611998565b6006805460ff60a01b1916600160a01b179055600a5460000361085b5743600a55426009555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b60003361089985828561135d565b6108a48585856113d7565b506001949350505050565b6000546001600160a01b031633146108d95760405162461bcd60e51b815260040161068d90611998565b60085481036109445760405162461bcd60e51b815260206004820152603160248201527f4e6572643a2043616e6e6f7420757064617465206d617857616c6c6574416d6f604482015270756e7420746f2073616d652076616c756560781b606482015260840161068d565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b031633146109a15760405162461bcd60e51b815260040161068d90611998565b6000600954116109f35760405162461bcd60e51b815260206004820152601f60248201527f4e6572643a204c61756e6368206d7573742068617665206f6363757272656400604482015260640161068d565b6005600a5443610a039190611a00565b11610a6c5760405162461bcd60e51b815260206004820152603360248201527f4e6572643a204f6e6c7920636c61696d206c61756e636820746f6b656e73206160448201527266746572206669727374203520626c6f636b7360681b606482015260840161068d565b30600081815260016020526040812054815490929063a9059cbb906001600160a01b03166040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b019190611a13565b905080156108075760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d91016107fe565b6000546001600160a01b03163314610b695760405162461bcd60e51b815260040161068d90611998565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b600033610657818585610bb98383611124565b610bc39190611a30565b611239565b6000546001600160a01b03163314610bf25760405162461bcd60e51b815260040161068d90611998565b6001600160a01b0381166000908152600b602052604090205460ff16610c5a5760405162461bcd60e51b815260206004820152601c60248201527f4e6572643a204163636f756e74206973206e6f7420626c6f636b656400000000604482015260640161068d565b6001600160a01b0381166000818152600b6020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b03163314610cd15760405162461bcd60e51b815260040161068d90611998565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610d455760405162461bcd60e51b815260040161068d90611998565b6001600160a01b0382166000908152600d602052604090205481151560ff909116151503610dce5760405162461bcd60e51b815260206004820152603060248201527f4e6572643a204163636f756e7420697320616c7265616479207468652076616c60448201526f7565206f6620276578636c756465642760801b606482015260840161068d565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b03163314610e585760405162461bcd60e51b815260040161068d90611998565b6001600160a01b0381166000908152600b602052604090205460ff1615610ec15760405162461bcd60e51b815260206004820181905260248201527f4e6572643a204163636f756e7420697320616c726561647920626c6f636b6564604482015260640161068d565b6001600160a01b0381166000818152600b6020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6060600580546105c69061195e565b60003381610f308286611124565b905083811015610f905760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161068d565b6108a48286868403611239565b6000336106578185856113d7565b6000546001600160a01b03163314610fd55760405162461bcd60e51b815260040161068d90611998565b6006546001600160a01b03908116908216036110455760405162461bcd60e51b815260206004820152602960248201527f4e6572643a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b606482015260840161068d565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110cc5760405162461bcd60e51b815260040161068d90611998565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610e22565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b031633146111795760405162461bcd60e51b815260040161068d90611998565b6001600160a01b0381166111de5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661129b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161068d565b6001600160a01b0382166112fc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161068d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006113698484611124565b905060001981146113d157818110156113c45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161068d565b6113d18484848403611239565b50505050565b6001600160a01b0383166113fd5760405162461bcd60e51b815260040161068d90611a43565b6001600160a01b0382166114235760405162461bcd60e51b815260040161068d90611a88565b8060000361143c57611437838360006116a8565b505050565b6001600160a01b0383166000908152600c602052604090205460ff1615801561147e57506001600160a01b0382166000908152600c602052604090205460ff16155b1561167157600654600160a01b900460ff166114e85760405162461bcd60e51b8152602060048201526024808201527f4e6572643a2054726164696e672069732063757272656e746c792064697361626044820152633632b21760e11b606482015260840161068d565b6001600160a01b0382166000908152600b602052604090205460ff161561154c5760405162461bcd60e51b815260206004820152601860248201527713995c990e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b604482015260640161068d565b6001600160a01b0383166000908152600b602052604090205460ff16156115b05760405162461bcd60e51b815260206004820152601860248201527713995c990e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b604482015260640161068d565b6001600160a01b0382166000908152600d602052604090205460ff1661167157600854816115f3846001600160a01b031660009081526001602052604090205490565b6115fd9190611a30565b11156116715760405162461bcd60e51b815260206004820152603960248201527f4e6572643a2045787065637465642077616c6c657420616d6f756e742065786360448201527f6565647320746865206d617857616c6c6574416d6f756e742e00000000000000606482015260840161068d565b600060095411801561169157506005600a544361168e9190611a00565b11155b156116a1576114378330836116a8565b6114378383835b6001600160a01b0383166116ce5760405162461bcd60e51b815260040161068d90611a43565b6001600160a01b0382166116f45760405162461bcd60e51b815260040161068d90611a88565b6001600160a01b0383166000908152600160205260409020548181101561176c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161068d565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117cc9086815260200190565b60405180910390a36113d1565b600060208083528351808285015260005b81811015611806578581018301518582016040015282016117ea565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461183c57600080fd5b50565b6000806040838503121561185257600080fd5b823561185d81611827565b946020939093013593505050565b60006020828403121561187d57600080fd5b5035919050565b60008060006060848603121561189957600080fd5b83356118a481611827565b925060208401356118b481611827565b929592945050506040919091013590565b6000602082840312156118d757600080fd5b81356118e281611827565b9392505050565b801515811461183c57600080fd5b6000806040838503121561190a57600080fd5b823561191581611827565b91506020830135611925816118e9565b809150509250929050565b6000806040838503121561194357600080fd5b823561194e81611827565b9150602083013561192581611827565b600181811c9082168061197257607f821691505b60208210810361199257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156119df57600080fd5b81516118e281611827565b634e487b7160e01b600052601160045260246000fd5b8181038181111561065d5761065d6119ea565b600060208284031215611a2557600080fd5b81516118e2816118e9565b8082018082111561065d5761065d6119ea565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b60608201526080019056fea2646970667358221220124c1927ff4a075bea2fea8bfe1248006aaa73c0f295dece7ce894db212bcd6364736f6c63430008130033

Verified Source Code Partial Match

Compiler: v0.8.19+commit.7dd6d404 EVM: paris Optimization: Yes (200 runs)
NERDToken.sol 577 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

library Address {
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

	function sendValue(address payable recipient, uint256 amount) internal {
		require(
			address(this).balance >= amount,
			"Address: insufficient balance"
		);

		(bool success, ) = recipient.call{value: amount}("");
		require(
			success,
			"Address: unable to send value, recipient may have reverted"
		);
	}

	function functionCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return functionCall(target, data, "Address: low-level call failed");
	}

	function functionCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value
	) internal returns (bytes memory) {
		return
		functionCallWithValue(
			target,
			data,
			value,
			"Address: low-level call with value failed"
		);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(
			address(this).balance >= value,
			"Address: insufficient balance for call"
		);
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(
		data
		);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionStaticCall(address target, bytes memory data)
	internal
	view
	returns (bytes memory)
	{
		return
		functionStaticCall(
			target,
			data,
			"Address: low-level static call failed"
		);
	}

	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionDelegateCall(address target, bytes memory data)
	internal
	returns (bytes memory)
	{
		return
		functionDelegateCall(
			target,
			data,
			"Address: low-level delegate call failed"
		);
	}

	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

   function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }


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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

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

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

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract NERDToken is Ownable, ERC20 {
    using Address for address;

    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "NERD Token";
    string private constant _symbol = "NERD";

    bool public isTradingEnabled;

    uint256 public initialSupply = 420690000000000 * (10**18);

    uint256 public maxWalletAmount = initialSupply * 150 / 10000;

    uint256 private _launchStartTimestamp;
    uint256 private _launchBlockNumber;

    mapping (address => bool) private _isBlocked;
    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
    event BlockedAccountChange(address indexed holder, bool indexed status);
    event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
    event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event ClaimOverflow(address token, uint256 amount);
    event TradingStatusChange(bool indexed newValue, bool indexed oldValue);

    constructor() ERC20(_name, _symbol) {
        IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isAllowedToTradeWhenDisabled[address(this)] = true;

        _isBlocked[address(0xae2Fc483527B8EF99EB5D9B44875F005ba1FaE13)] = true;
        _isBlocked[address(0x758E8229Dd38cF11fA9E7c0D5f790b4CA16b3B16)] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;

        _mint(owner(), initialSupply);
    }

    receive() external payable {}

    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
        if(_launchBlockNumber == 0) {
            _launchBlockNumber = block.number;
            _launchStartTimestamp = block.timestamp;
        }
        emit TradingStatusChange(true, false);
    }
    function deactivateTrading() external onlyOwner {
        isTradingEnabled = false;
        emit TradingStatusChange(false, true);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value,"Nerd: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }
    function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }
    function blockAccount(address account) external onlyOwner {
        require(!_isBlocked[account], "Nerd: Account is already blocked");
        _isBlocked[account] = true;
        emit BlockedAccountChange(account, true);
    }
    function unblockAccount(address account) external onlyOwner {
        require(_isBlocked[account], "Nerd: Account is not blocked");
        _isBlocked[account] = false;
        emit BlockedAccountChange(account, false);
    }
    function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxWalletLimit[account] != excluded,"Nerd: Account is already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }
    function setUniswapRouter(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router),"Nerd: The router already has that address");
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
    }
    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount,"Nerd: Cannot update maxWalletAmount to same value");
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }
    function claimLaunchTokens() external onlyOwner {
		require(_launchStartTimestamp > 0, "Nerd: Launch must have occurred");
		require(block.number - _launchBlockNumber > 5, "Nerd: Only claim launch tokens after first 5 blocks");
		uint256 tokenBalance = balanceOf(address(this));
        (bool success) = IERC20(address(this)).transfer(owner(), tokenBalance);
        if (success){
            emit ClaimOverflow(address(this), tokenBalance);
        }
    }
    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(amount <= address(this).balance, "Nerd: Cannot send more than contract balance");
        (bool success, ) = address(owner()).call{ value: amount }("");
        if (success) {
            emit ClaimOverflow(uniswapV2Router.WETH(), amount);
        }
    }
    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 (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
            require(isTradingEnabled, "Nerd: Trading is currently disabled.");
            require(!_isBlocked[to], "Nerd: Account is blocked");
            require(!_isBlocked[from], "Nerd: Account is blocked");
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require((balanceOf(to) + amount) <= maxWalletAmount, "Nerd: Expected wallet amount exceeds the maxWalletAmount.");
            }
        }

        if (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) {
            super._transfer(from, address(this), amount);
        } else {
            super._transfer(from, to, amount);
        }
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
initialSupply 0x378dc3dc → uint256
isTradingEnabled 0x064a59d0 → bool
maxWalletAmount 0xaa4bde28 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address

Write Contract 17 functions

These functions modify contract state and require a wallet transaction to execute.

activateTrading 0x0bd05b69
No parameters
allowTradingWhenDisabled 0xd3221576
address account
bool allowed
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
blockAccount 0x7c0a893d
address account
claimETHOverflow 0x098df585
uint256 amount
claimLaunchTokens 0x2cc25d14
No parameters
deactivateTrading 0x34cf1fea
No parameters
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
excludeFromMaxWalletLimit 0x781edb3c
address account
bool excluded
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
setMaxWalletAmount 0x27a14fc2
uint256 newValue
setUniswapRouter 0xbea9849e
address newAddress
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
unblockAccount 0x4d78fdc6
address account

Recent Transactions

This address has 1 on-chain transactions, but only 1.6% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →