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;