Contract 811068a1be14c83ef55fa0fb6597ddb7dda40bd5141adb2e42d73229a73d98cb

← Back to Index 📥 Download WASM

Meta

cliver 25.1.0#a048a57a75762458b487052e0021ea704a926bee
rssdkver 25.1.1#94c2a3b3a5ded6b9cf9cef0c207bf8804f3eb294
rsver 1.91.1

Instances

  • CBJGQAF7NDGSQOHG5ZXFB7PPXVPOUI7LQX7DNFWSRCUAT5OO4YRGBUPD

Interface

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>

Imports

WebAssembly Text (WAT) ▶