Simple Swap Protocol Contract
Overview
The Simple Swap Protocol contract implements a basic swap protocol for generating LP (Liquidity Provider) tokens, creating liquidity pools, adding/removing liquidity, and swapping tokens. It allows users to participate in liquidity provision and token swapping in a decentralized manner.
Structs:
LP<phantom X, phantom Y>
A generic struct representing LP tokens for a specific token pair X-Y in the contract.
LP tokens represent ownership in liquidity pools.
Pair<phantom X, phantom Y>
A generic struct representing a liquidity pool for a specific token pair X-Y in the contract.
Contains fields to store the reserves of token X and Y, locked LP tokens, and mint/burn capabilities for LP tokens.
Functions:
generate_lp_name_symbol<X, Y>(): String
Generates a name symbol for LP tokens corresponding to the token pair X-Y.
Concatenates "LP-", the symbol of token X, "-", and the symbol of token Y to form the LP token name symbol.
create_pool<X, Y>(sender: &signer)
Creates a new liquidity pool for the token pair X-Y.
Ensures no duplicate pools are created for the same token pair.
Initializes the LP token for the pool to track liquidity provided by users.
add_liquidity<X, Y>(sender: &signer, x_amount: u64, y_amount: u64) acquires Pair
Allows users to add liquidity to the pool by providing amounts of token X and Y.
Calculates the optimal amount of Y tokens to be added given the amount of X tokens (or vice versa) to maintain a balanced pool.
Mints LP tokens corresponding to the provided liquidity and deposits them into the user's account.
remove_liquidity<X, Y>(sender: &signer, liquidity: u64) acquires Pair
Allows users to remove liquidity from the pool by burning their LP tokens.
Calculates the amounts of token X and Y that the user will receive based on the proportion of their LP tokens to the total supply.
Deposits the corresponding amounts of X and Y tokens into the user's account.
swap_x_to_y<X, Y>(sender: &signer, amount_in: u64) acquires Pair
Allows users to swap token X for token Y.
Calculates the amount of token Y that the user will receive in exchange for the provided amount of token X, considering a 0.3% fee.
Deposits the received token Y into the user's account.
Helper Functions:
pair_exist<X, Y>(addr: address) -> bool
Checks if a liquidity pool exists for the token pair X-Y or Y-X.
Returns true if a pool exists, otherwise false.
quote(x_amount: u128, x_reserve: u128, y_reserve: u128) -> u128
Calculates the optimal amount of token Y given the amount of token X, X reserve, and Y reserve.
get_amount_out(amount_in: u128, in_reserve: u128, out_reserve: u128) -> u128
Calculates the amount of output token for a given amount of input token in a swap, considering a 0.3% fee.
get_coin<X, Y>() -> (u64, u64) acquires Pair
Returns the current reserves of token X and Y in the liquidity pool.
Last updated