Returns the token name ("WhaleHub BLUB")
fn name(env: soroban_sdk::Env) -> soroban_sdk::String
FLOW EXAMPLE (10 AQUA stake):
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