kabu_execution_multicaller/pool_abi_encoder/pools/
curve.rs

1use crate::pool_abi_encoder::ProtocolAbiSwapEncoderTrait;
2use alloy_primitives::{Address, Bytes, U256};
3use eyre::OptionExt;
4use kabu_types_entities::Pool;
5
6pub struct CurveProtocolAbiEncoder;
7
8impl ProtocolAbiSwapEncoderTrait for CurveProtocolAbiEncoder {
9    fn encode_swap_in_amount_provided(
10        &self,
11        pool: &dyn Pool,
12        token_from_address: Address,
13        token_to_address: Address,
14        amount: U256,
15        recipient: Address,
16        payload: Bytes,
17    ) -> eyre::Result<Bytes> {
18        pool.get_abi_encoder().ok_or_eyre("NO_POOL_ENCODER")?.encode_swap_in_amount_provided(
19            token_from_address,
20            token_to_address,
21            amount,
22            recipient,
23            payload,
24        )
25    }
26
27    fn encode_swap_out_amount_provided(
28        &self,
29        pool: &dyn Pool,
30        token_from_address: Address,
31        token_to_address: Address,
32        amount: U256,
33        recipient: Address,
34        payload: Bytes,
35    ) -> eyre::Result<Bytes> {
36        pool.get_abi_encoder().ok_or_eyre("NO_POOL_ENCODER")?.encode_swap_out_amount_provided(
37            token_from_address,
38            token_to_address,
39            amount,
40            recipient,
41            payload,
42        )
43    }
44
45    fn swap_in_amount_offset(&self, _pool: &dyn Pool, _token_from_address: Address, _token_to_address: Address) -> Option<u32> {
46        Some(0x44)
47    }
48
49    fn swap_out_amount_offset(&self, _pool: &dyn Pool, _token_from_address: Address, _token_to_address: Address) -> Option<u32> {
50        None
51    }
52
53    fn swap_out_amount_return_offset(&self, _pool: &dyn Pool, _token_from_address: Address, _token_to_address: Address) -> Option<u32> {
54        None
55    }
56
57    fn swap_in_amount_return_offset(&self, _pool: &dyn Pool, _token_from_address: Address, _token_to_address: Address) -> Option<u32> {
58        None
59    }
60
61    fn swap_out_amount_return_script(&self, _pool: &dyn Pool, _token_from_address: Address, _token_to_address: Address) -> Option<Bytes> {
62        None
63    }
64
65    fn swap_in_amount_return_script(&self, _pool: &dyn Pool, _token_from_address: Address, _token_to_address: Address) -> Option<Bytes> {
66        None
67    }
68}