VIBEFI

Ethereum · Uniswap v4 Hook

Liquidity that
prices emotion.

Every other pool charges the same fee whether the market is asleep or panicking. That is backwards. Liquidity providers lose money to one-sided, informed flow — and a flat fee pays them least at exactly the moment it costs them most. VibeFi reads how one-sided the pool's own order flow is, charges for it, and hands the premium back to the LPs who absorbed it.

Vibe Index · live simulation BLOCK 0
Vibe5000
MoodCALM
Intensity0.00
Fee now0.30%
Of which surge0.00%

This runs the same arithmetic as VibeOracle and VibeHook: reference size 10 ETH, half-life 200 blocks, smoothing 4, fee band 0.30%–2.00%. Push it one way and the fee climbs. Push it the other way and it climbs by the same amount. Stop trading and it relaxes back to calm.

01 · The primitive

The Vibe Index

A decayed exponential moving average of the pool's signed flow — buys positive, sells negative, each observation normalised by a reference size and clamped. It is not price. Price tells you what happened; the index tells you how one-sided it was.

Capitulation
Fear
Calm
Greed
Euphoria

Two forces, nothing else

Decay. With no trades the index drifts back to calm, linearly over the half-life. An exact exponential costs far more gas than the precision is worth.

Blend. Each new swap moves the average by one part in smoothing, so a single whale cannot pin the index by itself.

Readable by anyone

vibe() and intensity() are public views with no access control. The index is meant to be consumed by contracts that are not VibeFi — it is a primitive, not private plumbing.

Only the hook can write to it, and the hook address is fixed once and cannot be repointed at a friendlier writer later.

02 · The fee

Symmetric, on purpose

The obvious design is cheap buys and expensive sells during a dump. It is economically sensible, and it is also the exact signature every scanner flags as a honeypot sell tax.

There is no code path in VibeFi where direction changes the rate. The fee is a function of how far the index sits from calm — never of which side it leans. A buy and a sell are charged identically at any index value.

The curve is immutable

CALM_FEE_BPS and MAX_FEE_BPS are immutable. MAX_FEE_CEILING_BPS is a constant at 300. There is no setter for any of them — not owner-gated, absent. The price of trading VibeFi is fixed at deployment, forever.

Owner powers, in full

Change the ops sink. Tune how often the reserve deploys. Transfer or renounce ownership. That is the complete list. The owner cannot touch the fee, cannot mint, cannot pause, cannot withdraw the reserve, and cannot stop anyone removing liquidity.

Pool stateVibeFeeTo LPs as surge
Calm50000.30%0.00%
Measured selling43960.50%0.20%
Measured buying60200.64%0.34%
Maximum emotion0 / 100002.00%1.70%

Middle rows are measured values from the fork test suite, not illustrations.

03 · The reserve

The surge goes back

Everything charged above the calm rate is surge. It does not go to a treasury wallet. It is parked in a contract with no owner and no withdrawal function, and it is returned to in-range liquidity providers through PoolManager.donate() while the episode is still happening.

Proven before it was built on

A hook donating from inside afterSwap was fork-tested against mainnet v4 in isolation, before the rest of the system existed. LPs collected 0.003 ETH from swap fees alone, and 0.503 ETH when the hook donated 0.5 — the donation arriving intact.

A failed donation cannot cost you a trade

The donate-and-settle sequence runs inside a guarded self-call. If it fails for any reason — no in-range liquidity, for instance — the attempt reverts and takes its unsettled balance with it. The swap that triggered it still succeeds. A missed cushion, never a broken trade.

04 · The system

Five contracts

ContractDoesSize
VibeFiERC-20, fixed supply, EIP-2612 permit. No owner, no mint, no pause, no transfer hook.1,945 B
VibeOracleThe Vibe Index. Public read, hook-only write.2,081 B
VibeHookPrices the swap, splits the fee, triggers deployments. Flags 0x20CC.6,839 B
VibeReserveParks the surge. No owner, no withdraw — ETH can only return to the pool.1,050 B
VibeLensPure view. Quotes the fee before you sign.3,338 B

The hook holds no liquidity permissions at all. It is not in the add or remove path, so it cannot block a withdrawal, cannot tax one, and cannot be upgraded into something that does.

05 · Where this actually is

Honest status

  • DONE
    Five contracts written. Compiling under solc 0.8.28, viaIR, all well under the size limit.
  • DONE
    21 tests passing against a mainnet fork — symmetry, decay, ceiling, surge accounting, reserve deployment, LP exit, exact-input and exact-output.
  • DONE
    The donate path proven on mainnet before the design was committed to.
  • TODO
    Invariant and fuzz suite over the index arithmetic — decay, clamping, the EMA blend.
  • TODO
    Mine the hook salt for the 0x20CC flag word.
  • TODO
    Deploy, verify, seed liquidity. Nothing is on-chain today.
  • TODO
    Audit. There has been none. What exists is a test suite and one developer's review.

If you are reading this before the status strip at the top of the page changes, there is no token to buy and no pool to trade. Anything claiming otherwise is not us.

06 · Questions

The obvious ones

Is this a tax token?

No. The token itself has no transfer logic whatsoever — sending VIBE to a friend costs nothing beyond gas. The fee exists only inside the Uniswap pool, applies equally to buys and sells, and is capped at 3% by a constant that has no setter.

Can I always remove my liquidity?

Yes. The hook declares no liquidity permissions, which means Uniswap never calls it when you add or remove. It is structurally incapable of interfering, and the test suite checks a withdrawal at maximum emotion specifically.

Why not just use a dynamic-fee pool?

Overriding the LP fee per swap requires initialising the pool with the dynamic-fee flag, which the Uniswap interface will not create. Charging as a swap delta works on an ordinary pool, so VibeFi launches through the Uniswap app like anything else.

Could someone manipulate the index to trade cheaply?

Pushing the index toward calm means trading against your own position, and the smoothing factor means one swap moves it by a fraction. You would pay more in fees and price impact engineering the discount than the discount is worth. It is not free, though — it is a cost, not an impossibility, and that is worth understanding before you trade.

Who holds the surge?

A contract with no owner, no withdrawal function, and exactly one outbound path: back to in-range liquidity providers. Not a multisig, not a treasury, not us.

Is it audited?

No. Twenty-one fork tests and one developer's review. Treat it accordingly and size your exposure to what you can lose.