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)