◼ Whitepaper.txt — $TAB Token
$TAB
A Browser-Mined Token on Base — Technical Whitepaper
Version 1.0
Chain Base (chain ID 8453)
Contract tab256.fun
License MIT
Team allocation 0%
◼ 1. Abstract

$TAB is an ERC-20 token on Base that distributes 90% of its supply exclusively through browser-based proof-of-work mining. Any device with a browser can mine — no GPU, no staking, no presale allocation. Open a tab, earn $TAB.

Users submit a proof-of-work nonce that, when hashed with their personal challenge, falls below the current difficulty threshold. A Uniswap V4 self-hook captures swap fees for the contract; liquidity is permanently locked after pool seeding.

◼ 2. Motivation

Most token launches front-load value to insiders: team allocations, VC rounds, pre-mine, or airdrop lists. $TAB has none of these. The only way to earn $TAB at launch is to run computation — a browser tab running a keccak256 loop.

Base's 2-second block times make browser mining practical. A single mint takes roughly 60 seconds — fast enough to feel rewarding, slow enough to prevent spam. Phones, laptops, and desktop CPUs all compete on equal footing; no specialised hardware exists for keccak256 at this scale.

The Uniswap V4 self-hook creates a sustainable fee loop: every swap on the TAB/ETH pool returns 1% to the contract. The deployer can claim these fees, funding ongoing development without holding any pre-minted supply.

◼ 3. Mining Mechanism
Challenge

Each address has a unique, deterministic challenge derived on-chain. The challenge changes after every successful mint by that address, preventing nonce reuse and making front-running meaningless (a stolen nonce is invalid against a different address).

Proof-of-Work

A valid proof satisfies:

keccak256(abi.encode(challenge, nonce)) < currentDifficulty

Where challenge is a bytes32 and nonce is a uint256. The ABI encoding is a flat 64-byte buffer: challenge in bytes 0–31, nonce right-aligned in bytes 32–63.

// abi.encode(bytes32 challenge, uint256 nonce) fn abi_encode(challenge: &[u8; 32], nonce: u64) -> [u8; 64] { let mut buf = [0u8; 64]; buf[..32].copy_from_slice(challenge); buf[56..64].copy_from_slice(&nonce.to_be_bytes()); // right-aligned buf }
Browser WASM Miner

Mining runs entirely in the browser via a Rust → WebAssembly module compiled with wasm-pack. A Web Worker runs batches of 50,000 hashes per tick, yielding between batches via setTimeout(tick, 0) so the UI stays responsive. Expected throughput: 1–3 MH/s on a modern CPU core.

No installation required. The miner runs in any modern browser tab. Connect a wallet, click Start Mining, wait ~60 seconds, submit. Gas on Base costs roughly $0.001.
Submitting a Proof

Once a valid nonce is found, the user calls mine(nonce) on the contract. The contract re-executes the hash verification on-chain. If valid, it mints the current era reward to the caller and updates the challenge for that address.

◼ 4. Tokenomics
AllocationAmount (TAB)%Notes
Genesis Sale 1,050,0005% 0.01 ETH / 1,000 TAB · no minimum · max 5,000 TAB per tx
LP Seed (locked) 1,050,0005% Paired with genesis ETH proceeds into Uniswap V4 · LP NFT burned to 0x000…dEaD
Mining Rewards 18,900,00090% Distributed by proof-of-work · halving every 100,000 mints
Team / VC / Airdrop 00%
Halving Schedule
1
100 TAB
mints 0 – 100k
2
50 TAB
mints 100k – 200k
3
25 TAB
mints 200k – 300k
4
12.5 TAB
mints 300k – 400k

Halving continues every 100,000 mints until the 21,000,000 TAB hard cap is reached. After Era 64, the reward rounds to zero and mining ceases permanently.

◼ 5. Difficulty Adjustment

Difficulty adjusts every epoch to target one global mint per 30 blocks (~60 seconds on Base). If mining is faster, difficulty increases; if slower, it decreases.

ParameterValueRationale
EPOCH_BLOCKS600600 × 2s = 20 min epochs
TARGET_BLOCKS_PER_MINT3030 × 2s = 60s per global mint
Initial difficulty2^224 − 1type(uint256).max >> 32
new_difficulty = old_difficulty × TARGET_BLOCKS_PER_MINT × actual_mints
────────────────────────────────────────────────
EPOCH_BLOCKS

At initial difficulty, the expected number of hashes to find a valid nonce is approximately 232 ≈ 4.3 billion. At 1–3 MH/s in a browser tab, this takes 24–72 minutes for a single miner. As more miners join, difficulty rises to maintain the 60-second global target.

◼ 6. Genesis Sale

The genesis sale is a fixed-price window that bootstraps the initial liquidity pool. It is not a fundraise — every wei raised goes directly into the Uniswap V4 pool, paired with an equal allocation of TAB, and the LP NFT is immediately burned.

ParameterValue
Genesis cap1,050,000 TAB (5% of supply)
Price0.01 ETH per 1,000 TAB
Total raise (if sold out)10.5 ETH
Max per transaction5,000 TAB (5 units)
Minimum buyNone (1 unit = 1,000 TAB)
Overpayment handlingExcess ETH refunded on-chain
Genesis is optional. After it closes, TAB is available exclusively through mining or buying on the open market. Genesis participants get early access at a fixed price; they do not receive any advantage in mining.
◼ 7. Security Considerations
Front-Running

The mining challenge is address-specific. A stolen nonce submitted from a different address will fail on-chain. Base uses a centralised sequencer (Coinbase) with no public mempool, further reducing front-running surface. For additional protection, the Flashbots Protect Base endpoint can be used when submitting mine().

Reentrancy

All state-mutating functions are protected with OpenZeppelin's ReentrancyGuard.

CREATE2 Deployment

The contract is deployed via the Arachnid CREATE2 factory (0x4e59b44847b379578588920ca78fbf26c0b4956c). forge create --create2 silently ignores the flag in current tooling and deploys via regular CREATE — always use raw calldata via cast send to the factory.

Controller Key

controller is set to tx.origin in the constructor. It can call claimFees() only. It cannot mint tokens, change supply, or modify the pool. If the controller key is lost, fees accumulate in the contract permanently — this is acceptable, not catastrophic.

◼ 8. Contract Constants
ConstantValueNotes
TOTAL_SUPPLY21,000,000 TABHard cap, matches Bitcoin's symbolic 21M
MINING_SUPPLY18,900,000 TAB90% — all PoW distribution
GENESIS_CAP1,050,000 TAB5%
GENESIS_LP1,050,000 TAB5% — paired with genesis ETH in V4 pool
GENESIS_PRICE0.01 ETHPer 1,000-token unit
MAX_UNITS_PER_TX5Max 5,000 TAB / 0.05 ETH per tx
BASE_REWARD100 TABEra 1 reward per mint
ERA_MINTS100,000Mints before halving
TARGET_BLOCKS_PER_MINT30~60s on Base (2s blocks)
EPOCH_BLOCKS600~20 min difficulty window
LP_FEE0Hook collects swap fees instead
$TAB
tab256.fun · Base Network
← Home Mine $TAB GitHub BaseScan
Done tab256.fun/whitepaper