One equity trades in twenty-odd pools across six venues on chain 4663 — quoted in dollars, in wrapped ether, and in other equities. Voxelithic folds them into one book and routes into the best of them. The router then compares what lands against what you signed, and reverts if it is short.
Three steps, none of which asks you to trust the interface: read the chain, ask the pools what they will actually give, then let the contract check the result against what you signed.
Prices are not taken from an indexer. Concentrated pools are read from their own state. Uniswap v4 has no pool contract at all — a pool is a key, and its state lives in one singleton:
slot = keccak256(abi.encode(poolId, 6));
sqrtPriceX96 = extsload(slot) & ((1 << 160) - 1);Half the live pools on this chain are v4. Before this was read on-chain their prices came from an indexer that converts cross-equity pairs through its own rate, which produced spreads of three to four percent that did not exist. Reading the singleton cut the widest spread on SPY from 4.74% to 1.25%.
Sizes come from the pools as well. A price without a size is decoration: modelling a swap inside the current tick overstates the output by roughly 0.16% on a one-tick pool, while venues differ from each other by about 0.01% — the model's error is an order of magnitude larger than the thing being measured. So the quoter asks each pool to execute the real swap and, in the callback, reverts with the numbers instead of paying. Nothing settles, nothing is signed, and one eth_call prices a whole book.
v4 is not another venue. There is no pool contract to call: a swap takes the singleton's lock and settles its own debts by hand. That is why execution there runs through a second router.
| Venue | Kind | Priced from | Note |
|---|---|---|---|
| Uniswap v3 | Concentrated | slot0() |
Deepest dollar books on the chain |
| Uniswap v4 | Singleton | extsload |
Half of every live pool; no pool contract exists |
| Ramses | v3 fork | slot0() |
Renamed callback, answered through the router's fallback |
| Giga | v3 fork | slot0() |
Bounded liquidity — the quoter shows where it runs out |
| Up | v3 proxy | slot0() |
Equity-paired only, so live eth_call is the only proof |
| Alandale | Algebra | globalState() |
Dynamic fee; its getReserves returns balances, not a price |
- Fill you short. It compares the delivered balance against the minimum you signed, and reverts on anything less.
- Fill you partially. If a pool cannot absorb the whole order, the trade is refused rather than half-executed.
- Keep the difference. Output is measured as a balance delta, so dust left on the contract never reaches the next caller.
- Touch a hooked v4 pool. A hook is arbitrary code in the middle of a swap. The refusal lives in the contract, not in the interface.
The router takes 0.30% of every swap inside the trade and sends it to the treasury. It arrives in whatever token you received, not in $VOXEL.
The treasury can do three things with what it holds, and all three end at the same address: buy $VOXEL through pools on an allow list, burn what it bought, and burn any $VOXEL sent to it directly. There is no withdraw function — not for the owner, not for the keeper, not for anyone. The token and the burn address were fixed in the constructor.
The conversion is batched rather than performed inside your swap. The fee on a $100 trade is $0.30; converting it inline would cost more than that in gas, paid by you, and a reverting leg would revert your trade. So it accrues and is burned on a schedule.
totalBurned is the treasury's own counter and only goes up — 47,020 $VOXEL at the time of writing. The current figure, and whatever is still queued for the next burn, is one request away and takes no key:
https://voxelithic.xyz/api/v1/burn
Every number on the site is served by a public API that takes no key and accepts none. /quote returns the best executable route across the book; /swap returns unsigned calldata and cannot sign or broadcast anything; /receipt shows what a fill actually paid against what every venue would have paid at that block.
https://voxelithic.xyz/api/v1
| Contract | Address | What it does |
|---|---|---|
| VoxRouter | 0x87cD7EbE8c213455e5e5a8554657D5f294a82e64 |
Execution across v3-style venues, up to three hops |
| VoxQuoter | 0x9616627E871c96e38cb21b9551F62Ed93366bE1B |
Exact quotes from the pools themselves, one call per book |
| VoxRouterV4 | 0x290b9b46308f7a3B80A5F62214B426d3bfAfaab5 |
Execution in Uniswap v4 — takes the singleton's lock and settles by hand |
| VoxQuoterV4 | 0x5858F06894623eF4862103A747074E5AA3436d4F |
Quotes for v4, whole paths included |
| VoxRouterMixed | 0xda61673A51d6EA2c02C335185399Ddb818bdBC6f |
Splits one order across both pool families in a single transaction |
| VoxTreasuryV2 | 0x25A99c317f3125Fc6cd245197028f49CfF56612E |
Receives the fee. Can only buy $VOXEL with it and send that to the burn address |
All verified on Blockscout. The fee is 0.30% — the ceiling written into the contracts, not a number that can be raised past it. Ownership transfers in two steps.
| Trade | Route | Result |
|---|---|---|
| Buy | USDG → SPY, one v4 pool | 0.000% off the quote |
| Buy through a path | USDG → SPY → NVDA, one lock | 0.000% off the quote |
| Sell | SPY → USDG | 0.010% off the quote |
Nothing was left on the router in any of them.
Every figure published on the site is derived, and each derivation is a command.
If what you compute disagrees with what is published, what is published is wrong.



