Documentation · Glossary
Glossary
Uniswap v4 terms as Uniswap defines them, and GENE terms as the RC4 contracts define them.
Two vocabularies appear in these docs. Uniswap v4 terms keep Uniswap's definitions and link to the Uniswap developer documentation. GENE terms are defined by the RC4 contracts at tag rc4-audit-candidate (aca5fcd), cited by file and line.
#Uniswap v4 terms
| Term | Definition | Source |
|---|---|---|
| Dynamic fee | "A specific type of swap fee paid by swappers that directly accrue to liquidity providers", distinct from protocol fees and hook fees. Whether a pool has one is "determined at pool creation and is immutable". GENE's pool has a static fee | Dynamic fees |
| ERC-6909 claims | Tokens left inside the PoolManager can be represented by an ERC-6909 token the PoolManager mints "representing their claim" | ERC-6909 |
| Flash accounting | "Allows temporary token imbalances during execution, provided balances net to zero by transaction end". Each operation updates an internal net balance (delta), inside unlock and unlockCallback |
Flash accounting |
| Hook | "External smart contracts that can be attached to individual pools. Every pool can have one hook but a hook can serve an infinite amount of pools" | Hooks |
| Hook fee | "Custom fees implemented entirely within a hook contract", separate from swap fees and protocol fees. GENE takes no hook fee | Fees |
| Hook permissions | The callbacks a hook implements, encoded in its address: "A hook contract must be deployed to an address whose low bits encode exactly the permissions it implements". Ten call flags plus four return-delta flags | Hooks |
| Liquidity (L), liquidity units | Uniswap's glossary defines liquidity as "token capital stored in a Uniswap pool"; its guides measure a position's liquidity in liquidity units (LiquidityAmounts), and StateView getLiquidity returns "the total liquidity currently active". Uniswap has no separate glossary entry for L |
Glossary; Create a pool; StateView |
| LP fee | The pool's lpFee, "in hundredths of a bip", paid by swappers to liquidity providers. Set in the PoolKey fee field "in pips, i.e. 3000 = 0.30%" |
Read pool state; Create a pool |
| PoolId | The bytes32 identifier the PoolManager associates with a pool, derived with key.toId() |
PoolManager |
| PoolKey | The struct that identifies a pool: currency0, currency1 (sorted), fee, tickSpacing and hooks |
Create a pool |
| PoolManager | "The central contract in v4 responsible for managing all pools within the singleton architecture" | Glossary |
| Position | "An instance of liquidity defined by lower and upper ticks and the liquidity amount assigned to that range" | Glossary |
| Protocol fee | "A portion of swap fees directed to the protocol rather than to LPs"; for v4 it "can be enabled through governance". It is outside GENE's control | Fees |
| Singleton | The v4 design in which "the PoolManager contract now serves as a single entry point for all liquidity pools" | PoolManager |
| StateView | The periphery contract for off-chain reads: "use StateView with an RPC for frontends and analytics" | StateView |
| Tick | "A boundary between discrete price points" | Glossary |
| Tick spacing | "The granularity of the pool"; position ticks "must be a multiple of pool.tickSpacing" |
Create a pool |
| Universal Router | "An ETH and ERC20 swap router that aggregates trades across Uniswap v2, v3, and v4. It is unowned and non-upgradeable" | Universal Router |
#GENE terms
| Term | Definition | Source |
|---|---|---|
| Active block | A touched block whose ETH swap volume reached MIN_BLOCK_VOLUME; it adds to activeBlocks and pathTicks when the next block is first touched |
GeneHook.sol:739-745; Genome.sol:23 |
| activeBlocks | The number of active blocks in an epoch, stored in its EpochRecord |
GeneHook.sol:77, GeneHook.sol:114 |
All-time high (athTick) |
The lowest block-start tick ever seen, that is the highest block-start GENE price. Anchor of ask bands | GeneHook.sol:103, GeneHook.sol:770 |
All-time low (atlTick) |
The highest block-start tick at which the pool had active liquidity, that is the lowest such GENE price. Seeded at the opening tick; only increases in ticks. Anchor of every protocol buy | GeneHook.sol:104, GeneHook.sol:266, GeneHook.sol:771-774 |
anchorTick |
The MassAdded field reporting the reference a band was placed against: atlTick for kinds 1 and 4, max(spot, atlTick) for kind 2, min(spot, athTick) for kind 3, the opening tick for kind 0 |
GeneHook.sol:433, GeneHook.sol:485, GeneHook.sol:501, GeneHook.sol:518, GeneHook.sol:546 |
| Ask band | GENE-side Mass placed above the price, ending one GAP beyond min(spot, athTick) (MassAdded kind 3) |
GeneHook.sol:541-552, GeneHook.sol:788-792 |
| Bid band | ETH-side Mass placed at least one GAP below the all-time low, on the grid: METABOLISM bids (kind 1) and the churn tier (kind 4). In every state the tests reach it starts at tick 178,200 or higher and is 1,200 ticks wide | GeneHook.sol:479-491, GeneHook.sol:513-524, GeneHook.sol:782-786; GenePermanence.t.sol:101 |
| Block-start tick | The pool tick at a block's first touch, which is the price the previous touched block left | GeneHook.sol:732-734 |
| Churn tier | The previous closed epoch's revenue not funded by net buying (revenue(e-1) - bid(e-1)), placed as a bid band at the all-time low (MassAdded kind 4) |
GeneHook.sol:509-539 |
| Cooldown | The block wait between keeper calls: started by every non-reverting metabolize() and by a full-allotment regenerate() |
GeneHook.sol:284-286, GeneHook.sol:299-307 |
Cumulative flow (nc, hwm, lwm) |
Cumulative net curve GENE since launch, its all-time high, and the lowest level since that high. Only flow that sets a new hwm funds bids; only flow below lwm funds IMMUNITY |
GeneHook.sol:213-221, GeneHook.sol:840-856 |
| Epoch | EPOCH_BLOCKS consecutive blocks counted from the launch block: (block.number - launchBlock) / EPOCH_BLOCKS |
GeneHook.sol:747; Genome.sol:22 |
| EpochRecord | The one-slot permanent record of a closed epoch: revenue, activeBlocks, pathTicks, ethCommitted, closed. Written only for the last touched epoch at the next touch |
GeneHook.sol:72-81, GeneHook.sol:748-756 |
ethCommitted / geneCommitted |
Cumulative ETH principal placed into bid Mass (kinds 1, 2, 4) and GENE principal placed into ask Mass (kind 3). Historical sums, not balances held | GeneHook.sol:184-185, GeneHook.sol:624-625 |
| Evidence hash | keccak256(abi.encode(g, first, last, EpochRecord[first..last])) over the stored records of gene g's evidence range (for IMMUNITY, the whole observed window); recomputable from storage |
GeneHook.sol:975-982; GeneLens.sol:133-147 |
evolve |
The entry point that folds closed epochs into the gene state machines | GeneHook.sol:311-329 |
| Expression | A gene reaching EXPRESSED, which is final. Emitted as two GeneTransition events in one call |
GeneHook.sol:937-947 |
| Gene | One of four strict-chain state machines: GENESIS (0), METABOLISM (1), REGENERATION (2), IMMUNITY (3) | Genome.sol:57-61; GeneHook.sol:192 |
| Gene states | DORMANT (0), OBSERVING (1), EXPRESSIBLE (2, transient), EXPRESSED (3) | GeneHook.sol:65-70 |
| Genome | The set of compile-time constants in Genome.sol; no function takes one as input |
Genome.sol:4-10 |
| genomeHash | keccak256(Genome.encode()), an immutable of GeneHook |
GeneHook.sol:164, GeneHook.sol:245-246 |
| IMMUNE PRESSURE DETECTED | The only display label for immunityActive() == true. An IMMUNITY placement is shown only from a mined MassAdded event with kind 2 |
GeneHook.sol:138, GeneHook.sol:987-992 |
immunityActive() |
A view: IMMUNITY is EXPRESSED, the last IMM_CONFIRM processed epochs were deployment-stressed, and evolution is caught up. A signal, not a placement |
GeneHook.sol:802-805, GeneHook.sol:987-992 |
| Launcher | The address fixed in the constructor that may call launch() once; no function checks the caller after launch |
GeneHook.sol:33, GeneHook.sol:163, GeneHook.sol:252-255 |
| Mass kind | The MassAdded.kind code: 0 genesis, 1 METABOLISM bid, 2 IMMUNITY bid, 3 ask, 4 churn-tier bid |
GeneHook.sol:138 |
metabolize |
The entry point, open to anyone once METABOLISM is expressed and the cooldown has passed, that harvests LP fees into reserves and places reserves as Permanent Mass within per-epoch budgets and caps | GeneHook.sol:276-291, GeneHook.sol:479-552, GeneHook.sol:655-660 |
Net flow (netGeneMicro) |
Signed GENE leaving the curve in an epoch, in 1e12-wei units: GENE out on buys, GENE in net of the LP fee on sells. Positive means net buying | GeneHook.sol:113, GeneHook.sol:378-383 |
| Net-flow budget | ETH created when an epoch closes: the LP fee rate applied to newly funded net GENE, valued at pLow. bid from net buying, imm from net selling; read during the next epoch only |
GeneHook.sol:199-204, GeneHook.sol:834-873 |
| pathTicks | Sum over an epoch's active blocks of each block's start-to-start tick move, clamped at PATH_CLAMP |
GeneHook.sol:78, GeneHook.sol:740-744; Genome.sol:24 |
| Permanent Mass | Every liquidity position GeneHook owns in the canonical pool. The liquidity units cannot be withdrawn: the only modifyLiquidity call adds a non-negative amount. Mass is measured in liquidity units; its ETH/GENE mix moves with price |
GeneHook.sol:28-29, GeneHook.sol:594-608 |
| PlacementSkipped | A placement whose liquidity would exceed v4's per-tick ceiling; nothing is committed or consumed | GeneHook.sol:142-144, GeneHook.sol:619-621 |
pLow |
An epoch's cheapest price (highest tick) over its block starts and its closing tick, used to value its net-flow budget | GeneHook.sol:203, GeneHook.sol:758-761 |
| Pressure | A processed closed epoch that meets a gene's predicate | GeneHook.sol:879-934 |
| Reachable depth | ETH (down) or GENE (up) that protocol positions would provide for a price move of 5%, 10% or 25% from spot, computed by GeneLens.report from current positions |
GeneLens.sol:38-39, GeneLens.sol:209-259 |
regenerate |
The entry point for REGENERATION's bounded buyback and burn. It buys only while the price is no more than about 1% above the all-time-low price; otherwise the call spends nothing | GeneHook.sol:293-309, GeneHook.sol:574-577 |
| Reserves | ethReserve, regenReserve, geneReserve: harvested LP fees not yet placed, held as the hook's ERC-6909 claims |
GeneHook.sol:181-183, GeneHook.sol:707-725 |
| Revenue | The EpochRecord.revenue field: 1% of the ETH buyers paid in during the epoch (the LP fee rate applied to buy-side ETH). Evidence for gene predicates and the churn tier. It is not the fees collected |
GeneHook.sol:76, GeneHook.sol:385-387 |
| Stress (IMMUNITY) | Expression stress: revenue at least IMM_REVENUE and pathTicks at least IMM_PATH_TICKS. Deployment stress: revenue at least IMM_DEPLOY_REVENUE with the same pathTicks threshold, recorded in immuneStressBits |
GeneHook.sol:175-177, GeneHook.sol:881-883 |
Sources (24)
- src/Genome.sol:4-10
- src/Genome.sol:22-24
- src/Genome.sol:57-61
- src/GeneHook.sol:25-38
- src/GeneHook.sol:65-117
- src/GeneHook.sol:138-141
- src/GeneHook.sol:161-166
- src/GeneHook.sol:172-221
- src/GeneHook.sol:245-246
- src/GeneHook.sol:252-316
- src/GeneHook.sol:378-387
- src/GeneHook.sol:493-552
- src/GeneHook.sol:594-627
- src/GeneHook.sol:574-577
- src/GeneHook.sol:655-660
- src/GeneHook.sol:707-718
- src/GeneHook.sol:782-786
- test/invariant/GenePermanence.t.sol:101
- src/GeneHook.sol:734-780
- src/GeneHook.sol:802-873
- src/GeneHook.sol:879-947
- src/GeneHook.sol:975-992
- src/GeneLens.sol:36-43
- src/GeneLens.sol:209-259
Paths are relative to the GENE repository at tag rc4-audit-candidate (aca5fcd).