fn initialize(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
LP deposits to the shared pool. Increments LPShares(user, token).
fn lp_deposit(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token: soroban_sdk::Address,
amount: i128,
) -> Result<(), soroban_sdk::Error>
LP withdraws from the shared pool. Blocked if LP shares or pool balance insufficient.
fn lp_withdraw(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token: soroban_sdk::Address,
amount: i128,
) -> Result<(), soroban_sdk::Error>
LP share amount for a specific user and token.
fn get_lp_share(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token: soroban_sdk::Address,
) -> i128
fn get_position(env: soroban_sdk::Env, user: soroban_sdk::Address) -> Option
Closes the caller's open position and settles PnL against the LP pool.
PnL is computed on-chain from stored entry data and the caller-provided close price:
long: pnl = (close_price - entry_price) * xlm_amount / SCALE
short: pnl = (entry_price - close_price) * xlm_amount / SCALE
pnl > 0: pool pays the winner — PoolBalance -= pnl, UserMargin += collateral + pnl
pnl < 0: pool gains from the loser — PoolBalance += |pnl|, UserMargin += collateral - |pnl|
pnl = 0: UserMargin += collateral (no pool impact)
Returns InsufficientPool if the pool cannot cover a winning payout.
fn close_position(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
collateral_token: soroban_sdk::Address,
close_price: i128,
) -> Result
Total LP pool balance for a token.
fn get_pool_balance(env: soroban_sdk::Env, token: soroban_sdk::Address) -> i128
User deposits margin (collateral) to back their leveraged positions.
fn deposit_collateral(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token: soroban_sdk::Address,
amount: i128,
) -> Result<(), soroban_sdk::Error>
User withdraws free margin. Blocked while a position is open.
fn withdraw_collateral(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token: soroban_sdk::Address,
amount: i128,
) -> Result<(), soroban_sdk::Error>
Admin-only: allow a token to be used as collateral / LP token.
fn add_collateral_token(
env: soroban_sdk::Env,
token: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
Free margin balance for a user (alias for UserMargin).
fn get_collateral_balance(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token: soroban_sdk::Address,
) -> i128
Opens a synthetic leveraged position.
Computes debt_amount = xlm_amount * entry_price / SCALE on-chain so the
caller cannot manipulate the notional. Locks collateral_locked from the
user's free margin.
fn open_synthetic_position(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
asset_symbol: soroban_sdk::Symbol,
xlm_amount: i128,
entry_price: i128,
is_long: bool,
collateral_token: soroban_sdk::Address,
collateral_locked: i128,
) -> Result<(), soroban_sdk::Error>