The Pair Contract
esteblock
Posted on May 14, 2023
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;
}
💖 💪 🙅 🚩
esteblock
Posted on May 14, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
privacy Caught in the Crunch My Journey from Snacks to 2 Million Exposed Users Privacy
November 30, 2024
devchallenge Submission for the DevCycle Feature Flag Challenge: Feature Flag Funhouse
November 30, 2024