Contract b92c5ea9933b42ae46874eb3a372fd5392dea692da952d5fb64aeff949868519

← Back to Index 📥 Download WASM

Meta

rssdkver 21.7.7#5da789c50b18a4c2be53394138212fed56f0dfc4
rsver 1.92.0-nightly

Instances

  • CCZ6P3MF2DX5R2NTRLFUAYFTTM3AR5XMIAB7XICJYTYS72XPV6C2OZCR

Interface

Returns the token name ("WhaleHub BLUB")

fn name(env: soroban_sdk::Env) -> soroban_sdk::String

FLOW EXAMPLE (10 AQUA stake):

  1. Mint 11 BLUB (110%) to staking contract
  2. Receive 10 AQUA from user to staking contract
  3. Send 9 AQUA (90%) from staking contract to ICE contract
  4. Send 1 AQUA (10%) + 1 BLUB (10%) from staking contract to liquidity pool
  5. Keep 10 BLUB staked for user (tracked internally, not in wallet)
fn stake(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    amount: i128,
    duration_periods: u64,
) -> Result

Returns the token symbol ("BLUB")

fn symbol(env: soroban_sdk::Env) -> soroban_sdk::String

Approves a spender to spend BLUB tokens

fn approve(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    spender: soroban_sdk::Address,
    amount: i128,
    _expiration_ledger: u32,
)

Returns the BLUB balance for a given address

fn balance(env: soroban_sdk::Env, id: soroban_sdk::Address) -> i128

Unstake a specified amount from unlocked positions This replaces the old index-based unstaking logic

fn unstake(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    amount: i128,
) -> Result<(), soroban_sdk::Error>

Returns the number of decimals (7 for BLUB)

fn decimals(env: soroban_sdk::Env) -> u32

Transfers BLUB tokens from one address to another

fn transfer(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    to: soroban_sdk::Address,
    amount: i128,
)

Returns the allowance for a spender

fn allowance(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    spender: soroban_sdk::Address,
) -> i128

Burn BLUB tokens (admin-only)

fn blub_burn(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    from: soroban_sdk::Address,
    amount: i128,
) -> Result<(), soroban_sdk::Error>

Get BLUB token name

