# Overview

[**SwapExecutor**](https://docs.propellerheads.xyz/integrations/execution/swap-executor): The `SwapExecutor` provides a unified interface for executing swaps. It handles interactions with the underlying liquidity pools, manages token approvals, controls input/output amounts, and ensures gas-efficient and secure execution. Each protocol must implement its own `SwapExecutor` (a Solidity contract) tailored to its specific logic and requirements.

[**SwapEncoder**](https://docs.propellerheads.xyz/integrations/execution/swap-encoder): The `SwapEncoder` encodes protocol components and swap parameters into valid calldata for the corresponding `SwapExecutor` contract. It ensures that swap details—including input/output tokens, pool addresses, and other protocol-specific parameters—are accurately formatted and encoded before being sent to the `SwapExecutor`. Each protocol must implement its own `SwapStructEncoder` Python class to maintain compatibility with its `SwapExecutor`.
