You do not pick the date
The issuer sets the calendar, and nobody asks the pool. A record date is published weeks out, lands on a Tuesday morning, and the curve has no idea any of it happened.
Uniswap v4 hook · Base Sepolia
A corporate action reprices an asset at a known moment, by a known factor, with nobody trading. Nothing lands in the pool to tell it, so it keeps quoting yesterday's number. The curve stays wrong for exactly as long as nobody looks.
Mauvya is the hook that looks.
Uniswap v4 hook Base Sepolia · testnet Open ↗No token sale. No TVL to quote. No audit yet, because there is no mainnet contract to audit. This is the real state of it.
Deployment registry
When the token exists, its address appears here and nowhere else first. Until this box shows one, any contract claiming to be Mauvya is not ours. Check this page before you buy anything.
Quiet for weeks, then not
The issuer sets the calendar, and nobody asks the pool. A record date is published weeks out, lands on a Tuesday morning, and the curve has no idea any of it happened.
A dividend moves the quote by a few basis points and barely registers. A four for one split divides the fair price by four in a single step. Same mechanism, four orders of magnitude apart.
The information is public and free. It just has to be read at the right second by something that can act on it before the pool settles the next swap. People stop doing that in week three.
If you provide liquidity to a pool holding a tokenized equity, this runs underneath and you should expect to forget it exists. On the handful of days a year when an action lands, it charges the arbitrageur instead of you. On every other day it should cost you nothing and say nothing.
The ledger
| Before | Unguarded | With the hook | |
|---|---|---|---|
| Token reserves | 10,000 | 20,000 | 40,000 |
| Stablecoin reserves | $1,000,000 | $500,000 | $1,000,000 |
| Quoted price | $100.00 | $25.00 | $25.00 |
| Repriced by | … | The first trade | The hook, at the event |
| To the pool | … | $0 | $237,500 |
95% of what the hook recovers goes to the liquidity providers and 5% to the protocol. The numbers above are arithmetic, not a projection, and you can walk them yourself in the note.
The hook
Three calls, inside the lifecycle, in the few thousand gas between a swap arriving and the pool settling it.
The hook asks an attested feed whether this pool has an action pending. Splits and dividends are scheduled, so this is a lookup rather than a prediction.
At the event the pool goes to the post action price in one atomic step, so the first swap of the block meets a fair market instead of a stale one.
Whatever gap survives goes to a sealed auction. Somebody still takes the trade, and the winning bid lands in the pool instead of in their wallet.
The entry point
// runs before the pool settles the swap in front of it
function beforeSwap(
address sender,
PoolKey calldata key,
IPoolManager.SwapParams calldata params,
bytes calldata hookData
) external override returns (bytes4, BeforeSwapDelta, uint24) {
Action memory a = feed.pending(key.toId());
if (a.recordDate != 0 && a.recordDate <= block.timestamp) {
_reprice(key, a.numerator, a.denominator); // curve moves first
_settleResidual(key, a.auctionId); // the rest goes to auction
}
return (BaseHook.beforeSwap.selector, ZERO_DELTA, _fee(key));
}
Illustrative, not the deployed source. There is no mainnet deployment to point at yet, and this page will say so until there is.
Fee controller
Mauvya runs a dynamic fee onchain. When volatility climbs the fee climbs with it, which is exactly when uninformed liquidity gets picked off. When the market calms down the fee drops back, so routers keep choosing the pool.
Bidders compete for the right to take the gap. The winning bid lands in the pool instead of with whoever pays the most for block position.
Arbitrum, HyperEVM, Base and Polygon are the target set, with reach into HyperCore and connected lending markets. None of it is on mainnet yet.
Integrations
Fee only pools keep 95% of swap fees with the liquidity providers and send 5% to the protocol.
Legacy V2 and concentrated V3 pools on every supported chain, with DLMM available on select networks.
You keep control of your launch and your graduation mechanics, and we stay on the integration with you.
xMAU carries the votes. It borrows the useful half of vote escrow, which is that long term holders steer emissions, and drops the half that traps you for four years. Balances stay liquid and the weight comes from participation instead of sentence length.
f33 is xMAU you can still move. It votes for you each epoch and folds the rewards back into the position, so you are not logging in every Thursday to click a gauge. On HyperEVM the same asset trades as HyperMauvya.
The fee is a function, not a constant. The controller reads realised volatility from the pool itself and raises the fee while the market is moving, which is exactly when uninformed liquidity gets picked off. When variance drops, so does the fee, so routers keep choosing the pool.
The target set is Arbitrum, HyperEVM, Base and Polygon, with routing that can reach HyperCore and connected lending markets inside the same transaction. None of it is on mainnet yet.
The gap a repricing event opens is auctioned instead of raced. Bidders compete for the right to take it, the winning bid lands in the pool, and the value ends up with the capital that created the opportunity rather than with whoever pays the most for block position.
Not yet, and there is nothing deployed to audit. When there is, external review happens before a single unit of mainnet liquidity is accepted, and the report goes up next to the docs. It is a gate, not a badge.
Connect a wallet, add liquidity or stake xMAU, and earn from every trade the protocol routes.
Open the app →The corporate action problem
A tokenized share inherits every corporate action of the asset underneath it. The pool holding that share does not. The gap between those two facts has a price, and right now the liquidity providers are the ones paying it.
Splits, dividends, rebases and redenominations all do the same thing: they change the price of an asset at a known moment, by a known factor, without anyone trading. Traditional markets handle this with a record date and an adjustment. Automated market makers handle it by not noticing.
A constant product pool is not a holder. It is a curve with two reserves and one invariant, and it has no idea that the token it quotes was worth four times as much an hour ago. When a 4:1 split lands, the fair price of the asset divides by four. The pool keeps quoting the old number until somebody trades against it, and the person who trades against it first collects the entire difference.
That is not a bug in anyone's code. It is the mechanism working exactly as designed, on a price that is now wrong.
Take a pool with 10,000 tokens and $1,000,000 of stablecoin against them. The quote is $100. The asset splits 4:1 overnight, so the fair price opens at $25 while the curve still says $100.
A searcher sells 10,000 tokens into the pool and walks out with $500,000. Those tokens cost $250,000 at the true price. The constant product holds the whole way: reserves settle at 20,000 tokens against $500,000, exactly where the curve prices the asset at $25. Nothing was exploited. The pool simply paid twice what the asset was worth, to the first person in the block.
| Before | Unprotected | With the hook | |
|---|---|---|---|
| Token reserves | 10,000 | 20,000 | 40,000 |
| Stablecoin reserves | $1,000,000 | $500,000 | $1,000,000 |
| Quoted price | $100.00 | $25.00 | $25.00 |
| Repriced by | … | The first searcher | The hook, at the event |
| Value released | … | $250,000 | $250,000 |
| Of which, to LPs | … | $0 | $237,500 |
Constant product math, not a projection. The unprotected column is what the curve does on its own. The hooked column assumes the pool is made whole on the split and the residual gap clears at auction, with the standard 95 / 5 split between liquidity providers and the protocol.
Scale that to a $2,000,000 pool and the number is a quarter of a million dollars, released by a corporate action that was published weeks in advance and surprised nobody except the pool.
It is worth being precise about what is broken, because two different holes get confused. The first is entitlement: when the split is distributed, the pool has to actually receive its share, the same way any other holder does. The second is the quote: even a pool that receives everything it is owed will still price the asset wrong until the curve is moved. Mauvya is built around the second problem, and it rides on the same attested feed that has to solve the first.
The reason this is solvable at all is that these events are scheduled. A record date is public. A split ratio is public. Nothing about the moment of repricing is a surprise, it is only a surprise to the pool, because a pool has historically had no place to put that knowledge.
Uniswap v4 changes that. A hook runs inside the pool's own lifecycle, so beforeSwap fires before the pool settles the trade in front of it. That is enough room to act on information the pool already had.
The sequence matters, because each step only works if the one before it has already run inside the same block.
The hook reads the record date and ratio from an attested feed before the block lands. Splits, dividends and rebases are calendar items, not random walks, so this is a lookup rather than a prediction.
At the event, the hook moves the pool to the post action price in one atomic step. The first swap of the block meets a fair market instead of a stale one, which removes the free option rather than racing anyone for it.
Perfect repricing is not always possible, so the residual goes to a sealed bid auction for the right to take it. The searcher still gets to trade. The proceeds land in the pool instead of in the winner's wallet.
The third step is the one that tends to get argued about, and it is the honest part of the design. Arbitrage is not a moral failure and it is not going away, it is what keeps the quote attached to reality. The question is never whether the gap gets taken. It is whether the people whose capital created the gap get paid for it.
State of the protocol
That list is the point of publishing this now rather than later. There is no contract address to put in front of you, so there is nothing anyone can impersonate yet, and when there is one, it appears on the site first and nowhere else. Any contract claiming to be Mauvya before that box shows an address is not ours.
The governance design, xMAU and the liquid staked f33 that votes and compounds on your behalf, is exactly that for now: design. It is written down because it shapes the fee routing, not because it is shipped.
The wrap on Base Sepolia is a genuine transaction: your wallet signs it, the hash is public, and the balance change is real. It is a small thing, but it is the difference between a page that describes a protocol and a page that does one.
Four minutes
ETH / WETH pair and swap. That one settles on chain against 0x4200…0006; the strip above the card says so while you trade.In order: the attested feed for record dates, the auction contract for the residual, and an external review of both before a single unit of mainnet liquidity is accepted. Everything above stays on testnet until that sequence is finished, and this page will say so plainly for as long as it is true.
The pitch is not that Mauvya invents value. It is that a quarter of a million dollars already changes hands every time a split hits an unprotected pool, and right now none of it goes to the people who funded the position.
Figures are worked from constant product math on the stated reserves and are illustrative, not performance claims. Nothing here is investment advice or an offer of any token.
Mauvya · Uniswap v4 hook · Base Sepolia testnet · no mainnet contracts deployed
Sell
Buy
Base Sepolia
Chain ID 84532 · sepolia.base.org
ETH ⇄ WETH settles on chain. Your wallet signs it, the transaction is yours, and the hash is public on BaseScan. Every other pair on this screen is a simulated quote, and the strip above says so while you trade.
Search by name or paste an address.
Your transaction reverts if the price moves past this limit.
Max slippage
Mauvya quotes include the dynamic fee for the pair, so the rate you see already accounts for current volatility.
Check the details before you continue.
Preview only. Nothing is signed and no transaction is broadcast.
…
This is a design preview, so no transaction was broadcast and no balance changed on chain.
Choose how you want to connect to Mauvya.
Mauvya only reads your public address. This concept page never requests a signature or a transaction.
Before you continue
Mauvya is a preview, not a product. This site demonstrates a Uniswap v4 hook that reprices a pool at a corporate action. Nothing on it is an offer, a solicitation, or a promise that anything will ship.
There is no mainnet contract and no token. The deployment registry on this page is the only place an address will ever appear first. Any contract claiming to be Mauvya while that box reads not deployed is not ours.
The hook has not been audited. The only real transaction this interface can send is an ETH to WETH wrap on Base Sepolia, a test network, using test ETH with no monetary value. Every other quote on the app screen is simulated and labelled as such.
Nothing here is investment, financial, legal, or tax advice. The figures shown are constant product arithmetic on stated reserves, worked as illustrations. They are not projections, performance claims, or a forecast of anything.
Mauvya never asks for a seed phrase or a private key, and will never ask you for one. The only signature this site requests is the testnet wrap you start yourself. Treat anyone asking for more, anywhere, as an attacker.
You confirm you are of legal age where you live, that you are not accessing this from a jurisdiction where it would be prohibited, and that you use it as is, at your own risk, with no warranty of any kind.
No accounts, no tracking, no cookies. This site sets no cookies, runs no analytics, and has no ad or tracking pixels. There is nothing to sign up for and nothing to opt out of.
Three things live in local storage on your own device: your light or dark preference, your accent choice, and the fact that you accepted this notice. They never leave the browser and we never see them. Clearing your site data removes all three.
If you connect one, the page reads your public address to show a balance and fill the interface. That read happens in your browser. The address is not transmitted to us, not stored by us, and not logged anywhere.
Two, and you should know about both. Fonts load from Google Fonts, and the price chart pulls public candles from a market data endpoint. Those services see your IP address the way any site you visit does. We receive nothing from either.
If you send the testnet wrap, that transaction is public and permanent on Base Sepolia by design. That is a property of the chain, not a choice this site makes, and it cannot be undone or deleted.
Stored in this browser only · reopen any time from the footer
Declining is a real answer and nothing here is worth overriding it for. Close the tab whenever you like, or read the notice again if you changed your mind.