fn blub_name(env: soroban_sdk::Env) -> Result
fn get_config(env: soroban_sdk::Env) -> Result
fn initialize(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    treasury_address: soroban_sdk::Address,
    aqua_token: soroban_sdk::Address,
    liquidity_contract: soroban_sdk::Address,
    aqua_blub_pool_id: soroban_sdk::Bytes,
    ice_contract: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>

Restake BLUB tokens (stake BLUB to earn more BLUB rewards) User must have BLUB tokens in their wallet to restake

fn stake_blub(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    amount: i128,
    duration_periods: u64,
) -> Result

Get BLUB token symbol

fn blub_symbol(
    env: soroban_sdk::Env,
) -> Result
fn get_user_lp(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    pool_id: soroban_sdk::Bytes,
) -> Option

DEPRECATED: Use stake() instead This function only records metadata without transferring tokens

fn record_lock(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    amount: i128,
    duration_periods: u64,
    tx_hash: soroban_sdk::Bytes,
) -> Result

Approve BLUB spender

fn blub_approve(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    spender: soroban_sdk::Address,
    amount: i128,
) -> Result<(), soroban_sdk::Error>

Get BLUB token balance

fn blub_balance(env: soroban_sdk::Env, addr: soroban_sdk::Address) -> i128

Get BLUB token decimals

fn blub_decimals(env: soroban_sdk::Env) -> Result

Transfer BLUB tokens (public user-facing function)

fn blub_transfer(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    to: soroban_sdk::Address,
    amount: i128,
) -> Result<(), soroban_sdk::Error>
fn record_unlock(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    amount: i128,
    tx_hash: soroban_sdk::Bytes,
) -> Result

Transfers BLUB tokens using allowance mechanism

fn transfer_from(
    env: soroban_sdk::Env,
    spender: soroban_sdk::Address,
    from: soroban_sdk::Address,
    to: soroban_sdk::Address,
    amount: i128,
)

Get BLUB allowance

fn blub_allowance(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    spender: soroban_sdk::Address,
) -> i128
fn get_user_pools(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> soroban_sdk::Vec

Update AQUA-BLUB pool ID (admin-only)

fn update_pool_id(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    new_pool_id: soroban_sdk::Bytes,
) -> Result<(), soroban_sdk::Error>
fn get_global_state(env: soroban_sdk::Env) -> Result
fn get_unlock_count(env: soroban_sdk::Env, user: soroban_sdk::Address) -> u32
fn get_user_rewards(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> Option

Get BLUB total supply

fn blub_total_supply(env: soroban_sdk::Env) -> Result

Get pending stake by index

fn get_pending_stake(env: soroban_sdk::Env, index: u32) -> Option
fn record_lp_deposit(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    user: soroban_sdk::Address,
    pool_id: soroban_sdk::Bytes,
    amount_a: i128,
    amount_b: i128,
    tx_hash: soroban_sdk::Bytes,
) -> Result<(), soroban_sdk::Error>

Transfer BLUB from (for approved spenders)

fn blub_transfer_from(
    env: soroban_sdk::Env,
    spender: soroban_sdk::Address,
    from: soroban_sdk::Address,
    to: soroban_sdk::Address,
    amount: i128,
) -> Result<(), soroban_sdk::Error>
fn credit_user_reward(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    kind: u32,
    user: soroban_sdk::Address,
    pool_id: soroban_sdk::Bytes,
    amount: i128,
    tx_hash: soroban_sdk::Bytes,
) -> Result<(), soroban_sdk::Error>

Manually deposit accumulated POL to AQUA-BLUB LP (admin-only) Useful for batch deposits or if auto-deposit is disabled

fn manual_deposit_pol(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    aqua_amount: i128,
    blub_amount: i128,
) -> Result<(), soroban_sdk::Error>

Record POL rewards claimed from AQUA-BLUB pair voting (admin-only)

fn record_pol_rewards(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    reward_amount: i128,
    ice_voting_power: i128,
) -> Result<(), soroban_sdk::Error>

Update the staking period unit in minutes (admin-only) The period_unit_minutes determines the duration unit for staking. Examples: 1 = minute periods, 60 = hourly periods, 1440 = daily periods

fn update_period_unit(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    period_unit_minutes: u64,
) -> Result<(), soroban_sdk::Error>
fn update_reward_rate(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    new_rate: i128,
) -> Result<(), soroban_sdk::Error>
fn get_unlock_by_index(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    index: u32,
) -> Option
fn get_user_lock_count(env: soroban_sdk::Env, user: soroban_sdk::Address) -> u32

DEPRECATED: Use stake_blub() instead

fn record_blub_restake(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    amount: i128,
    tx_hash: soroban_sdk::Bytes,
) -> Result

Update ICE contract address (admin-only)

fn update_ice_contract(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    new_ice_contract: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>
fn get_user_lock_totals(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> Option

Toggle auto-deposit POL feature (admin-only)

fn set_auto_deposit_pol(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    enabled: bool,
) -> Result<(), soroban_sdk::Error>

Get comprehensive staking information for a user Returns total staked BLUB, unstaking available balance, and rewards

fn get_user_staking_info(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> Result
fn calculate_user_rewards(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> Result
fn get_blub_restake_count(env: soroban_sdk::Env, user: soroban_sdk::Address) -> u32

Get daily POL snapshot

fn get_daily_pol_snapshot(
    env: soroban_sdk::Env,
    day: u64,
) -> Option
fn get_distribution_count(env: soroban_sdk::Env) -> u32
fn get_user_lock_by_index(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    index: u32,
) -> Option

Process pending BLUB stakes (can be called by anyone to process batch) This avoids re-entry by processing stakes in separate transaction

fn process_pending_stakes(
    env: soroban_sdk::Env,
    max_count: u32,
) -> Result

Get pending stake count

fn get_pending_stake_count(env: soroban_sdk::Env) -> u32

Get available POL balance that can be deposited to LP

fn get_available_pol_balance(
    env: soroban_sdk::Env,
) -> Result<(i128, i128), soroban_sdk::Error>
fn get_blub_restake_by_index(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    index: u32,
) -> Option
fn get_distribution_by_index(
    env: soroban_sdk::Env,
    index: u32,
) -> Option

Get total POL contribution for user

fn get_user_pol_contribution(env: soroban_sdk::Env, user: soroban_sdk::Address) -> i128
fn record_reward_distribution(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    kind: u32,
    pool_id: soroban_sdk::Bytes,
    total_reward: i128,
    distributed_amount: i128,
    treasury_amount: i128,
    tx_hash: soroban_sdk::Bytes,
) -> Result

Get POL state

fn get_protocol_owned_liquidity(env: soroban_sdk::Env) -> ProtocolOwnedLiquidity

Imports

WebAssembly Text (WAT) ▶