Protocol Documentation

$FIRE Token

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.

01

Protocol Overview

$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

Token Parameters

NameFIRE Token
Symbol$FIRE
Decimals18
Total Supply1,000,000,000 (fixed forever)
MintableNo — _mint called once in constructor only
NetworkBase (chainId 8453)
DEXUniswap V2
Buy Tax4% (2% LP + 2% rewards)
Sell Tax4% (2% LP + 2% rewards)
Wallet-to-Wallet0% — tax only on AMM trades
The entire supply is minted to the deployer in the constructor. No external mint function exists. Supply can only decrease over time as the burn governor routes tokens to the dead address.

03

Tax Mechanics

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

What gets taxed

Buy from Uniswap4% tax applied
Sell to Uniswap4% tax applied
Wallet → WalletNo tax
Exempt addressNo tax

Trading guard

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

Reward Distribution

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.

Hold score formula

holdScore = balance * secondsHeld

Your share = holdScore / totalHoldScore (all holders)
Time and size are equally weighted. 10,000 tokens held 30 days = 20,000 tokens held 15 days.
New buyers start at zero. Your score grows continuously from your first buy.
Adding tokens keeps your clock. Buying more doesn’t reset your hold time.
Any sell resets your clock to zero. Sell 1 token and you lose 100% of accrued time.
2-year cap. Prevents oldest wallets from permanently dominating rewards.
Selling any amount to the AMM resets your hold timer completely, regardless of how much you sell. Your multiplier drops to zero and you start over.

05

LP Injection

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:

  1. Splits the accumulated tokens in half
  2. Sells one half for ETH via Uniswap
  3. Pairs the other half with the ETH as new liquidity
  4. LP tokens sent to the owner wallet

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.

Burn activity never affects liquidity injection. Both systems run independently on every taxed transaction.

06

Tiered Burn Governor

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.

Whale qualification

An address qualifies as a whale when it holds ≥ 100,000 tokens continuously. Any dip below this threshold fully resets the clock.

Tier table

TierWhales requiredHold requiredRewards burned
0< 100Any0% (inactive)
1>= 100>= 15 days10%
2>= 200>= 30 days20%
3>= 500>= 45 days30%
4>= 800>= 60 days40%

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.

Fully reversible

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.

The burn governor has zero visibility into LP funds. No matter what burn tier is active, the LP accumulator continues growing undisturbed.

07

Hold-Time Tracking

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.

Clock rules

EventholdStartwhaleStart
First buySet to nowSet if >= 100k
Buy more (already holding)UnchangedSet if newly crosses 100k
Receive rewardsUnchangedSet if crosses 100k
Sell any amount to AMMReset to 0Reset if < 100k
Wallet transfer out (partial)UnchangedReset if < 100k
Wallet transfer out (all)Reset to 0Reset to 0

View functions

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

Admin & Public Functions

Owner-only

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)

Anyone can call

manualInjectLP()Trigger LP injection if threshold met
manualDistribute()Trigger reward distribution immediately
manualCheckBurnTier()Force burn tier re-evaluation

09

Security

Audit findings (resolved)

Critical — Fixed

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.

Critical — Fixed

rescueTokens always returned 0

Arithmetic identity made protected amount always equal contract balance. Fixed to only protect the LP accumulator portion.

Confirmed safe

Reentrancy. LP accumulator zeroed before external calls. All public functions carry nonReentrant.
No minting. _mint is internal, called once in constructor. No external mint function exists.
Trading guard. All transfers between non-exempt addresses revert until openTrading() is called.

Accepted risks

LP swap slippage (minAmountOut = 0). Bounded by injection threshold size (~0.1% of supply per event). Hardcoded slippage would cause reverts during normal volatility.
Unbounded holder list. Gas scales with all-time unique holders. Monitor holderCount() — consider migration above ~1,000 unique holders.

10

Known Limitations

O(N) gas scaling. Both reward distribution and whale counting iterate all holders. Gas grows with all-time unique count, not current holders.
Early-buyer advantage. Adding tokens doesn’t reset your clock. Early buyers who DCA accumulate faster in hold-score terms. This is intentional.
1-hour burn cache. Burn tier updates at most once per hour. A whale who sells immediately after evaluation still counts for up to an hour. Call manualCheckBurnTier() to force re-evaluation.
Token-denominated rewards. All rewards are in $FIRE tokens. USD value fluctuates with price. No on-chain oracle.

11

Contract Addresses (Base)

Uniswap V2 Router0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
WETH on Base0x4200000000000000000000000000000000000006
$FIRE Token0x5B81eC5d786515a00686DD901C97835DB2865383