From a4cd3983aba2b17f754a5ac7c3f05ffd064b7366 Mon Sep 17 00:00:00 2001 From: Markus Date: Thu, 19 Feb 2026 15:47:09 -0600 Subject: [PATCH 1/2] Add Alien Base V3 encoder registration for Base Register alienbase_v3 protocol system with UniswapV3SwapEncoder, reusing the existing V3 executor on Base. Alien Base V3 uses stock Uniswap V3 core contracts, so the same executor and encoder work without modification. Differential testing confirms identical swap math (0-2 wei rounding on WETH/USDC and ALB/WETH pools). Co-Authored-By: Claude Opus 4.6 (1M context) --- config/executor_addresses.json | 3 ++- src/encoding/evm/swap_encoder/swap_encoder_registry.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/config/executor_addresses.json b/config/executor_addresses.json index db357761..7c5db3f8 100644 --- a/config/executor_addresses.json +++ b/config/executor_addresses.json @@ -24,7 +24,8 @@ "pancakeswap_v3": "0x21A97f2Aa8D9AE7144BfD080266Ee87cC2369656", "uniswap_v4": "0x8a3520889fE0bbF9E1F4a9724C27d8D6Ed9f0e29", "rfq:bebop": "0x489A3f531dA3873D6585BF3f8E0dEE48CAC6F7BC", - "aerodrome_slipstreams": "0x772f58A21a1E64c5677cDf16630205264caD2b6A" + "aerodrome_slipstreams": "0x772f58A21a1E64c5677cDf16630205264caD2b6A", + "alienbase_v3": "0x647bffbf8bd72bf6341ecba8b0279e090313a40d" }, "unichain": { "uniswap_v2": "0x00C1b81e3C8f6347E69e2DDb90454798A6Be975E", diff --git a/src/encoding/evm/swap_encoder/swap_encoder_registry.rs b/src/encoding/evm/swap_encoder/swap_encoder_registry.rs index f7cff68a..5da582d9 100644 --- a/src/encoding/evm/swap_encoder/swap_encoder_registry.rs +++ b/src/encoding/evm/swap_encoder/swap_encoder_registry.rs @@ -109,7 +109,7 @@ impl SwapEncoderRegistry { "uniswap_v3" => { Ok(Box::new(UniswapV3SwapEncoder::new(executor_address, self.chain, config)?)) } - "pancakeswap_v3" => { + "pancakeswap_v3" | "alienbase_v3" => { Ok(Box::new(UniswapV3SwapEncoder::new(executor_address, self.chain, config)?)) } "uniswap_v4" => { From 39ec9721cddd91b810f207f0cb6828a80bd5397f Mon Sep 17 00:00:00 2001 From: Markus Date: Thu, 19 Feb 2026 16:23:44 -0600 Subject: [PATCH 2/2] Address review findings for Alien Base V3 integration Add alienbase_v3 to CALLBACK_CONSTRAINED_PROTOCOLS (bug fix: V3 forks use callback-based token transfers, without this multi-hop routes would have incorrect transfer handling). Add comment to shared match arm explaining why pancakeswap_v3 and alienbase_v3 share the UniswapV3SwapEncoder. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/encoding/evm/constants.rs | 1 + src/encoding/evm/swap_encoder/swap_encoder_registry.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/encoding/evm/constants.rs b/src/encoding/evm/constants.rs index 6fc3496d..723b6a2b 100644 --- a/src/encoding/evm/constants.rs +++ b/src/encoding/evm/constants.rs @@ -54,6 +54,7 @@ pub static CALLBACK_CONSTRAINED_PROTOCOLS: LazyLock> = Laz let mut set = HashSet::new(); set.insert("uniswap_v3"); set.insert("pancakeswap_v3"); + set.insert("alienbase_v3"); set.insert("uniswap_v4"); set.insert("uniswap_v4_hooks"); set.insert("ekubo_v2"); diff --git a/src/encoding/evm/swap_encoder/swap_encoder_registry.rs b/src/encoding/evm/swap_encoder/swap_encoder_registry.rs index 5da582d9..9cc421b4 100644 --- a/src/encoding/evm/swap_encoder/swap_encoder_registry.rs +++ b/src/encoding/evm/swap_encoder/swap_encoder_registry.rs @@ -109,6 +109,7 @@ impl SwapEncoderRegistry { "uniswap_v3" => { Ok(Box::new(UniswapV3SwapEncoder::new(executor_address, self.chain, config)?)) } + // Stock Uniswap V3 forks with identical swap encoding and callback pattern. "pancakeswap_v3" | "alienbase_v3" => { Ok(Box::new(UniswapV3SwapEncoder::new(executor_address, self.chain, config)?)) }