Docs · Litepaper v2.0 · Draft for review

CYBERHOOD Genesis Economy

The $CYBERHOOD token, the Genesis NFTs and the HoodHook on Uniswap v4

October 2026 · Not audited. Parameters are proposals and will change after testnet data, audit and legal review.

1. Summary

CYBERHOOD is a cyberpunk loot-hunting game that runs in the browser. Hunters meet in Neon City, a 3D co-op hub, then step through gates into side-scrolling contracts, a 100 v 100 siege, a 4–10 player raid, kart races and 1 v 1 duels. The game drops loot, not tokens: value moves between players through the marketplace, and rewards come from real platform revenue.

Version 2 moves the whole on-chain economy onto one Uniswap v4 pool with one custom hook, the HoodHook. Every swap of $CYBERHOOD runs through the hook, which sets a dynamic fee, takes a small protocol fee, and routes it to the Player Reward Pool, buyback and burn, and the pool's own liquidity providers. The same hook gives Genesis NFT holders a fee discount, pays referrers, records swap activity for the Hunter Score and protects the launch from snipers.

1Uniswap v4 pool · ETH / $CYBERHOOD
0.30%Base LP fee, dynamic
0.20%HoodHook protocol fee
40%of hook fees to the Player Reward Pool
444Genesis NFTs · 33 designs
0.01–0.05 ETHGenesis mint price by rarity

Rewards follow play activity, never token holdings. Nothing in this document is an offer of securities, a promise of profit or financial advice.

2. Design principles

3. Architecture

The game server stays off-chain. Ownership, trading and fee routing live in a small set of contracts around a single Uniswap v4 pool. The launch chain is any EVM chain where the Uniswap v4 PoolManager is deployed (for example Unichain, Base, Arbitrum or Ethereum). Robinhood Chain remains an option if Uniswap v4 is live there at launch; this must be verified against the official deployment list before going to mainnet.

ContractStandardRole
CyberhoodTokenERC-20$CYBERHOOD. Fixed supply of 1,000,000,000. Burnable.
HoodHookUniswap v4 hookAttached to the ETH / $CYBERHOOD pool. Dynamic fee, protocol fee, discounts, referrals, swap XP, launch guard, LP lock, TWAP oracle.
GenesisItemsERC-721 + ERC-2981444 Genesis items in 33 designs. 5% royalty.
GameItemsERC-1155Mech parts, armor, skins minted on demand from server-signed EIP-712 vouchers.
Marketplace—Fixed-price listings and 24 h auctions in ETH or $CYBERHOOD. 5% fee.
RewardPool—Collects the player share of every fee stream and pays weekly Merkle claims.
GuildVault—Holds guild liquidity positions in the pool and reports time-weighted liquidity.
SeasonLaunchUniswap v4 hookVariant of HoodHook used for partner token launches each season.
TreasurySafe 3/5 + 48 h timelockOwns protocol liquidity and the only keys that can tune parameters.
Data flow
OFF-CHAIN (game server)                 ON-CHAIN
- Matches, drops, Hunter Score          - PoolManager (Uniswap v4 singleton)
- Unminted inventory                    - ETH / $CYBERHOOD pool  ──►  HoodHook
- Weekly reward Merkle root      ──►    - RewardPool.claim(proof)
- EIP-712 mint vouchers          ──►    - GameItems.mint(voucher)
- Indexer reads hook events      ◄──    - SwapXP, Referral, FeeRouted, Burn

4. Why a Uniswap v4 hook

Uniswap v4 keeps every pool inside one singleton contract, the PoolManager, and lets a pool attach a hook contract that runs before and after pool actions. That makes it possible to put game-economy rules directly in the trade path instead of wrapping the token in transfer taxes.

5. The HoodHook

The HoodHook is attached to a single pool: native ETH / $CYBERHOOD, dynamic fee, tick spacing 60. The table lists the callbacks it enables and what each one does.

