Initializes the contract and sets the factory address
fn initialize(
env: soroban_sdk::Env,
factory: soroban_sdk::Address,
) -> Result<(), CombinedRouterError>
Adds liquidity to a token pair's pool, creating it if it doesn't exist. Ensures that exactly the desired amounts of both tokens are added, subject to minimum requirements. This function is responsible for transferring tokens from the user to the pool and minting liquidity tokens in return.
token_a - The address of the first token to add liquidity for.token_b - The address of the second token to add liquidity for.amount_a_desired - The desired amount of the first token to add.amount_b_desired - The desired amount of the second token to add.amount_a_min - The minimum required amount of the first token to add.amount_b_min - The minimum required amount of the second token to add.to - The address where the liquidity tokens will be minted and sent.deadline - The deadline for executing the operation.A tuple containing: amounts of token A and B added to the pool. plus the amount of liquidity tokens minted.
fn add_liquidity(
env: soroban_sdk::Env,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
amount_a_desired: i128,
amount_b_desired: i128,
amount_a_min: i128,
amount_b_min: i128,
to: soroban_sdk::Address,
deadline: u64,
) -> Result<(i128, i128, i128), CombinedRouterError>
Removes liquidity from a token pair's pool.
This function facilitates the removal of liquidity from a Soroswap Liquidity Pool by burning a specified amount
of Liquidity Pool tokens (liquidity) owned by the caller. In return, it transfers back the corresponding
amounts of the paired tokens (token_a and token_b) to the caller's specified address (to).
token_a - The address of the first token in the Liquidity Pool.token_b - The address of the second token in the Liquidity Pool.liquidity - The desired amount of Liquidity Pool tokens to be burned.amount_a_min - The minimum required amount of the first token to receive.amount_b_min - The minimum required amount of the second token to receive.to - The address where the paired tokens will be sent to, and from where the LP tokens will be taken.deadline - The deadline for executing the operation.A tuple containing the amounts of token_a and token_b withdrawn from the pool.
fn remove_liquidity(
env: soroban_sdk::Env,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
liquidity: i128,
amount_a_min: i128,
amount_b_min: i128,
to: soroban_sdk::Address,
deadline: u64,
) -> Result<(i128, i128), CombinedRouterError>
Swaps an exact amount of input tokens for as many output tokens as possible
along the specified trading route. The route is determined by the path vector,
where the first element is the input token, the last is the output token,
and any intermediate elements represent pairs to trade through if a direct pair does not exist.
amount_in - The exact amount of input tokens to be swapped.amount_out_min - The minimum required amount of output tokens to receive.path - A vector representing the trading route, where the first element is the input token
and the last is the output token. Intermediate elements represent pairs to trade through.to - The address where the output tokens will be sent to.deadline - The deadline for executing the operation.A vector containing the amounts of tokens received at each step of the trading route.
fn swap_exact_tokens_for_tokens(
env: soroban_sdk::Env,
amount_in: i128,
amount_out_min: i128,
path: soroban_sdk::Vec,
to: soroban_sdk::Address,
deadline: u64,
) -> Result, CombinedRouterError>
Swaps tokens for an exact amount of output token, following the specified trading route.
The route is determined by the path vector, where the first element is the input token,
the last is the output token, and any intermediate elements represent pairs to trade through.
amount_out - The exact amount of output token to be received.amount_in_max - The maximum allowed amount of input tokens to be swapped.path - A vector representing the trading route, where the first element is the input token
and the last is the output token. Intermediate elements represent pairs to trade through.to - The address where the output tokens will be sent to.deadline - The deadline for executing the operation.A vector containing the amounts of tokens used at each step of the trading route.
fn swap_tokens_for_exact_tokens(
env: soroban_sdk::Env,
amount_out: i128,
amount_in_max: i128,
path: soroban_sdk::Vec,
to: soroban_sdk::Address,
deadline: u64,
) -> Result, CombinedRouterError>
This function retrieves the factory contract's address associated with the provided environment. It also checks if the factory has been initialized and raises an assertion error if not. If the factory is not initialized, this code will raise an assertion error with the message "SoroswapRouter: not yet initialized". https://github.com/benjaminsalon/malicious_sorochat
e - The contract environment (Env) in which the contract is executing.fn get_factory(
env: soroban_sdk::Env,
) -> Result
Calculates the deterministic address for a pair without making any external calls. check https://github.com/paltalabs/deterministic-address-soroban
e - The environment.token_a - The address of the first token.token_b - The address of the second token.Returns Result<Address, SoroswapLibraryError> where Ok contains the deterministic address for the pair, and Err indicates an error such as identical tokens or an issue with sorting.
fn router_pair_for(
env: soroban_sdk::Env,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
) -> Result
Given some amount of an asset and pair reserves, returns an equivalent amount of the other asset.
amount_a - The amount of the first asset.reserve_a - Reserves of the first asset in the pair.reserve_b - Reserves of the second asset in the pair.Returns Result<i128, SoroswapLibraryError> where Ok contains the calculated equivalent amount, and Err indicates an error such as insufficient amount or liquidity
fn router_quote(
env: soroban_sdk::Env,
amount_a: i128,
reserve_a: i128,
reserve_b: i128,
) -> Result
Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset.
amount_in - The input amount of the asset.reserve_in - Reserves of the input asset in the pair.reserve_out - Reserves of the output asset in the pair.Returns Result<i128, SoroswapLibraryError> where Ok contains the calculated maximum output amount, and Err indicates an error such as insufficient input amount or liquidity.
fn router_get_amount_out(
env: soroban_sdk::Env,
amount_in: i128,
reserve_in: i128,
reserve_out: i128,
) -> Result
Given an output amount of an asset and pair reserves, returns a required input amount of the other asset.
amount_out - The output amount of the asset.reserve_in - Reserves of the input asset in the pair.reserve_out - Reserves of the output asset in the pair.Returns Result<i128, SoroswapLibraryError> where Ok contains the required input amount, and Err indicates an error such as insufficient output amount or liquidity.
fn router_get_amount_in(
env: soroban_sdk::Env,
amount_out: i128,
reserve_in: i128,
reserve_out: i128,
) -> Result
Performs chained get_amount_out calculations on any number of pairs.
e - The environment.amount_in - The input amount.path - Vector of token addresses representing the path.Returns Result<Vec<i128>, SoroswapLibraryError> where Ok contains a vector of calculated amounts, and Err indicates an error such as an invalid path.
fn router_get_amounts_out(
env: soroban_sdk::Env,
amount_in: i128,
path: soroban_sdk::Vec,
) -> Result, CombinedRouterError>
Performs chained get_amount_in calculations on any number of pairs.
e - The environment.amount_out - The output amount.path - Vector of token addresses representing the path.Returns Result<Vec<i128>, SoroswapLibraryError> where Ok contains a vector of calculated amounts, and Err indicates an error such as an invalid path.
fn router_get_amounts_in(
env: soroban_sdk::Env,
amount_out: i128,
path: soroban_sdk::Vec,
) -> Result, CombinedRouterError>
Sorts two token addresses in a consistent order.
token_a - The address of the first token.token_b - The address of the second token.Returns Result<(Address, Address), SoroswapLibraryError> where Ok contains a tuple with the sorted token addresses, and Err indicates an error such as identical tokens.
fn sort_tokens(
env: soroban_sdk::Env,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
) -> Result<(soroban_sdk::Address, soroban_sdk::Address), SoroswapLibraryError>
Calculates the deterministic address for a pair without making any external calls. check https://github.com/paltalabs/deterministic-address-soroban
e - The environment.factory - The factory address.token_a - The address of the first token.token_b - The address of the second token.Returns Result<Address, SoroswapLibraryError> where Ok contains the deterministic address for the pair, and Err indicates an error such as identical tokens or an issue with sorting.
fn pair_for(
env: soroban_sdk::Env,
factory: soroban_sdk::Address,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
) -> Result
Fetches and sorts the reserves for a pair of tokens.
e - The environment.factory - The factory address.token_a - The address of the first token.token_b - The address of the second token.Returns Result<(i128, i128), SoroswapLibraryError> where Ok contains a tuple of sorted reserves, and Err indicates an error such as identical tokens or an issue with sorting.
fn get_reserves(
env: soroban_sdk::Env,
factory: soroban_sdk::Address,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
) -> Result<(i128, i128), SoroswapLibraryError>
Given some amount of an asset and pair reserves, returns an equivalent amount of the other asset.
amount_a - The amount of the first asset.reserve_a - Reserves of the first asset in the pair.reserve_b - Reserves of the second asset in the pair.Returns Result<i128, SoroswapLibraryError> where Ok contains the calculated equivalent amount, and Err indicates an error such as insufficient amount or liquidity
fn quote(
env: soroban_sdk::Env,
amount_a: i128,
reserve_a: i128,
reserve_b: i128,
) -> Result
Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset.
amount_in - The input amount of the asset.reserve_in - Reserves of the input asset in the pair.reserve_out - Reserves of the output asset in the pair.Returns Result<i128, SoroswapLibraryError> where Ok contains the calculated maximum output amount, and Err indicates an error such as insufficient input amount or liquidity.
fn get_amount_out(
env: soroban_sdk::Env,
amount_in: i128,
reserve_in: i128,
reserve_out: i128,
) -> Result
Given an output amount of an asset and pair reserves, returns a required input amount of the other asset.
amount_out - The output amount of the asset.reserve_in - Reserves of the input asset in the pair.reserve_out - Reserves of the output asset in the pair.Returns Result<i128, SoroswapLibraryError> where Ok contains the required input amount, and Err indicates an error such as insufficient output amount or liquidity.
fn get_amount_in(
env: soroban_sdk::Env,
amount_out: i128,
reserve_in: i128,
reserve_out: i128,
) -> Result
Performs chained get_amount_out calculations on any number of pairs.
e - The environment.factory - The factory address.amount_in - The input amount.path - Vector of token addresses representing the path.Returns Result<Vec<i128>, SoroswapLibraryError> where Ok contains a vector of calculated amounts, and Err indicates an error such as an invalid path.
fn get_amounts_out(
env: soroban_sdk::Env,
factory: soroban_sdk::Address,
amount_in: i128,
path: soroban_sdk::Vec,
) -> Result, SoroswapLibraryError>
Performs chained get_amount_in calculations on any number of pairs.
e - The environment.factory - The factory address.amount_out - The output amount.path - Vector of token addresses representing the path.Returns Result<Vec<i128>, SoroswapLibraryError> where Ok contains a vector of calculated amounts, and Err indicates an error such as an invalid path.
fn get_amounts_in(
env: soroban_sdk::Env,
factory: soroban_sdk::Address,
amount_out: i128,
path: soroban_sdk::Vec,
) -> Result, SoroswapLibraryError>