// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
/// @title NoZeroToken
/// @notice Fixed-supply ERC20 token minted once to the deployer.
contract NoZeroToken {
string private constant NAME = "zero cat";
string private constant SYMBOL = "k0cat";
uint8 private constant DECIMALS = 18;
uint256 public constant TARGET_POOL_WETH = 1.4 ether;
uint256 public constant TOTAL_SUPPLY = 100_000_000_000_000_000_000_000_000_000 ether;
uint256 public totalSupply;
mapping(address account => uint256 balance) public balanceOf;
mapping(address owner => mapping(address spender => uint256 allowance)) public allowance;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
error InvalidAddress();
error InsufficientBalance();
error InsufficientAllowance();
constructor() {
totalSupply = TOTAL_SUPPLY;
balanceOf[msg.sender] = TOTAL_SUPPLY;
emit Transfer(address(0), msg.sender, TOTAL_SUPPLY);
}
function name() external pure returns (string memory) {
return NAME;
}
function symbol() external pure returns (string memory) {
return SYMBOL;
}
function decimals() external pure returns (uint8) {
return DECIMALS;
}
function transfer(address to, uint256 value) external returns (bool) {
_transfer(msg.sender, to, value);
return true;
}
function approve(address spender, uint256 value) external returns (bool) {
if (spender == address(0)) revert InvalidAddress();
allowance[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
function transferFrom(address from, address to, uint256 value) external returns (bool) {
uint256 currentAllowance = allowance[from][msg.sender];
if (currentAllowance < value) revert InsufficientAllowance();
if (currentAllowance != type(uint256).max) {
unchecked {
allowance[from][msg.sender] = currentAllowance - value;
}
emit Approval(from, msg.sender, allowance[from][msg.sender]);
}
_transfer(from, to, value);
return true;
}
function _transfer(address from, address to, uint256 value) private {
if (from == address(0) || to == address(0)) revert InvalidAddress();
uint256 fromBalance = balanceOf[from];
if (fromBalance < value) revert InsufficientBalance();
unchecked {
balanceOf[from] = fromBalance - value;
balanceOf[to] += value;
}
emit Transfer(from, to, value);
}
}[
{
"type": "constructor",
"inputs": [],
"stateMutability": "nonpayable"
},
{
"name": "InsufficientAllowance",
"type": "error",
"inputs": []
},
{
"name": "InsufficientBalance",
"type": "error",
"inputs": []
},
{
"name": "InvalidAddress",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TARGET_POOL_WETH",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "TOTAL_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "pure"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
}
]0x6080604052348015600e575f5ffd5b5073118427b3b4a05bc8a8a4de8459868000000000005f81815533808252600160205260408083208490555190927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91606991815260200190565b60405180910390a361055e8061007e5f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80633f8035b41161006e5780633f8035b41461013b57806370a082311461014a578063902d55a51461016957806395d89b4114610184578063a9059cbb146101a5578063dd62ed3e146101b8575f5ffd5b806306fdde03146100aa578063095ea7b3146100e057806318160ddd1461010357806323b872dd14610119578063313ce5671461012c575b5f5ffd5b6040805180820190915260088152671e995c9bc818d85d60c21b60208201525b6040516100d79190610425565b60405180910390f35b6100f36100ee366004610475565b6101e2565b60405190151581526020016100d7565b61010b5f5481565b6040519081526020016100d7565b6100f361012736600461049d565b61026d565b604051601281526020016100d7565b61010b67136dcc951d8c000081565b61010b6101583660046104d7565b60016020525f908152604090205481565b61010b73118427b3b4a05bc8a8a4de84598680000000000081565b6040805180820190915260058152641acc18d85d60da1b60208201526100ca565b6100f36101b3366004610475565b61032f565b61010b6101c63660046104f7565b600260209081525f928352604080842090915290825290205481565b5f6001600160a01b03831661020a5760405163e6c4247b60e01b815260040160405180910390fd5b335f8181526002602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6001600160a01b0383165f908152600260209081526040808320338452909152812054828110156102b1576040516313be252b60e01b815260040160405180910390fd5b5f198114610319576001600160a01b0385165f81815260026020908152604080832033808552908352928190208786039081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b610324858585610344565b506001949350505050565b5f61033b338484610344565b50600192915050565b6001600160a01b038316158061036157506001600160a01b038216155b1561037f5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260016020526040902054818110156103b857604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179086815260200190565b60405180910390a350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610470575f5ffd5b919050565b5f5f60408385031215610486575f5ffd5b61048f8361045a565b946020939093013593505050565b5f5f5f606084860312156104af575f5ffd5b6104b88461045a565b92506104c66020850161045a565b929592945050506040919091013590565b5f602082840312156104e7575f5ffd5b6104f08261045a565b9392505050565b5f5f60408385031215610508575f5ffd5b6105118361045a565b915061051f6020840161045a565b9050925092905056fea264697066735822122031e775ef40015ef3396c6a1cb45c3cef657d921efdfc3a619a33fff84793452864736f6c634300081c0033
0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80633f8035b41161006e5780633f8035b41461013b57806370a082311461014a578063902d55a51461016957806395d89b4114610184578063a9059cbb146101a5578063dd62ed3e146101b8575f5ffd5b806306fdde03146100aa578063095ea7b3146100e057806318160ddd1461010357806323b872dd14610119578063313ce5671461012c575b5f5ffd5b6040805180820190915260088152671e995c9bc818d85d60c21b60208201525b6040516100d79190610425565b60405180910390f35b6100f36100ee366004610475565b6101e2565b60405190151581526020016100d7565b61010b5f5481565b6040519081526020016100d7565b6100f361012736600461049d565b61026d565b604051601281526020016100d7565b61010b67136dcc951d8c000081565b61010b6101583660046104d7565b60016020525f908152604090205481565b61010b73118427b3b4a05bc8a8a4de84598680000000000081565b6040805180820190915260058152641acc18d85d60da1b60208201526100ca565b6100f36101b3366004610475565b61032f565b61010b6101c63660046104f7565b600260209081525f928352604080842090915290825290205481565b5f6001600160a01b03831661020a5760405163e6c4247b60e01b815260040160405180910390fd5b335f8181526002602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6001600160a01b0383165f908152600260209081526040808320338452909152812054828110156102b1576040516313be252b60e01b815260040160405180910390fd5b5f198114610319576001600160a01b0385165f81815260026020908152604080832033808552908352928190208786039081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b610324858585610344565b506001949350505050565b5f61033b338484610344565b50600192915050565b6001600160a01b038316158061036157506001600160a01b038216155b1561037f5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260016020526040902054818110156103b857604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179086815260200190565b60405180910390a350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610470575f5ffd5b919050565b5f5f60408385031215610486575f5ffd5b61048f8361045a565b946020939093013593505050565b5f5f5f606084860312156104af575f5ffd5b6104b88461045a565b92506104c66020850161045a565b929592945050506040919091013590565b5f602082840312156104e7575f5ffd5b6104f08261045a565b9392505050565b5f5f60408385031215610508575f5ffd5b6105118361045a565b915061051f6020840161045a565b9050925092905056fea264697066735822122031e775ef40015ef3396c6a1cb45c3cef657d921efdfc3a619a33fff84793452864736f6c634300081c0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xc47cbf…eb32d0 | 37 days agoSat, 11 Jul 2026 14:03:26 UTC | Transfer | [0] 0x000000000000…e68f42a0 [1] 0x000000000000…0000dead data: 0x000000000000000000…ee442589 |
| 0x8354c8…d2aef8 | 37 days agoSat, 11 Jul 2026 14:02:14 UTC | Transfer | [0] 0x000000000000…a40ce5f9 [1] 0x000000000000…e68f42a0 data: 0x000000000000000000…ee442589 |
| 0x8e808a…fe1a05 | 37 days agoSat, 11 Jul 2026 13:59:17 UTC | Transfer | [0] 0x000000000000…e68f42a0 [1] 0x000000000000…0000dead data: 0x000000000000000000…11bbda76 |
| 0x949724…d43530 | 37 days agoSat, 11 Jul 2026 13:58:54 UTC | Transfer | [0] 0x000000000000…e68f42a0 [1] 0x000000000000…a40ce5f9 data: 0x000000000000000000…ee44258a |
| 0x02d739…07f9e5 | 37 days agoSat, 11 Jul 2026 13:58:45 UTC | Approval | [0] 0x000000000000…e68f42a0 [1] 0x000000000000…638de0d3 data: 0xffffffffffffffffff…ffffffff |
| 0x53b978…f4bbd8 | 37 days agoSat, 11 Jul 2026 13:56:21 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…e68f42a0 data: 0x000000000000000000…00000000 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xc47cbf…eb32d0 | Transfer | 6,999,690 | 37 days agoSat, 11 Jul 2026 14:03:26 UTC | 0x0f21…42a0 | IN | zero cat | $0.000 ETH | 0.00000169 | |
| 0x8e808a…fe1a05 | Transfer | 6,997,201 | 37 days agoSat, 11 Jul 2026 13:59:17 UTC | 0x0f21…42a0 | IN | zero cat | $0.000 ETH | 0.00000265 | |
| 0x02d739…07f9e5 | Approve | 6,996,883 | 37 days agoSat, 11 Jul 2026 13:58:45 UTC | 0x0f21…42a0 | IN | zero cat | $0.000 ETH | 0.00000264 |