Aggregator Operation
Last updated
Last updated
When the Aggregator contract is deployed, the user who initializes it becomes the protocol administrator. During initialization, compatible underlying protocols are registered in the contract's storage, as shown in Figure 1.
The Aggregator facilitates token swaps through two primary functions:
swap_exact_tokens_for_tokens (when you want to have an exact input)
swap_tokens_for_exact_tokens (when you want ot have an exact output)
These functions require users to specify:
The input token (token_in
).
The output token (token_out
).
The amounts involved.
A distribution vector (DexDistribution
).
This vector contains information on how the swap should be split across different protocols and the paths to be followed for the operation.
To calculate the amounts to be swapped in each protocol, the calculate_distribution_amounts
function is used. The mathematical formula applied is:
This formula calculates the amount to be swapped for each protocol (i), where:
total_amount
is the total amount to be swapped.
total_parts
is the sum of all parts specified in DexDistribution
.
This formula ensures that the total amount to be swapped is correctly distributed among the selected protocols.
The Aggregator includes administrative functions that allow management of the contract, such as:
Initializing the contract.
Registering, pausing, and removing protocols.
Modifying the administrator address.
These functions ensure that the administrator has control over the protocols used in swaps and that only trusted protocols are utilized.
The Aggregator communicates with protocols via adapters, which implement the SoroswapAggregatorAdapterTrait
interface. This interface defines standard functions such as:
initialize
: Sets up the adapter with necessary information.
swap_exact_tokens_for_tokens
: Executes swaps specifying the minimum token amounts.
swap_tokens_for_exact_tokens
: Executes swaps specifying the maximum input tokens.
Each adapter handles the specifics of its respective protocol, as shown in Figure 3.