CallbackEnabledPurpose
beforeInitializeYesAccept only the ETH / $CYBERHOOD key with the dynamic-fee flag, once.
afterInitializeYesRecord the launch block and start the price oracle.
beforeAddLiquidityYesLaunch window: only the Treasury may add liquidity. Register GuildVault positions.
afterAddLiquidityYesStart the time-weighted liquidity clock for guild positions.
beforeRemoveLiquidityYesBlock removal of locked protocol positions until the unlock time.
beforeSwapYesCompute the dynamic LP fee, apply the launch guard and the holder discount.
afterSwapYesTake the protocol fee, route it, record swap XP and referral credit, update the oracle.
afterSwapReturnDeltaYesLets afterSwap keep the protocol fee from the unspecified currency.
beforeDonate / afterDonateNoNot used.
Other return-delta flagsNoNot used. Liquidity providers are never charged by the hook.

Who is the trader? Inside a hook, msg.sender is the router, not the user. The HoodHook only grants discounts, referral credit and XP when the swap comes through an allowlisted router that exposes msgSender() (the v4 periphery routers and the Universal Router do), or when the user signs the hookData. Swaps from any other router still work at the normal fee.

5.1 Dynamic LP fee

The LP fee is recalculated on every swap. It starts high on sells during launch, falls to the base fee, and rises briefly when the price moves sharply inside one block.

ComponentValueRule
Base fee0.30%Normal trading, both directions.
Launch sell fee8% → 0.30%Falls linearly over the first 72 hours after liquidity opens.
Launch buy fee1% → 0.30%Falls linearly over the first 24 hours.
Volatility surcharge+0.20%When the pool tick has moved more than 100 ticks (about 1%) in the same block. Makes sandwich attacks costly.
Circuit breaker+2% on sellsFor 30 minutes when the 1-hour TWAP falls more than 25%. Never blocks a sell.
Hard cap10%MAX_LP_FEE is a constant. No parameter or owner can exceed it.

5.2 Protocol fee and where it goes

On top of the LP fee, the hook keeps 0.20% of each swap's output through afterSwapReturnDelta. The fee is held as ERC-6909 claims and swept once per epoch (about one hour) to keep each swap cheap.

DestinationShareWhat happens
Player Reward Pool40%Paid out weekly by Hunter Score (section 8).
Buyback & burn30%ETH share buys $CYBERHOOD in the pool and burns it; the token share is burned directly.
LP boost20%Given to in-range liquidity providers with donate().
Operations10%Servers, audits and bounties, held by the Treasury.

The protocol fee is capped at 0.50% in code. Governance can lower it or change the split between the four destinations, but the Player Reward Pool share cannot go below 30%.

5.3 Genesis holder discount

A trader who owns a Genesis NFT pays less protocol fee. The router passes the tokenId in hookData and the hook checks ownerOf against the verified trader. Only the best discount applies; discounts never reduce the LP fee, so liquidity providers are not affected.

HoldingProtocol fee discountEffective protocol fee
Verified Hunter Pass (no NFT)10%0.18%
Common Genesis10%0.18%
Rare Genesis20%0.16%
Epic Genesis30%0.14%
Legendary Genesis40%0.12%
Mythic Genesis50%0.10%

5.4 Swap XP (Hunter Score)

Swaps from a verified Hunter Pass wallet emit a SwapXP event. The game server indexes it and adds points to the weekly Hunter Score. Gameplay stays the main source of score; swap XP is a small, capped bonus.

5.5 Referral rebate

A new Hunter can join with a referral code. For 180 days, 10% of the protocol fee from that Hunter's swaps is credited to the referrer as claimable ERC-6909 balance. The rebate comes from the protocol fee, never from the new player's trade.

5.6 Launch guard and liquidity lock

5.7 Price oracle for in-game prices

The hook keeps a ring buffer of price observations and exposes a time-weighted average price. In-game services such as Mech repair are quoted in US dollars; the GameBank converts them to $CYBERHOOD using the 30-minute TWAP, so one large trade cannot change what players pay.

