Transfer LMNR into the contract for reward distribution.
fn fund(
env: soroban_sdk::Env,
funder: soroban_sdk::Address,
amount: i128,
) -> Result<(), ContractError>
Claim accumulated LMNR rewards. Returns amount claimed.
fn claim(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
pool_index: u32,
) -> Result
Prove LP position via Merkle proof and start earning rewards.
fn stake(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
pool_index: u32,
lp_balance: i128,
proof: soroban_sdk::Vec>,
) -> Result<(), ContractError>
Stop earning rewards. Pending rewards are preserved for later claiming.
fn unstake(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
pool_index: u32,
) -> Result<(), ContractError>
Register a new SDEX liquidity pool for staking.
fn add_pool(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
pool_id: soroban_sdk::BytesN<32>,
) -> Result
Admin-only: withdraw LMNR from the contract.
fn withdraw(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
amount: i128,
) -> Result<(), ContractError>
Transfer admin role to a new address.
fn set_admin(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
new_admin: soroban_sdk::Address,
) -> Result<(), ContractError>
One-time initialization.
fn initialize(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
lmnr_token: soroban_sdk::Address,
reward_rate_per_sec: i128,
) -> Result<(), ContractError>
Pool hash at a given index.
fn get_pool_id(env: soroban_sdk::Env, pool_index: u32) -> soroban_sdk::BytesN<32>
Deactivate a pool. Settles rewards first, then resets total_staked. Users can still claim pending rewards after removal.
fn remove_pool(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
pool_index: u32,
) -> Result<(), ContractError>
Admin-only: reconcile a staker's balance without requiring a Merkle proof. Used by the cron to auto-adjust stakers who changed their LP holdings.
fn update_stake(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
user: soroban_sdk::Address,
pool_index: u32,
new_amount: i128,
) -> Result<(), ContractError>
Number of registered pools.
fn get_pool_count(env: soroban_sdk::Env) -> u32
Query pool accumulator state.
fn get_pool_state(env: soroban_sdk::Env, pool_index: u32) -> PoolState
Query unclaimed rewards for a user in a pool.
fn pending_reward(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
pool_index: u32,
) -> i128
Contract's LMNR balance available for rewards.
fn reward_balance(env: soroban_sdk::Env) -> i128
Query current epoch Merkle root for a pool.
fn get_merkle_root(env: soroban_sdk::Env, pool_index: u32) -> MerkleRootData
Query stake details for a user.
fn get_staker_info(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
pool_index: u32,
) -> StakerInfo
Post a new Merkle root for a pool's LP snapshots. Post a new Merkle root for the pool. Stakes carry over automatically.
fn set_merkle_root(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
pool_index: u32,
root: soroban_sdk::BytesN<32>,
snapshot_ledger: u32,
) -> Result<(), ContractError>
Update the global reward rate (LMNR stroops per second). Updates all active pools' accumulators before changing rate.
fn set_reward_rate(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
new_rate: i128,
) -> Result<(), ContractError>