// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
/// @title FeatherToken
/// @notice The feather ERC-20: fixed supply, no owner, no mint function, no
/// taxes, no blacklist. Deployed by FeatherFactory as a full
/// contract via CREATE2 — not a proxy, so every token carries its
/// own immutable bytecode — and initialized in the same transaction.
/// The entire supply is minted once at initialization and never
/// again.
contract FeatherToken {
// ---------------------------------------------------------------------
// ERC-20 state
// ---------------------------------------------------------------------
string public name;
string public symbol;
uint8 public constant decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
bool private _initialized;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
error AlreadyInitialized();
error InsufficientBalance();
error InsufficientAllowance();
error ZeroAddress();
/// @notice One-shot initializer, called by the factory in the same
/// transaction as the CREATE2 deployment, so no third party can
/// claim the contract first. Mints the entire fixed supply to
/// `recipient` — the factory, which immediately places it as
/// locked pool liquidity.
function initialize(string calldata name_, string calldata symbol_, address recipient, uint256 supply) external {
if (_initialized) revert AlreadyInitialized();
_initialized = true;
name = name_;
symbol = symbol_;
totalSupply = supply;
balanceOf[recipient] = supply;
emit Transfer(address(0), recipient, supply);
}
function transfer(address to, uint256 amount) external returns (bool) {
_transfer(msg.sender, to, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) external returns (bool) {
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max) {
if (allowed < amount) revert InsufficientAllowance();
unchecked {
allowance[from][msg.sender] = allowed - amount;
}
}
_transfer(from, to, amount);
return true;
}
function approve(address spender, uint256 amount) external returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function _transfer(address from, address to, uint256 amount) internal {
if (to == address(0)) revert ZeroAddress();
uint256 bal = balanceOf[from];
if (bal < amount) revert InsufficientBalance();
unchecked {
balanceOf[from] = bal - amount;
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
}
}[
{
"name": "AlreadyInitialized",
"type": "error",
"inputs": []
},
{
"name": "InsufficientAllowance",
"type": "error",
"inputs": []
},
{
"name": "InsufficientBalance",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"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": "allowance",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "initialize",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "supply",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"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": "amount",
"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": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
}
]0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146106ce578063095ea7b31461065557806318160ddd1461063857806323b872dd14610597578063313ce5671461057c57806370a082311461054457806395d89b4114610477578063a9059cbb14610446578063dd62ed3e146103f65763f542033f14610087575f80fd5b346103f25760803660031901126103f25760043567ffffffffffffffff81116103f2576100b8903690600401610805565b9060243567ffffffffffffffff81116103f2576100d9903690600401610805565b906044359360018060a01b0385168095036103f2576064359360055460ff81166103e45760ff191660011760055567ffffffffffffffff82116102e35781906101225f54610777565b601f8111610373575b505f90601f8311600114610302575f926102f7575b50508160011b915f199060031b1c1916175f555b67ffffffffffffffff82116102e35761016e600154610777565b601f811161027f575b505f90601f83116001146101ef5792827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef936020935f9687926101e4575b50508160011b9186199060031b1c1916176001555b8060025584845260038252806040852055604051908152a3005b013590505f806101b5565b5f805160206108f383398151915291601f1984165f5b8181106102675750936020935f9693600193837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef981061024e575b505050811b016001556101ca565b881960f88560031b161c199101351690555f8080610240565b91936020600181928787013581550195019201610205565b601f830160051c5f805160206108f38339815191520190602084106102ce575b601f0160051c5f805160206108f383398151915201905b8181106102c35750610177565b5f81556001016102b6565b5f805160206108f3833981519152915061029f565b634e487b7160e01b5f52604160045260245ffd5b013590505f80610140565b909150601f198316915f80525f805160206108d3833981519152925f5b81811061035b5750908460019594939210610342575b505050811b015f55610154565b01355f19600384901b60f8161c191690555f8080610335565b9193602060018192878701358155019501920161031f565b9091505f8052601f830160051c5f805160206108d38339815191520190602084106103cf575b90601f8493920160051c5f805160206108d383398151915201905b8181106103c1575061012b565b5f81558493506001016103b4565b5f805160206108d38339815191529150610399565b62dc149f60e41b5f5260045ffd5b5f80fd5b346103f25760403660031901126103f25761040f6107d9565b6104176107ef565b6001600160a01b039182165f908152600460209081526040808320949093168252928352819020549051908152f35b346103f25760403660031901126103f25761046c6104626107d9565b6024359033610833565b602060405160018152f35b346103f2575f3660031901126103f2576040515f60015461049781610777565b808452906001811690811561052857506001146104e5575b50819003601f01601f191681019067ffffffffffffffff8211818310176102e357604082905281906104e190826107af565b0390f35b60015f9081529091505f805160206108f38339815191525b828210610512575060209150820101826104af565b60018160209254838588010152019101906104fd565b90506020925060ff191682840152151560051b820101826104af565b346103f25760203660031901126103f2576001600160a01b036105656107d9565b165f526003602052602060405f2054604051908152f35b346103f2575f3660031901126103f257602060405160128152f35b346103f25760603660031901126103f2576105b06107d9565b6105b86107ef565b6001600160a01b0382165f81815260046020908152604080832033845290915290205490926044359291600181016105f6575b5061046c9350610833565b8381106106295761046c945f52600460205260405f2060018060a01b0333165f526020528360405f2091039055846105eb565b6313be252b60e01b5f5260045ffd5b346103f2575f3660031901126103f2576020600254604051908152f35b346103f25760403660031901126103f25761066e6107d9565b335f8181526004602090815260408083206001600160a01b03909516808452948252918290206024359081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a3602060405160018152f35b346103f2575f3660031901126103f2576040515f80546106ed81610777565b808452906001811690811561052857506001146107365750819003601f01601f191681019067ffffffffffffffff8211818310176102e357604082905281906104e190826107af565b5f8080529091505f805160206108d38339815191525b828210610761575060209150820101826104af565b600181602092548385880101520191019061074c565b90600182811c921680156107a5575b602083101461079157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610786565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036103f257565b602435906001600160a01b03821682036103f257565b9181601f840112156103f25782359167ffffffffffffffff83116103f257602083818601950101116103f257565b6001600160a01b03909116919082156108c3576001600160a01b03165f818152600360205260409020549091908181106108b457817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f52600384520360405f2055845f526003825260405f20818154019055604051908152a3565b631e9acf1760e31b5f5260045ffd5b63d92e233d60e01b5f5260045ffdfe290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a164736f6c634300081a000a
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| 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 | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x422d8e…da0585 | 30 days agoThu, 16 Jul 2026 21:15:23 UTC | Approval | [0] 0x000000000000…8480f33c [1] 0x000000000000…e5a3ac7f data: 0xffffffffffffffffff…ffffffff |
| 0x1c2126…123d4c | 30 days agoThu, 16 Jul 2026 21:15:23 UTC | Approval | [0] 0x000000000000…587dc0c2 [1] 0x000000000000…e5a3ac7f data: 0xffffffffffffffffff…ffffffff |
| 0x82d4b6…7bfaa2 | 30 days agoThu, 16 Jul 2026 21:15:23 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…8480f33c data: 0x000000000000000000…84d6e6bb |
| 0x194982…426d44 | 30 days agoThu, 16 Jul 2026 21:15:23 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…587dc0c2 data: 0x000000000000000000…006cc59b |
| 0x2a4637…f405ab | 30 days agoThu, 16 Jul 2026 17:31:40 UTC | Transfer | [0] 0x000000000000…16c016f9 [1] 0x000000000000…43e40951 data: 0x000000000000000000…a4ee6604 |
| 0xd023ac…b98533 | 30 days agoThu, 16 Jul 2026 17:31:40 UTC | Transfer | [0] 0x000000000000…d1a35147 [1] 0x000000000000…43e40951 data: 0x000000000000000000…a6ea9061 |
| 0xa15f7e…90fed6 | 30 days agoThu, 16 Jul 2026 17:11:19 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…16c016f9 data: 0x000000000000000000…a4ee6604 |
| 0xec9c79…42bfc8 | 30 days agoThu, 16 Jul 2026 17:11:19 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…d1a35147 data: 0x000000000000000000…a6ea9061 |
| 0x9915f6…5ab6db | 30 days agoThu, 16 Jul 2026 17:11:19 UTC | Transfer | [0] 0x000000000000…db8c0904 [1] 0x000000000000…43e40951 data: 0x000000000000000000…2fb7287b |
| 0x9915f6…5ab6db | 30 days agoThu, 16 Jul 2026 17:11:19 UTC | Transfer | [0] 0x000000000000…dd8e64f9 [1] 0x000000000000…db8c0904 data: 0x000000000000000000…2fb7287b |
| 0x870a66…48d4be | 30 days agoThu, 16 Jul 2026 17:11:11 UTC | Transfer | [0] 0x000000000000…db38840f [1] 0x000000000000…43e40951 data: 0x000000000000000000…174be4cf |
| 0x1f3be4…66dcbe | 30 days agoThu, 16 Jul 2026 17:11:09 UTC | Approval | [0] 0x000000000000…db38840f [1] 0x000000000000…7a9592a7 data: 0xffffffffffffffffff…ffffffff |
| 0xb97dfd…9633a6 | 30 days agoThu, 16 Jul 2026 15:29:38 UTC | Transfer | [0] 0x000000000000…872a6020 [1] 0x000000000000…43e40951 data: 0x000000000000000000…25000000 |
| 0xf35a41…0b36c0 | 30 days agoThu, 16 Jul 2026 15:18:01 UTC | Transfer | [0] 0x000000000000…50d53eb1 [1] 0x000000000000…43e40951 data: 0x000000000000000000…f5e312e1 |
| 0xd42502…dfc1a9 | 30 days agoThu, 16 Jul 2026 15:13:53 UTC | Transfer | [0] 0x000000000000…3f21c9b8 [1] 0x000000000000…43e40951 data: 0x000000000000000000…4144376a |
| 0x39f20d…fe71ed | 30 days agoThu, 16 Jul 2026 15:13:53 UTC | Transfer | [0] 0x000000000000…d89781b5 [1] 0x000000000000…43e40951 data: 0x000000000000000000…7bb9bef7 |
| 0x540ac2…31ec93 | 30 days agoThu, 16 Jul 2026 15:13:53 UTC | Approval | [0] 0x000000000000…d89781b5 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0x2ec20d…37ad1a | 30 days agoThu, 16 Jul 2026 15:13:53 UTC | Approval | [0] 0x000000000000…3f21c9b8 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0x9b3d86…6b30f5 | 30 days agoThu, 16 Jul 2026 15:11:59 UTC | Transfer | [0] 0x000000000000…db8c0904 [1] 0x000000000000…43e40951 data: 0x000000000000000000…0757bd0b |
| 0x9b3d86…6b30f5 | 30 days agoThu, 16 Jul 2026 15:11:59 UTC | Transfer | [0] 0x000000000000…627850b6 [1] 0x000000000000…db8c0904 data: 0x000000000000000000…0757bd0b |
| 0x39bdb4…2f5211 | 30 days agoThu, 16 Jul 2026 15:11:54 UTC | Transfer | [0] 0x000000000000…872a6020 [1] 0x000000000000…43e40951 data: 0x000000000000000000…25000000 |
| 0x4e36b1…4b4776 | 30 days agoThu, 16 Jul 2026 15:11:36 UTC | Transfer | [0] 0x000000000000…16c016f9 [1] 0x000000000000…43e40951 data: 0x000000000000000000…e6cad18e |
| 0xb9edf5…a8fa8a | 30 days agoThu, 16 Jul 2026 15:11:36 UTC | Transfer | [0] 0x000000000000…d1a35147 [1] 0x000000000000…43e40951 data: 0x000000000000000000…47483f61 |
| 0x3db419…f11a4a | 30 days agoThu, 16 Jul 2026 15:11:36 UTC | Approval | [0] 0x000000000000…d1a35147 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0x404acd…03f702 | 30 days agoThu, 16 Jul 2026 15:11:36 UTC | Approval | [0] 0x000000000000…16c016f9 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x1c2126…123d4c | Approve | 11,573,109 | 30 days agoThu, 16 Jul 2026 21:15:23 UTC | 0xb6d0…c0c2 | IN | Bycocket | $0.000 ETH | 0.00000348 | |
| 0x422d8e…da0585 | Approve | 11,573,109 | 30 days agoThu, 16 Jul 2026 21:15:23 UTC | 0x8aaa…f33c | IN | Bycocket | $0.000 ETH | 0.00000348 | |
| 0x1f3be4…66dcbe | Approve | 11,426,696 | 30 days agoThu, 16 Jul 2026 17:11:09 UTC | 0xc8d3…840f | IN | Bycocket | $0.000 ETH | 0.00000315 | |
| 0x2ec20d…37ad1a | Approve | 11,356,418 | 30 days agoThu, 16 Jul 2026 15:13:53 UTC | 0xf129…c9b8 | IN | Bycocket | $0.000 ETH | 0.00000299 | |
| 0x540ac2…31ec93 | Approve | 11,356,418 | 30 days agoThu, 16 Jul 2026 15:13:53 UTC | 0x1afd…81b5 | IN | Bycocket | $0.000 ETH | 0.00000299 | |
| 0x404acd…03f702 | Approve | 11,355,047 | 30 days agoThu, 16 Jul 2026 15:11:36 UTC | 0xa263…16f9 | IN | Bycocket | $0.000 ETH | 0.00000303 | |
| 0x3db419…f11a4a | Approve | 11,355,047 | 30 days agoThu, 16 Jul 2026 15:11:36 UTC | 0x6323…5147 | IN | Bycocket | $0.000 ETH | 0.00000303 | |
| 0x300a39…f57895 | Approve | 11,352,311 | 30 days agoThu, 16 Jul 2026 15:07:00 UTC | 0x11a9…64f9 | IN | Bycocket | $0.000 ETH | 0.00000303 | |
| 0xc8df18…001d65 | Approve | 11,346,770 | 30 days agoThu, 16 Jul 2026 14:57:46 UTC | 0xa433…6020 | IN | Bycocket | $0.000 ETH | 0.00000298 | |
| 0x8dbaed…328f65 | Approve | 11,345,231 | 30 days agoThu, 16 Jul 2026 14:55:11 UTC | 0x3c3b…f851 | IN | Bycocket | $0.000 ETH | 0.00000300 | |
| 0xac3944…152ae0 | Approve | 11,345,229 | 30 days agoThu, 16 Jul 2026 14:55:11 UTC | 0x38c9…105d | IN | Bycocket | $0.000 ETH | 0.00000298 | |
| 0xc5df67…4f25f1 | Approve | 11,339,383 | 30 days agoThu, 16 Jul 2026 14:45:27 UTC | 0x25e5…3eb1 | IN | Bycocket | $0.000 ETH | 0.00000296 | |
| 0x7b4d40…32251c | Approve | 11,337,616 | 30 days agoThu, 16 Jul 2026 14:42:29 UTC | 0x03ad…976a | IN | Bycocket | $0.000 ETH | 0.00000297 | |
| 0xe1da32…97419f | Approve | 11,335,806 | 30 days agoThu, 16 Jul 2026 14:39:29 UTC | 0x5422…b418 | IN | Bycocket | $0.000 ETH | 0.00000295 | |
| 0xac51bd…c39bdd | Approve | 11,331,368 | 30 days agoThu, 16 Jul 2026 14:32:04 UTC | 0xfb23…793d | IN | Bycocket | $0.000 ETH | 0.00000296 | |
| 0x4ebd64…3eabff | Approve | 11,329,869 | 30 days agoThu, 16 Jul 2026 14:29:33 UTC | 0x6f6d…0b65 | IN | Bycocket | $0.000 ETH | 0.00000297 | |
| 0xc5342f…9e95b8 | Approve | 11,329,869 | 30 days agoThu, 16 Jul 2026 14:29:33 UTC | 0x2e89…52ff | IN | Bycocket | $0.000 ETH | 0.00000297 | |
| 0x2d1754…fcd4cb | Approve | 11,329,869 | 30 days agoThu, 16 Jul 2026 14:29:33 UTC | 0xf76c…f08d | IN | Bycocket | $0.000 ETH | 0.00000297 | |
| 0x9fec73…b4ba22 | Approve | 11,329,443 | 30 days agoThu, 16 Jul 2026 14:28:51 UTC | 0x08d7…7a44 | IN | Bycocket | $0.000 ETH | 0.00000297 | |
| 0x2292cc…13ca13 | Approve | 11,329,380 | 30 days agoThu, 16 Jul 2026 14:28:44 UTC | 0x6c39…ff13 | IN | Bycocket | $0.000 ETH | 0.00000299 | |
| 0x1b498e…457a8c | Approve | 11,329,082 | 30 days agoThu, 16 Jul 2026 14:28:14 UTC | 0xe945…50b6 | IN | Bycocket | $0.000 ETH | 0.00000297 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 11,328,899 | 30 days agoThu, 16 Jul 2026 14:27:56 UTC | 0x2646a0…c9fa37 | CREATE2 | launch | 0x1066…27f6 | IN | 0x91ab…fea7 | 0 ETH |