5.8 Guild liquidity vaults

Guilds can provide liquidity through a GuildVault. The hook records the liquidity and how long it stays. Each guild earns territory influence equal to the square root of its time-weighted liquidity, and that bonus is capped at +10% of a territory-war score, so liquidity helps a guild but cannot replace winning battles.

6. Genesis NFT collection

444 pixel-art weapons, armor and relics in 33 designs, minted once for Season 0 as ERC-721 tokens with a 5% ERC-2981 royalty. Rarer designs have fewer editions and a higher mint price.

RarityDesignsEditions eachItemsMint price
Mythic64240.044–0.050 ETH
Legendary108800.032–0.040 ETH
Epic10141400.022–0.030 ETH
Rare6251500.015–0.020 ETH
Common150500.010 ETH
Total33—444—

7. $CYBERHOOD token

Fixed supply of 1,000,000,000 $CYBERHOOD. No mint function after deployment. The allocation below is the draft from the game design document and must be reviewed by a tokenomics specialist.

AllocationShareUnlock
Community & players40%Season 0 airdrop 8% (50% at launch, 50% over 6 months) · season reward fund 22% (decreasing over 4 years) · ecosystem & launchpad 10%
Team15%12-month cliff, then 36 months linear
Investors15%6–12-month cliff, then 24 months linear
Liquidity10%Seeded into the v4 pool, locked 12 months by the HoodHook
Treasury15%Safe multisig with timelock
Marketing5%24 months linear

Sinks

8. Player Reward Pool

All player shares of fees land in the RewardPool contract, a public on-chain address. Each week the game server computes Hunter Scores, publishes a Merkle root and players claim. The pool is split as in the game design document.

Weekly sharePortionWho receives it
Activity fund50%Every Hunter, by the square root of weekly Hunter Score, capped per account
Challenge fund20%Top 500 of the weekly solo challenge (normalised gear, pure skill)
PvP fund15%Arena, contested maps and siege
Guild fund15%Top 50 guilds, shared by contribution

Square-root weighting means a Hunter who plays four times as much earns twice as much, not four times. Together with the 2,000-point weekly cap and account verification, this keeps bots and whales from draining the pool.

Revenue streamShare to the Player Reward Pool
HoodHook protocol fee40%
Marketplace and auction fee (5%)40% of the fee (2% of the sale)
Launchpad listing fee and raise share50%
Sponsorship: Hub billboards, branded stages, events40%
Cosmetics, name changes, effects30%
Genesis royalties (5%)50% of the royalty

9. Season launchpad on Uniswap v4

Partner projects launch their tokens each season in their own v4 pool with the SeasonLaunch hook, a variant of the HoodHook.

10. Key flows

A swap through the HoodHook

  1. The Hunter swaps ETH for $CYBERHOOD in the CYBERHOOD app. The router adds hookData: Genesis tokenId (optional) and referral code (optional).
  2. beforeSwap reads the verified trader from the router, applies the launch guard, and returns the dynamic LP fee with the override flag.
  3. The PoolManager executes the swap at that fee; liquidity providers earn the LP fee as usual.
  4. afterSwap takes the protocol fee (after any holder discount) from the output, credits the referrer, emits SwapXP and updates the oracle.
  5. Once per epoch, anyone can call sweep(): fees move to the RewardPool, the burn, the LP donate and operations.

Minting a game item

  1. A drop lands in the Hunter's off-chain inventory.
  2. To mint it, the Hunter asks the server for an EIP-712 voucher. The server locks the off-chain copy so it cannot be duplicated.
  3. The Hunter calls GameItems.mint(voucher). Bringing an item back into the game burns it or locks it in escrow.

Weekly rewards

  1. At the end of each week the server computes Hunter Scores with the square-root rule and caps.
  2. It publishes the Merkle root to the RewardPool through the Treasury timelock.
  3. Hunters claim at any time; unclaimed rewards roll into the next season after 90 days.

