Address Contract Partially Verified
Address
0x9a4734c7D30a13A5Ed1052276bc46a584556Cd5b
Balance
0 ETH
Nonce
1
Code Size
4115 bytes
Creator
0xe268e5E2...9b16 at tx 0x8d978e4a...517ec0
Indexed Transactions
0
Contract Bytecode
4115 bytes
0x60806040526004361061011e575f3560e01c80638da5cb5b1161009d578063bbc0c74211610062578063bbc0c7421461032f578063c969943e1461034f578063dd62ed3e1461036f578063f2fde38b146103b3578063f887ea40146103d2575f5ffd5b80638da5cb5b1461028657806395d89b41146102a5578063a8aa1b31146102b9578063a9059cbb146102dd578063ad5c4648146102fc575f5ffd5b8063313ce567116100e3578063313ce567146101e857806342966c681461020957806370a082311461022a578063715018a61461025e5780638a8c523c14610272575f5ffd5b806303fd2a451461012957806306fdde031461015b578063095ea7b31461017c57806318160ddd146101ab57806323b872dd146101c9575f5ffd5b3661012557005b5f5ffd5b348015610134575f5ffd5b5061013e61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610166575f5ffd5b5061016f6103f9565b6040516101529190610dfc565b348015610187575f5ffd5b5061019b610196366004610e45565b610489565b6040519015158152602001610152565b3480156101b6575f5ffd5b506002545b604051908152602001610152565b3480156101d4575f5ffd5b5061019b6101e3366004610e6f565b61049f565b3480156101f3575f5ffd5b5060065460405160ff9091168152602001610152565b348015610214575f5ffd5b50610228610223366004610ead565b61053a565b005b348015610235575f5ffd5b506101bb610244366004610ec4565b6001600160a01b03165f9081526020819052604090205490565b348015610269575f5ffd5b50610228610547565b34801561027d575f5ffd5b506102286105ba565b348015610291575f5ffd5b5060035461013e906001600160a01b031681565b3480156102b0575f5ffd5b5061016f61098f565b3480156102c4575f5ffd5b5060065461013e9061010090046001600160a01b031681565b3480156102e8575f5ffd5b5061019b6102f7366004610e45565b61099e565b348015610307575f5ffd5b5061013e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561033a575f5ffd5b5060065461019b90600160a81b900460ff1681565b34801561035a575f5ffd5b506101bb6c064f964e68233a76f52000000081565b34801561037a575f5ffd5b506101bb610389366004610ee6565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156103be575f5ffd5b506102286103cd366004610ec4565b6109aa565b3480156103dd575f5ffd5b5061013e737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60606004805461040890610f1d565b80601f016020809104026020016040519081016040528092919081815260200182805461043490610f1d565b801561047f5780601f106104565761010080835404028352916020019161047f565b820191905f5260205f20905b81548152906001019060200180831161046257829003601f168201915b5050505050905090565b5f610495338484610a6e565b5060015b92915050565b6001600160a01b0383165f908152600160209081526040808320338452909152812054828110156105175760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6105248533858403610a6e565b61052f858585610b2e565b506001949350505050565b6105443382610ba1565b50565b6003546001600160a01b031633146105715760405162461bcd60e51b815260040161050e90610f55565b6003546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b6003546001600160a01b031633146105e45760405162461bcd60e51b815260040161050e90610f55565b600654600160a81b900460ff161561062f5760405162461bcd60e51b815260206004820152600e60248201526d416c72656164792061637469766560901b604482015260640161050e565b305f9081526020819052604090205447811580159061064d57505f81115b61068d5760405162461bcd60e51b815260206004820152601160248201527009ccacac840e8ded6cadce6404c408aa89607b1b604482015260640161050e565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107029190610f78565b60405163e6a4390560e01b81523060048201526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2811660248301529192505f9183169063e6a4390590604401602060405180830381865afa158015610771573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107959190610f78565b90506001600160a01b038116610837576040516364e329cb60e11b81523060048201526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28116602483015283169063c9c65396906044016020604051808303815f875af1158015610810573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108349190610f78565b90505b60068054610100600160a81b0319166101006001600160a01b0384160217905561087630737a250d5630b4cf539739df2c5dacb4c659f2488d86610a6e565b6006805460ff60b01b1916600160b01b17905560405163f305d71960e01b8152306004820152602481018590525f60448201819052606482015261dead60848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990859060c40160606040518083038185885af11580156108fb573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906109209190610f93565b505060068054600160a81b61ffff60a81b19909116179081905560408051878152602081018790526101009092046001600160a01b0316908201527f08ec9c7c05ec1e37ec63ede423fd430bfc1c70d9317e69387ed4cadb32f60469915060600160405180910390a150505050565b60606005805461040890610f1d565b5f610495338484610b2e565b6003546001600160a01b031633146109d45760405162461bcd60e51b815260040161050e90610f55565b6001600160a01b038116610a135760405162461bcd60e51b815260040161050e906020808252600490820152637a65726f60e01b604082015260600190565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831615801590610a8e57506001600160a01b03821615155b610acd5760405162461bcd60e51b815260206004820152601060248201526f22a92199181d103d32b9379030b2323960811b604482015260640161050e565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600654600160b01b900460ff16610b9157600654600160a81b900460ff16610b915760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b604482015260640161050e565b610b9c838383610cac565b505050565b6001600160a01b038216610bef5760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e2066726f6d207a65726f60581b604482015260640161050e565b6001600160a01b0382165f9081526020819052604090205481811015610c575760405162461bcd60e51b815260206004820152601760248201527f45524332303a206275726e20657863656564732062616c000000000000000000604482015260640161050e565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610b21565b6001600160a01b03831615801590610ccc57506001600160a01b03821615155b610d0b5760405162461bcd60e51b815260206004820152601060248201526f22a92199181d103d32b9379030b2323960811b604482015260640161050e565b6001600160a01b0383165f9081526020819052604090205481811015610d6c5760405162461bcd60e51b815260206004820152601660248201527545524332303a20657863656564732062616c616e636560501b604482015260640161050e565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290610da2908490610fbe565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610dee91815260200190565b60405180910390a350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610544575f5ffd5b5f5f60408385031215610e56575f5ffd5b8235610e6181610e31565b946020939093013593505050565b5f5f5f60608486031215610e81575f5ffd5b8335610e8c81610e31565b92506020840135610e9c81610e31565b929592945050506040919091013590565b5f60208284031215610ebd575f5ffd5b5035919050565b5f60208284031215610ed4575f5ffd5b8135610edf81610e31565b9392505050565b5f5f60408385031215610ef7575f5ffd5b8235610f0281610e31565b91506020830135610f1281610e31565b809150509250929050565b600181811c90821680610f3157607f821691505b602082108103610f4f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b5f60208284031215610f88575f5ffd5b8151610edf81610e31565b5f5f5f60608486031215610fa5575f5ffd5b5050815160208301516040909301519094929350919050565b8082018082111561049957634e487b7160e01b5f52601160045260245ffdfea26469706673582212203d87f2a69c0f6d6c22d21a0cc426369958161cc18f9d5dcbb3cd0f3a822fe1b464736f6c634300081e0033
Verified Source Code Partial Match
Compiler: v0.8.30+commit.73712a01
EVM: prague
Optimization: Yes (200 runs)
TopHatToad.sol 187 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
/* ========= Minimal ERC20 ========= */
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address a) external view returns (uint256);
function transfer(address r, uint256 v) external returns (bool);
function allowance(address o, address s) external view returns (uint256);
function approve(address s, uint256 v) external returns (bool);
function transferFrom(address s, address r, uint256 v) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract ERC20 is IERC20 {
mapping(address => uint256) internal _balances;
mapping(address => mapping(address => uint256)) internal _allowances;
uint256 internal _totalSupply;
function totalSupply() public view override returns (uint256) { return _totalSupply; }
function balanceOf(address a) public view override returns (uint256) { return _balances[a]; }
function allowance(address o, address s) public view override returns (uint256) { return _allowances[o][s]; }
function transfer(address r, uint256 v) public override returns (bool) { _transfer(msg.sender, r, v); return true; }
function approve(address s, uint256 v) public override returns (bool) { _approve(msg.sender, s, v); return true; }
function transferFrom(address s, address r, uint256 v) public override returns (bool) {
uint256 a = _allowances[s][msg.sender];
require(a >= v, "ERC20: insufficient allowance");
unchecked { _approve(s, msg.sender, a - v); }
_transfer(s, r, v);
return true;
}
/* mark virtual so we can add the pre-trade guard in the child */
function _transfer(address s, address r, uint256 v) internal virtual {
require(s != address(0) && r != address(0), "ERC20: zero addr");
uint256 sb = _balances[s];
require(sb >= v, "ERC20: exceeds balance");
unchecked { _balances[s] = sb - v; }
_balances[r] += v;
emit Transfer(s, r, v);
}
function _mint(address a, uint256 v) internal {
require(a != address(0), "ERC20: mint to zero");
_totalSupply += v;
_balances[a] += v;
emit Transfer(address(0), a, v);
}
function _burn(address a, uint256 v) internal {
require(a != address(0), "ERC20: burn from zero");
uint256 b = _balances[a];
require(b >= v, "ERC20: burn exceeds bal");
unchecked { _balances[a] = b - v; _totalSupply -= v; }
emit Transfer(a, address(0), v);
}
function _approve(address o, address s, uint256 v) internal {
require(o != address(0) && s != address(0), "ERC20: zero addr");
_allowances[o][s] = v;
emit Approval(o, s, v);
}
}
/* ========= Minimal Ownable ========= */
abstract contract Ownable {
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
address public owner;
modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; }
constructor() { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); }
function renounceOwnership() external onlyOwner { emit OwnershipTransferred(owner, address(0)); owner = address(0); }
function transferOwnership(address n) external onlyOwner { require(n != address(0), "zero"); emit OwnershipTransferred(owner, n); owner = n; }
}
/* ========= Uniswap V2 Interfaces ========= */
interface IUniswapV2Factory {
function getPair(address, address) external view returns (address);
function createPair(address, address) external returns (address);
}
interface IUniswapV2Router02 {
function factory() external view returns (address);
function WETH() external view returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
/* ========= Top Hat Toad (THATT) ========= */
contract TopHatToad is ERC20, Ownable {
// Metadata
string private _name = "Top Hat Toad";
string private _symbol = "THATT";
uint8 private _decimals = 18;
// Supply
uint256 public constant FIXED_SUPPLY = 500_000_000_000 * 1e18; // 500B
// Router (ETH mainnet Uniswap V2)
IUniswapV2Router02 public constant router =
IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address public pair;
address public immutable WETH;
// Launch state
bool public tradingActive; // flips true after enableTrading
bool private _launching; // internal flag to let router move tokens during LP add
address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
event TradingEnabled(uint256 tokenAmount, uint256 ethAmount, address pair);
constructor() payable {
// set WETH from router
WETH = router.WETH();
// Mint & distribute: 96% to contract (for LP), 4% to deployer
uint256 toDeployer = FIXED_SUPPLY * 4 / 100; // 4%
uint256 toContract = FIXED_SUPPLY - toDeployer; // 96%
_mint(address(this), toContract);
_mint(msg.sender, toDeployer);
// Any ETH sent with deployment stays in the contract for LP
}
/* ===== Pre-trading guard (no whitelist) ===== */
function _transfer(address s, address r, uint256 v) internal override {
if (!_launching) {
require(tradingActive, "Trading not active yet");
}
super._transfer(s, r, v);
}
/* ===== Receive ETH for LP funding ===== */
receive() external payable {}
/* ===== One-time LP creation + LP burn ===== */
function enableTrading() external onlyOwner {
require(!tradingActive, "Already active");
uint256 tokenAmt = _balances[address(this)];
uint256 ethAmt = address(this).balance;
require(tokenAmt > 0 && ethAmt > 0, "Need tokens & ETH");
// Create pair if needed
address factory = router.factory();
address _pair = IUniswapV2Factory(factory).getPair(address(this), WETH);
if (_pair == address(0)) {
_pair = IUniswapV2Factory(factory).createPair(address(this), WETH);
}
pair = _pair;
// Approve router for tokenAmt
_approve(address(this), address(router), tokenAmt);
// Allow router to move tokens during this call
_launching = true;
// Add liquidity and send LP tokens to DEAD (permanent burn)
router.addLiquidityETH{value: ethAmt}(
address(this),
tokenAmt,
0, // accept any
0, // accept any
DEAD,
block.timestamp
);
// Done
_launching = false;
tradingActive = true;
emit TradingEnabled(tokenAmt, ethAmt, pair);
}
/* ===== True burn (reduces totalSupply) ===== */
function burn(uint256 value) external {
_burn(msg.sender, value);
}
/* ===== ERC20 metadata ===== */
function name() public view returns (string memory) { return _name; }
function symbol() public view returns (string memory) { return _symbol; }
function decimals() public view returns (uint8) { return _decimals; }
}
Read Contract
DEAD 0x03fd2a45 → address
FIXED_SUPPLY 0xc969943e → uint256
WETH 0xad5c4648 → address
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
name 0x06fdde03 → string
owner 0x8da5cb5b → address
pair 0xa8aa1b31 → address
router 0xf887ea40 → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
Write Contract 7 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address s
uint256 v
returns: bool
burn 0x42966c68
uint256 value
enableTrading 0x8a8c523c
No parameters
renounceOwnership 0x715018a6
No parameters
transfer 0xa9059cbb
address r
uint256 v
returns: bool
transferFrom 0x23b872dd
address s
address r
uint256 v
returns: bool
transferOwnership 0xf2fde38b
address n
Recent Transactions
No transactions found for this address