Repository navigation
Ekubo v3.2
v3.2.0 introduces the Ve33 pool system, signed exclusive swaps, unified routing for forwarded swap extensions, pool-key discovery, and new staking, liquidity-position, emission, and data-fetching components.
This release contains all changes since v3.1.1. See the full comparison.
Deployments
Ekubo V3 is live on Ethereum, Optimism, BNB Smart Chain, Gnosis, Unichain, Polygon, Monad, Robinhood Chain, Base, Arbitrum, and Ink, and is deployed but not yet functional on World Chain and MegaETH, which have not enabled EIP-7939 (CLZ).
Deployment addresses now live in the documentation, not in this release body: see EVM Contracts (V3) for the shared deterministic addresses, the per-chain support table, and which Positions and Orders generation is canonical on each chain. Keeping one address list means it can be corrected as chains are added, rather than going stale inside a published release.
Anyone can deploy the shared contracts to another compatible network with the v3.2.0 DeployAll script. Chains must support both EIP-1153 (TSTORE) and EIP-7939 (CLZ) for the contracts to function; an existing deployment becomes functional as soon as its chain adds support, with no redeployment required.
Positions deployment note:
BasePositionsnow overridessaltToIdto truncate generated liquidity-position NFT IDs touint192, so the whole token ID is used directly as the Core position salt. Enabling that override required markingBaseNonfungibleToken.saltToIdasvirtual, which changed the compiledOrdersbytecode too — so both managers moved to new deterministic addresses, even thoughOrders.solitself is unchanged. Both releases pin solc 0.8.33; this is a source change, not a recompilation. There is no manager migration: on chains that carry both generations, the originalv3.1.1deployment remains canonical. The documentation table records which generation applies per chain.
Contracts added or reworked in v3.2.0—including Ve33, VeToken, Ve33Positions, SignedExclusiveSwap, PoolKeyIndex, MintableERC20, and the configurable Router—are deployment- or configuration-specific and have no universal address.
Changelog
All entries below are relative to v3.1.1.
Added
- Added
Ve33, a forward-only ve(3,3)-style pool extension with vote-escrowed staking, linearly decaying voting power, pool voting, voter-selected swap fees, voter fee accounting and claims, scheduled stake-token emissions, and single-token LP rewards. - Added
VeToken, a transferable ERC-721 wrapper for Ve33 stakes. It supports timestamp-, duration-, and maximum-duration staking; increasing and extending stakes; splitting and merging; voting and clearing votes; claiming voter fees; withdrawing expired stakes; and composed claim-before-extend or claim-before-merge flows. - Added
VeTokenMetadatafor fully on-chain VeToken JSON and SVG metadata. - Added
Ve33Positions, an ERC-721 manager for Ve33 LP positions with pool initialization, deposits, withdrawals, reward views, reward claims, and bundled claim-before-withdraw flows. Ve33 positions do not charge position-level protocol fees or collect Core swap fees. - Added
Ve33Peripheryfor funding permissionless emission schedules andVe33EmissionRateSchedulerfor minting and scheduling forward-looking top-ups toward an owner-configured target emission rate. - Added
Ve33DataFetcherfor combined Core and Ve33 quote data, current voted swap fees, and global emission-schedule state. - Added
IVe33,Ve33Lib,Ve33StorageLayout, and supporting stake, vote, pool-fee, reward, and emission types. - Added
SignedExclusiveSwap, a forward-only extension for controller-signed EIP-712 swaps. It supports EOA and ERC-1271 controllers, optional locker authorization, deadlines, nonce replay protection, signed minimum balance-update constraints, per-swap fees, and deferred fee donation to LPs. - Added
ISignedExclusiveSwap,SignedExclusiveSwapLib,SignedSwapMeta,ControllerAddress, and signed-swap pool-state helpers. - Added
PoolKeyIndex, an optional registry for discovering initialized pool keys by pool ID, token, or extension. - Added
MintableERC20andIMintableERC20for owner-controlled token minting with constructor-defined name, symbol, and decimals.
Changed
- Extracted shared single-hop, multihop, quote, slippage-check, and settlement logic into
BaseRouter. TheRouteNode,TokenAmount, andSwaptypes now live insrc/base/BaseRouter.sol. - Updated
Routerto execute ordinary Core swaps and forward swaps for its configured MEV Capture and Ve33 extensions. Its constructor is nowRouter(ICore core, address mevCapture, address ve33). - Constrained generated IDs for
BasePositions-based liquidity-position NFTs to 192 bits so the complete NFT ID can be used as the Core position salt. - Updated
RevenueBuybacks.roll(...)to approve only the exact ERC-20 amount required by each order and reset the approval to zero afterward.
Removed
- Removed the standalone
MEVCaptureRoutersource contract; MEV Capture support now lives in the configurableRouter. The existingv3.1.1deployment is unaffected. - Removed
IRevenueBuybacks.approveMax(...).