11. Security and governance

12. Roadmap

PhaseTargetDeliverables
Season 0 · Early accessNowBrowser demo, Hunter Pass, Genesis preview, Season 0 points
Hook testnetQ4 2026HoodHook and RewardPool on a v4 testnet, public fee dashboard, bug bounty
AuditQ1 2027Two audits, invariant test suite, parameter review with testnet data
Genesis mintQ1 2027444 Genesis NFTs, allowlist then public
Token & pool launchQ2 2027$CYBERHOOD, ETH / $CYBERHOOD pool with HoodHook, Season 0 airdrop
Season 1Q2 2027Weekly reward claims, guild vaults, first SeasonLaunch partner

13. Parameter sheet

ParameterValueRange allowed by code
PoolNative ETH / $CYBERHOOD, dynamic fee, tick spacing 60Fixed
Base LP fee3000 (0.30%)500 – 10,000
Launch sell fee / decay80,000 (8%) over 72 h≤ 100,000
Launch buy fee / decay10,000 (1%) over 24 h≤ 100,000
Volatility surcharge+2000 when > 100 ticks per block0 – 10,000
Circuit breaker+20,000 on sells for 30 min after −25% TWAP 1 h0 – 30,000
Protocol fee2000 (0.20%)0 – 5000
Protocol fee split40 / 30 / 20 / 10Player share ≥ 30%
Holder discount10 – 50% by rarity0 – 50%
Swap XP1 point per 0.01 ETH · 0.3 ETH per day · 200 per weekOff-chain
Referral rebate10% of protocol fee, 180 days0 – 20%
Launch guard30 blocks, 0.1% of supply per swapFixed at deploy
Protocol LP lock12 monthsFixed at deploy
GovernanceSafe 3/5 + 48 h timelock—

Fees in this sheet are in Uniswap units of hundredths of a basis point (1,000,000 = 100%).

Appendix · HoodHook interface sketch

Solidity (sketch, not audited)
contract HoodHook is BaseHook {
    uint24 public constant MAX_LP_FEE = 100_000;        // 10%
    uint24 public constant MAX_PROTOCOL_FEE = 5_000;    // 0.50%

    function getHookPermissions() public pure override
        returns (Hooks.Permissions memory p)
    {
        p.beforeInitialize = true;      p.afterInitialize = true;
        p.beforeAddLiquidity = true;    p.afterAddLiquidity = true;
        p.beforeRemoveLiquidity = true;
        p.beforeSwap = true;            p.afterSwap = true;
        p.afterSwapReturnDelta = true;
    }

    function _beforeSwap(address router, PoolKey calldata key,
        SwapParams calldata params, bytes calldata hookData)
        internal override returns (bytes4, BeforeSwapDelta, uint24)
    {
        // trader = allowlisted router's msgSender() or a signed hookData
        address trader = _verifiedTrader(router, hookData);
        _launchGuard(trader, params);
        // base + launch decay + surcharges, never above MAX_LP_FEE
        uint24 fee = _dynamicFee(key, params.zeroForOne);
        return (this.beforeSwap.selector, BeforeSwapDeltaLibrary.ZERO_DELTA,
                fee | LPFeeLibrary.OVERRIDE_FEE_FLAG);
    }

    function _afterSwap(address router, PoolKey calldata key,
        SwapParams calldata params, BalanceDelta delta,
        bytes calldata hookData)
        internal override returns (bytes4, int128)
    {
        (Currency feeCcy, uint256 out) = _unspecified(key, params, delta);
        // protocol fee after the holder discount, kept as ERC-6909 claims
        uint256 fee = out * _protocolFee(router, hookData) / 1_000_000;
        poolManager.mint(address(this), feeCcy.toId(), fee);
        _creditReferrer(router, hookData, feeCcy, fee);
        _emitSwapXP(router, hookData, key, delta);
        _observe(key);
        return (this.afterSwap.selector, int128(int256(fee)));
    }
}