Protocol Documentation
ERC-20 on Base with linear time-weighted reflections, auto-LP compounding, and an autonomous tiered burn governor. No off-chain keepers. No minting after deployment. 1B fixed supply.
Contents
01
$FIRE is a fully autonomous, self-compounding reflection token on Base. It requires no off-chain infrastructure, no keeper bots, and no manual intervention. All mechanics execute automatically as a side-effect of ordinary buy and sell transactions.
Every buy and sell generates a 4% tax routed into two parallel mechanisms:
2% → Liquidity Pool
Tax tokens accumulate until they reach 0.1% of supply, then the contract automatically sells half for ETH and pairs it with the remaining half via Uniswap V2 — permanently deepening the liquidity floor.
2% → Holder Rewards
Tax tokens are distributed to all holders every hour, weighted by each holder's balance × time held. Hold longer, earn more per token.
On top of rewards, a tiered burn governor monitors whale concentration. When enough large holders have held long enough, a fraction of rewards is permanently burned, creating autonomous deflationary pressure that scales with accumulation.
02
| Name | FIRE Token |
| Symbol | $FIRE |
| Decimals | 18 |
| Total Supply | 1,000,000,000 (fixed forever) |
| Mintable | No — _mint called once in constructor only |
| Network | Base (chainId 8453) |
| DEX | Uniswap V2 |
| Buy Tax | 4% (2% LP + 2% rewards) |
| Sell Tax | 4% (2% LP + 2% rewards) |
| Wallet-to-Wallet | 0% — tax only on AMM trades |
03
Tax intercepts every transfer at the lowest level of OpenZeppelin's ERC-20 implementation, ensuring it cannot be circumvented by interacting directly with the pair or routing through a secondary contract.
Buy/Sell detected (AMM pair involved): taxAmount = transfer * 4% lpTax = taxAmount / 2 (2% of transfer) rewardTax = taxAmount / 2 (2% of transfer) Tax tokens held in contract Net amount delivered to buyer/seller
| Buy from Uniswap | 4% tax applied |
| Sell to Uniswap | 4% tax applied |
| Wallet → Wallet | No tax |
| Exempt address | No tax |
A one-way tradingOpen flag prevents all non-exempt transfers until the owner calls openTrading(). This is irreversible — once open, it cannot be closed.
04
Every hour, accumulated reward tokens are distributed to all holders. Distribution triggers automatically on the next taxed transfer after the interval elapses. Tokens move directly from the contract to each holder's wallet — no claiming required.
holdScore = balance * secondsHeld Your share = holdScore / totalHoldScore (all holders)
05
LP injection is triggered by accumulation volume, not time. When the LP accumulator reaches 1,000,000 tokens (0.1% of supply), the contract automatically:
During high-volume periods, injections happen more frequently. During quiet periods, the contract simply accumulates. The LP accumulator is zeroed before any external call, preventing reentrancy.
06
The burn governor introduces deflationary pressure proportional to whale concentration. When enough addresses have held large positions long enough, a fraction of the reward pool is permanently burned instead of distributed.
An address qualifies as a whale when it holds ≥ 100,000 tokens continuously. Any dip below this threshold fully resets the clock.
| Tier | Whales required | Hold required | Rewards burned |
|---|---|---|---|
| 0 | < 100 | Any | 0% (inactive) |
| 1 | >= 100 | >= 15 days | 10% |
| 2 | >= 200 | >= 30 days | 20% |
| 3 | >= 500 | >= 45 days | 30% |
| 4 | >= 800 | >= 60 days | 40% |
Both conditions must be simultaneously true. The contract evaluates from Tier 4 down and applies the highest qualifying tier. If no tier qualifies, burn rate is 0% and all rewards go to holders.
If whales sell, their clocks reset, the qualifying count falls, and the burn tier drops automatically — no owner action needed. Burned tokens are sent to 0xdEaD, permanently removing them from circulation.
07
Every address has two independent clocks:
holdStart
When you began holding. Used for reward scoring. Resets to zero on any sell to AMM.
whaleStart
When you first crossed the 100k token threshold. Used by the burn governor. Resets if balance drops below 100k.
| Event | holdStart | whaleStart |
|---|---|---|
| First buy | Set to now | Set if >= 100k |
| Buy more (already holding) | Unchanged | Set if newly crosses 100k |
| Receive rewards | Unchanged | Set if crosses 100k |
| Sell any amount to AMM | Reset to 0 | Reset if < 100k |
| Wallet transfer out (partial) | Unchanged | Reset if < 100k |
| Wallet transfer out (all) | Reset to 0 | Reset to 0 |
| secondsHeld(addr) | Seconds since holdStart (max 2 years) |
| holdScore(addr) | balance × secondsHeld |
| rewardShare(addr) | Your fraction of next distribution (scaled to 1e18) |
| pendingReward(addr) | Estimated tokens from next distribution |
08
| openTrading() | Enable public trading (irreversible) |
| setExempt(addr, bool) | Add/remove tax exemption |
| setAMMPair(addr, bool) | Register additional AMM pairs |
| forceInjectLP() | Inject LP below threshold |
| rescueETH(amount) | Recover stranded ETH |
| rescueTokens(token, amount) | Recover stuck tokens (LP portion protected) |
| manualInjectLP() | Trigger LP injection if threshold met |
| manualDistribute() | Trigger reward distribution immediately |
| manualCheckBurnTier() | Force burn tier re-evaluation |
09
Tax split math error
Original code double-divided by basis points, sending 98% of tax to LP and ~2% to rewards. Fixed to a clean 50/50 split.
rescueTokens always returned 0
Arithmetic identity made protected amount always equal contract balance. Fixed to only protect the LP accumulator portion.
10
11
| Uniswap V2 Router | 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24 |
| WETH on Base | 0x4200000000000000000000000000000000000006 |
| $FIRE Token | 0x5B81eC5d786515a00686DD901C97835DB2865383 |