The SoroswapPair Contract implements the token interface (hence, it has the same functions that any Stellar Asset Contract) and it also has the specific functions for a liquidity pool to exist:
In the next chapter we will see, step-by-step how to experiment with this contract using the soroban CLI.
Here is the contract interface:
pub trait SoroswapPairTrait{ // Sets the token contract addresses for this pool fn initialize_pair(e: Env, factory: Address, token_a: BytesN<32>, token_b: BytesN<32>); // Returns the token contract address for the pool share token fn share_id(e: Env) -> BytesN<32>; fn token_0(e: Env) -> BytesN<32>; fn token_1(e: Env) -> BytesN<32>; // Deposits token_a and token_b. Also mints pool shares for the "to" Identifier. The amount minted // is determined based on the difference between the reserves stored by this contract, and // the actual balance of token_a and token_b for this contract. fn deposit(e: Env, to: Address, desired_a: i128, min_a: i128, desired_b: i128, min_b: i128); // If "buy_a" is true, the swap will buy token_a and sell token_b. This is flipped if "buy_a" is false. // "out" is the amount being bought, with in_max being a safety to make sure you receive at least that amount. // swap will transfer the selling token "to" to this contract, and then the contract will transfer the buying token to "to". fn swap(e: Env, to: Address, buy_a: bool, out: i128, in_max: i128); // transfers share_amount of pool share tokens to this contract, burns all pools share tokens in this contracts, and sends the // corresponding amount of token_a and token_b to "to". // Returns amount of both tokens withdrawn fn withdraw(e: Env, to: Address, share_amount: i128, min_a: i128, min_b: i128) -> (i128, i128); fn get_rsrvs(e: Env) -> (i128, i128); fn my_balance(e: Env, id: Address) -> i128; fn factory(e: Env) -> Address; } pub trait TokenTrait { fn initialize(e: Env, admin: Address, decimal: u32, name: Bytes, symbol: Bytes); fn allowance(e: Env, from: Address, spender: Address) -> i128; fn incr_allow(e: Env, from: Address, spender: Address, amount: i128); fn decr_allow(e: Env, from: Address, spender: Address, amount: i128); fn balance(e: Env, id: Address) -> i128; fn spendable(e: Env, id: Address) -> i128; fn authorized(e: Env, id: Address) -> bool; fn xfer(e: Env, from: Address, to: Address, amount: i128); fn xfer_from(e: Env, spender: Address, from: Address, to: Address, amount: i128); fn burn(e: Env, from: Address, amount: i128); fn burn_from(e: Env, spender: Address, from: Address, amount: i128); fn clawback(e: Env, admin: Address, from: Address, amount: i128); fn set_auth(e: Env, admin: Address, id: Address, authorize: bool); fn mint(e: Env, admin: Address, to: Address, amount: i128); fn set_admin(e: Env, admin: Address, new_admin: Address); fn decimals(e: Env) -> u32; fn name(e: Env) -> Bytes; fn symbol(e: Env) -> Bytes; }
Top comments (0)