MUTATION
ANTIGENIC DRIFT IN A ONE-SIDED LIQUIDITY HOOK
ABSTRACT — Every wallet that touches the pool is classified from its own holding clock and written onto the surface of a strain as a single capsomer. Thirty-two subunits, one bytes32 word, no other memory. The hook reads that surface to set the fees and the release cap of the next block, so the terms of trade drift with the population trading them. The surface never holds.
- Specimen
- —
- Generation
- —
- Mutations observed
- —
- Last event
- —
- Observed at block
- —
- Source
- AWAITING DEPLOYMENT
Thirty-two capsomers distributed on a Fibonacci lattice, one per codon of the on-chain sequence, each carrying a glycoprotein spike. A mutation sheds one subunit and assembles its replacement while a ring travels outward across the shell. The shell is unwritten: each subunit fills with the wallet whose swap wrote it, once the hook is live.
Mechanism
NOT DEPLOYEDSteps 01 and 02 run inside the same transaction as the swap. Step 04 applies from the following block.
The strain has no governance, no oracle and no off-chain input. Its entire behaviour is a function of who traded it and how they held it, read four steps at a time.
- 01
Wallets bind
beforeSwap classifies the wallet from its amount-weighted holding clock and its record on the hook. Nothing is asked of the trader; the classification is read from state they already wrote.
- 02
The capsid drifts
afterSwap charges the drift tax as a return-delta, writes one capsomer onto the shell and sheds the oldest. The sequence is a single bytes32 word, so the write costs one slot.
- 03
The surface changes
Expression, the dominant protein and the four adaptive scores are recomputed from the new surface. They are not stored opinions: they are a reading of the last thirty-two events.
- 04
The hook evades
The next block trades under fees and a release cap derived from that reading, frozen before anything in the block can touch it. A flash loan cannot move the fee it is about to pay.
01.1Surface proteins
Seven classifications, returned verbatim by MutationLens.geneName(). Expression is the share of the current thirty-two subunits carrying each one, and is empty until the first swap writes one.
| Protein | On the capsid | Reading | Expression |
|---|---|---|---|
| GENESIS | bloom at the site | The founder sequence the strain was deployed with, before any wallet bound to the pool. | — |
| WHALE | the shell swells | A large share of the reservoir moved in one interaction. The whole shell swells. | — |
| DIAMOND | locks into a facet | A held position proven through expressDiamond(). The subunit locks into a rigid facet. | — |
| PAPER | sheds into fragments | A fast exit, classified from the token’s holding clock. The subunit sheds into fragments. | — |
| ACTIVE | ring crosses the shell | Ordinary sustained interaction. A clean ring travels outward across the shell. | — |
| LIQUIDITY | glycoprotein extends | Inventory returned to the strain. The glycoprotein at that site extends outward. | — |
| MUTANT | lattice twists | Behaviour the classifier could not place. The local lattice twists out of register. | — |
The surface
32 SUBUNITS · UNWRITTENHovering a cell names the wallet that wrote it. The same reading is available on the specimen in Plate I.
A single bytes32 word. Every interaction writes one capsomer and sheds the oldest, so the surface is a rolling record of the last thirty-two events and nothing else. There is no archive on chain: what fell off the end is gone.
RAW0x0000000000000000000000000000000000000000000000000000000000000000
| Score | Reading | Value |
|---|---|---|
| Adaptation | How fast the surface has been rewritten lately. | — |
| Defense | Weight of held positions against fast exits. | — |
| Reward | Share of the drift tax returned to holders. | — |
| Volatility | Dispersion of interaction size and side. | — |
- Strain id · v0
- —
- Lineage hash
- —
- Mutations
- —
- Last mutation
- —
- Last mutation block
- —
- Dominant protein
- —
02.1Terms of the current block
The surface does not trade, it sets terms. getCurrentParameters() freezes these once per block, before anything in the block can mutate the surface they were derived from.
| Parameter | Note | Value |
|---|---|---|
| Drift tax · buy | Charged on the token leg, above the pool's static LP fee. Surplus over the base rate is burned on receipt. | — |
| Drift tax · sell | Charged on the ETH leg, raised further for wallets read as PAPER. Surplus is queued for buyback-and-burn. | — |
| Release cap | Gross reservoir a single block may release, fixed by that block’s first buy. Selling back inside the block does not reopen room. | — |
| Generation | Lifecycle state, driven by remaining reservoir. Dominant protein: GENESIS. | — |
† Nothing is deployed yet, so there are no terms to report. These are the values MutationHook.getCurrentParameters() will return.
Reservoir
NOT DEPLOYEDOne side only. There is no paired reserve to drain, so the usual exit does not exist.
The strain declares its reservoir at deploy and releases it through one fixed range. Available supply is read from the pool's own tick storage, not from a token balance, so it cannot be inflated by liquidity sitting in some other pool.
| Declared reservoir | — |
|---|---|
| Quote reserve | — |
| Release cap / block | — |
| Released this block | — |
| Tick range | — |
| Current tick | — |
| SIDE | SINGLE — NO PAIRED RESERVE |
| RANGE | FIXED AT DEPLOY |
| SOURCE | POOL TICK STORAGE |
03.1Tax sink
The drift tax does not accrue to a treasury. Buy surplus is burned on receipt; sell surplus is queued for buyback-and-burn.
| Burned | — |
|---|---|
| Queued for buyback | — |
| Owed to recipient | — |
| Last buyback | — |
Transmission
HEAD · —The log fills from MutationDetected once the hook is deployed. Nothing is simulated in its place.
Wallets are the input. Every interaction is classified into a surface protein, writes one capsomer onto the shell and is recorded in the lineage. The strain keeps no other memory.
| Time | Protein | Wallet | Block | Action | Fee |
|---|---|---|---|---|---|
| No events recorded. | |||||
04.1Lineage
Read downward, oldest first. Selecting an entry expands its record and lights the subunit it wrote on the specimen in Plate I. The lineage is empty: nothing has written to the surface yet.
- No entries.
Contracts
NOT DEPLOYEDContract names are the Solidity ones and are not renamed for this document.
One hook, one strain, one canonical pool: native ETH against the token at a static LP fee. The pool is created and liquidity added through the standard Uniswap v4 interface — the hook never gates initialization or liquidity.
| Contract | Role | Responsibility | Address |
|---|---|---|---|
| MutationHook | The capsid | Uniswap v4 hook on beforeSwap and afterSwap. Classifies the wallet, charges the drift tax as a return-delta, writes a capsomer and freezes the next block’s parameters. | 0xF15B…C0C4 |
| MutationToken | The clocks | Fixed-supply ERC-20 recording two amount-weighted clocks per holder: when they acquired, and whether what they hold came straight out of the pool. | NOT DEPLOYED |
| MutationInventory | The tax sink | Receives the drift tax, credits the base share, burns the buy surplus on receipt and queues the sell surplus for buyback-and-burn. | 0x1FC6…AC28 |
| MutationLens | The read model | Stateless view contract this document reads: getOrganism, getGenome, walletClassOf, quoteSwapFee. Computed with the same libraries the hook executes. | 0x32D9…106E |
05.1Pool
- Pair
- ETH / MUT
- LP fee
- —
- Range
- —
- Network
- ETHEREUM