> /etc/erc/erc-69.spec

THEMEMESTANDARD

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:

  1. no trust required. every promise is enforced at the bytecode level.
  2. fair launch by physics. anti-whale limits during the launch window. no presale. no team allocation. no vesting.
  3. 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:

rulevaluepurpose
Buy tax6%// slow bot sniping
Sell tax9%// punish early dumps
Max tx0.69% of supply// prevent chain-splitters
Max wallet (buys)0.69% of supply// limit whale concentration
Auto-swap cap0.5% of supply / swap// avoid cratering the thin launch pool
Dust floor35M 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):

  1. require msg.value == 0.01 ETH
  2. deploy token — factory is msg.sender, receives 100% supply
  3. transfer 0.69% → vitalik.eth
  4. approve Uniswap V2 router for the remaining 99.31%
  5. call addLiquidityETH(... to: DEAD ...) — LP minted straight to dead
  6. 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 ROUTING
every 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)
  • inSwap flag 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
signatureaccessbehavior
constructor(address taxReceiver)internalmints 100% to factory · creates Uniswap pair · stamps launchTimestamp + lastBurnBlock
balanceOf(address)external viewstandard ERC-20 read
allowance(address, address)external viewstandard ERC-20 read
approve(address spender, uint256 value)externalsets allowance · emits Approval
transfer(address to, uint256 value)externalwraps _transfer
transferFrom(address from, address to, uint256 value)externalallowance-aware · max(uint256) = infinite
_transfer(from, to, value)internalCORE 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)privatetokens → WETH via V2 router → taxReceiver · try/catch-safe · clears stale allowance on failure
_burnAccumulated()internalflushes contract balance → 0x…dEaD · emits TaxBurned
triggerBurn()externalanyone-callable post-launch poke · requires ≥69 blocks since last burn
rescueStuckETH()externaltaxReceiver-only · sends stuck ETH to the pre-committed taxReceiver address

> §8 · HARDCODED VALUES

CONSTANTS
constantvaluenote
totalSupply69_000_000_000 × 10^18// fixed at deploy · never mints · never burns except via tax altar
TAX_BPS69// 0.69% on every taxed transfer, post-launch
LAUNCH_BUY_BPS600// 6% buy tax during launch window
LAUNCH_SELL_BPS900// 9% sell tax during launch window
LAUNCH_DURATION9 minutes// measured from launchTimestamp (deploy)
BURN_INTERVAL69 blocks// ~14 min on Ethereum mainnet
MAX_TX_BPS69// 0.69% max per tx (buys & sells, launch window only)
MAX_WALLET_BPS69// 0.69% max wallet on buys (launch window only)
MAX_SWAP_BPS50// 0.5% of supply cap per launch-window auto-swap
SWAP_THRESHOLD35_000_000 × 10^18// dust floor — below this no auto-swap fires
SHIP_BPS69// 0.69% shipped to SHIP_RECEIVER by the factory
LP_ETH_AMOUNT0.01 ETH// fixed initial liquidity · sent with factory deploy tx
UNISWAP_ROUTER0x7a25…488D// Uniswap V2 Router02 (mainnet)
DEAD0x000…dEaD// LP + burn destination · provably unspendable

> §9 · WHAT THE CHAIN BROADCASTS

EVENTS
eventsourcewhen it fires
Transfer(from, to, value)tokenERC-20 standard · emitted twice per taxed transfer (tax leg + net leg)
Approval(owner, spender, value)tokenERC-20 standard
TaxBurned(amount, atBlock)tokenevery successful post-launch burn
TaxSwapped(tokensIn)tokenevery successful launch-window tax swap
TaxSwapFailed(tokensIn)tokenemitted if the nested swap reverts · tokens stay accumulated
ETHRescued(to, amount)tokenevery rescueStuckETH call · to is always taxReceiver
ERC69Deployed(token, pair, deployer)factoryfires once per factory deployment · deployer = the EOA that sent 0.01 ETH

> §10 · WHAT THE CONTRACT CAN & CANNOT DO

SECURITY MODEL

CAN · 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.

← back to $erc
githubx / twitterERC-69 // spec v1.0 // immutable