Skip to main content

wp_evm_velodrome_interfaces/
lib.rs

1//! Velodrome family ABI bindings.
2//!
3//! Covers Aerodrome (Base) and Velodrome Slipstream (Optimism) — the two
4//! deployments share byte-identical NFPM `positions()` and CLPool ABIs, so a
5//! single crate covers both. Verified on 2026-04-28 against
6//! `aerodrome-finance/slipstream` and `velodrome-finance/slipstream` source.
7//!
8//! Pure ABI codec — no `#[sol(rpc)]`, no async deps. Downstream callers
9//! build their own `eth_call` / Multicall3 dispatch on top of `*Call::abi_encode`
10//! and `*Call::abi_decode_returns`.
11//!
12//! Modules:
13//! - `factory` — `IVelodromeCLFactory` with `getPool`, `tickSpacingToFee`,
14//!   `poolImplementation` (used by pool-address verification and pool-view
15//!   fee-tier surface).
16//! - `periphery` — NFPM bindings.
17//! - `pool` — CL pool state/immutables bindings.
18//!
19//! Differences vs sibling families' interfaces crates:
20//! - **NFPM `positions()`**: 12-field (vs Ramses 10, Algebra 11, V3 12). Has
21//!   `nonce` + `operator` (V3-style) AND `tickSpacing` (Ramses-style) — union
22//!   of both shapes; no `fee` (lives on factory's `tickSpacingToFee` mapping).
23//! - **Pool `slot0()`**: 6-field — has NO `feeProtocol` (V3 has `uint8`,
24//!   Ramses has `uint24`, Slipstream omits entirely). Pool fees are configured
25//!   on the factory per-tickSpacing.
26//! - **Pool `feeGrowthGlobal0/1X128`** preserves V3-naming (NOT Algebra's
27//!   "Token" suffix). Same for `ticks(int24)` outside-fee field names
28//!   (`feeGrowthOutside0/1X128`).
29//!
30//! Spec: `docs/superpowers/specs/2026-04-28-r15-velodrome-family-position-support-design.md`.
31
32pub mod factory;
33pub mod gauge;
34pub mod periphery;
35pub mod pool;