> /etc/erc/erc-69.spec█
ERC-69 // FULL SPECIFICATION // IMMUTABLE
// abstract
ERC-69 is a meme-token standard layered on ERC-20 with immutable, factory-enforced launch rules. It codifies the post-ERC-20 meta: no owner, no mint, LP burned, capped launch window, fixed-tax steady state, auto-burning tax altar. Every compliant token deploys through a one-shot factory that permanently removes all administrative control in the same transaction that mints supply, ships 0.69% to vitalik.eth, and seeds the Uniswap pair.
This is not a fork of ERC-20. It is a superset with additional physics. Every promise is enforced at the bytecode level. "Trust me bro" is replaced by "read the source."
> TABLE OF CONTENTS
> §1 · WHY
PHILOSOPHY//a meme token that can’t be rugged. the deployer has no knobs. the owner doesn’t exist. the supply never grows. the tax never changes. the LP is already at 0x…dEaD before the first trade.
// three principles:
- no trust required. every promise is enforced at the bytecode level.
- fair launch by physics. anti-whale limits during the launch window. no presale. no team allocation. no vesting.
- inevitable deflation. tax accumulates, then burns. every 69 blocks the altar incinerates itself.
> §2 · WHAT GOES WHERE
SUPPLY & DISTRIBUTION// at deploy the factory mints 100% to itself then splits it:
TOTAL SUPPLY 69,000,000,000 $TOKEN // 18 decimals, fixed forever
├─ 0.69% → VITALIK TRIBUTE // vitalik.eth — hardcoded
└─ 99.31% → UNISWAP LP // paired with 0.01 ETH
↳ LP tokens minted directly to 0x…dEaD// the 0.69% tribute is baked into the factory bytecode as a constant. cannot be changed post-deploy. same on-deploy ritual as every classical meme-tribute coin, but mandatory and uniform across the standard.
// LP tokens are sent straight to 0x…dEaDvia the router’s addLiquidityETH(... to: DEAD ...). the factory never holds LP. it cannot be withdrawn, migrated, or compromised.
> §3 · T+0 → T+9min
LAUNCH WINDOW// the first 9 minutes after deploy are protected. elevated taxes + anti-whale limits + auto-swap of accumulated sell tax to ETH:
| rule | value | purpose |
|---|---|---|
| Buy tax | 6% | // slow bot sniping |
| Sell tax | 9% | // punish early dumps |
| Max tx | 0.69% of supply | // prevent chain-splitters |
| Max wallet (buys) | 0.69% of supply | // limit whale concentration |
| Auto-swap cap | 0.5% of supply / swap | // avoid cratering the thin launch pool |
| Dust floor | 35M tokens | // don't burn gas on micro-swaps |
//during the window, every sell that meets the dust threshold triggers an on-the-fly tokens-to-ETH swap of the contract’s accumulated tax, capped at min(userSellSize, contractBalance, 0.5% supply). ETH lands at taxReceiver. wrapped in try/catch — if the nested swap reverts, the user’s outer sell still succeeds; tokens accumulate for the next swap.
> §4 · T+9min → forever
STEADY STATE// after the launch window ends, all anti-whale limits lift and taxes uniformize:
BUY TAX 0.69% // same as sell, same as transfer SELL TAX 0.69% TRANSFER TAX 0.69% MAX TX ∞ // unlimited MAX WALLET ∞ // unlimited TAX DESTINATION 0x…dEaD // burned, not swapped BURN CADENCE every 69 blocks
// the contract holds accumulated tax. every 69 blocks the full balance is pushed to 0x…dEaD. if _transferdoesn’t fire the burn automatically, anyone can call triggerBurn() to flush the altar.
> §5 · ONE-SHOT DEPLOYER
FACTORY MECHANISM// each ERC-69 token needs its own factory deployment. the factory is a single-shot contract — its entire lifecycle is one constructor call. after that transaction, the factory has no public entry point capable of moving tokens or ETH.
// constructor sequence (atomic, all in one tx):
- require
msg.value == 0.01 ETH - deploy token — factory is
msg.sender, receives 100% supply - transfer 0.69% → vitalik.eth
- approve Uniswap V2 router for the remaining 99.31%
- call
addLiquidityETH(... to: DEAD ...)— LP minted straight to dead - emit
ERC69Deployed(token, pair, deployer)
// the deployer address inside the token contract is the factory. because the factory has no post-construction code path to move tokens, the token contract safely treats deployer as a permanent tax-exempt role— required so the initial ship + LP add don’t get taxed. no bypass risk: factory is a dead contract.
> §6 · HOW EVERY TRANSFER FLOWS
TAX ROUTINGevery taxed transfer: tax = ceil(value * taxBps / 10000) // never rounds to 0 net = value - tax balance[from] -= value balance[to] += net balance[contract] += tax emit Transfer(from, contract, tax) emit Transfer(from, to, net)
//ceiling division closes the dust round-to-zero loophole. any non-zero taxable transfer pays at least 1 wei of tax.
// tax-exempt paths:
- contract moving its own tokens (during tax swap or burn)
inSwapflag set (router callbacks during the atomic swap)deployer(the factory, permanently)
// that’s the entire exemption list. no whitelist. no admin flag. no backdoor.
> §7 · ABI BREAKDOWN
FUNCTION REFERENCE| signature | access | behavior |
|---|---|---|
| constructor(address taxReceiver) | internal | mints 100% to factory · creates Uniswap pair · stamps launchTimestamp + lastBurnBlock |
| balanceOf(address) | external view | standard ERC-20 read |
| allowance(address, address) | external view | standard ERC-20 read |
| approve(address spender, uint256 value) | external | sets allowance · emits Approval |
| transfer(address to, uint256 value) | external | wraps _transfer |
| transferFrom(address from, address to, uint256 value) | external | allowance-aware · max(uint256) = infinite |
| _transfer(from, to, value) | internal | CORE LOGIC — skip-tax paths · buy/sell detect · launch maxTx+maxWallet · auto-swap tax to ETH on sells · ceil-div tax calc · post-launch 69-block burn trigger |
| _swapTokensForEth(uint256 amount) | private | tokens → WETH via V2 router → taxReceiver · try/catch-safe · clears stale allowance on failure |
| _burnAccumulated() | internal | flushes contract balance → 0x…dEaD · emits TaxBurned |
| triggerBurn() | external | anyone-callable post-launch poke · requires ≥69 blocks since last burn |
| rescueStuckETH() | external | taxReceiver-only · sends stuck ETH to the pre-committed taxReceiver address |
> §8 · HARDCODED VALUES
CONSTANTS| constant | value | note |
|---|---|---|
| totalSupply | 69_000_000_000 × 10^18 | // fixed at deploy · never mints · never burns except via tax altar |
| TAX_BPS | 69 | // 0.69% on every taxed transfer, post-launch |
| LAUNCH_BUY_BPS | 600 | // 6% buy tax during launch window |
| LAUNCH_SELL_BPS | 900 | // 9% sell tax during launch window |
| LAUNCH_DURATION | 9 minutes | // measured from launchTimestamp (deploy) |
| BURN_INTERVAL | 69 blocks | // ~14 min on Ethereum mainnet |
| MAX_TX_BPS | 69 | // 0.69% max per tx (buys & sells, launch window only) |
| MAX_WALLET_BPS | 69 | // 0.69% max wallet on buys (launch window only) |
| MAX_SWAP_BPS | 50 | // 0.5% of supply cap per launch-window auto-swap |
| SWAP_THRESHOLD | 35_000_000 × 10^18 | // dust floor — below this no auto-swap fires |
| SHIP_BPS | 69 | // 0.69% shipped to SHIP_RECEIVER by the factory |
| LP_ETH_AMOUNT | 0.01 ETH | // fixed initial liquidity · sent with factory deploy tx |
| UNISWAP_ROUTER | 0x7a25…488D | // Uniswap V2 Router02 (mainnet) |
| DEAD | 0x000…dEaD | // LP + burn destination · provably unspendable |
> §9 · WHAT THE CHAIN BROADCASTS
EVENTS| event | source | when it fires |
|---|---|---|
| Transfer(from, to, value) | token | ERC-20 standard · emitted twice per taxed transfer (tax leg + net leg) |
| Approval(owner, spender, value) | token | ERC-20 standard |
| TaxBurned(amount, atBlock) | token | every successful post-launch burn |
| TaxSwapped(tokensIn) | token | every successful launch-window tax swap |
| TaxSwapFailed(tokensIn) | token | emitted if the nested swap reverts · tokens stay accumulated |
| ETHRescued(to, amount) | token | every rescueStuckETH call · to is always taxReceiver |
| ERC69Deployed(token, pair, deployer) | factory | fires once per factory deployment · deployer = the EOA that sent 0.01 ETH |
> §10 · WHAT THE CONTRACT CAN & CANNOT DO
SECURITY MODELCAN · by design
- [✓]transfer tokens via standard ERC-20 allowances
- [✓]hold its own accumulated tax balance
- [✓]swap accumulated tax → ETH via Uniswap V2 (launch window only)
- [✓]burn accumulated tax to 0x…dEaD (post-launch)
- [✓]allow taxReceiver to rescue force-sent ETH
CANNOT · enforced at bytecode
- [✗]mint new supply (no mint function exists)
- [✗]pause transfers (no pause function exists)
- [✗]blacklist addresses (no blacklist function exists)
- [✗]change any tax rate
- [✗]change launch duration or burn interval
- [✗]change the tribute / tax receiver
- [✗]drain LP (LP sits at 0x…dEaD)
- [✗]be upgraded (no proxy · no delegatecall · no selfdestruct)
- [✗]renounce ownership (no ownership exists to renounce)
> §11 · THE DEAL
THE IMMUTABLE COVENANT// you read the source. you verify the bytecode on etherscan. you check that the factory sent the LP to 0x…dEaD, the 0.69% to vitalik.eth, and the tax receiver matches what was promised.
// then you trade. with the certainty that nothing about this token can change until ethereum itself does.
// that’s the covenant. that’s the meme standard.