Contract 5f8f8c8c0e3d2f7b5700d5a5d0eb2412f69a2a96b91c4d6096caa773bb9b9d5f

← Back to Index 📥 Download WASM

Meta

rssdkver 23.1.0#7456be9d91fe1f4cb070fc2732bac78244ce6c3f
rsver 1.91.0

Instances

  • CAK6Z6KFMB3V2ENEJ7THVKXUYQ5EG7EL2TM5UQ2FLDXI37FS6DRIMIZH

Interface

Pause the contract (emergency stop)

When paused, all user-facing functions are disabled except admin functions. This is an emergency mechanism to protect user funds in case of discovered vulnerabilities.

Errors

  • NotAdmin - If caller is not the admin
fn pause(env: soroban_sdk::Env) -> Result<(), soroban_sdk::Error>

Check if a contract is an approved game

fn is_game(env: soroban_sdk::Env, id: soroban_sdk::Address) -> bool

Unpause the contract

Restores normal contract functionality after emergency pause.

Errors

  • NotAdmin - If caller is not the admin
fn unpause(env: soroban_sdk::Env) -> Result<(), soroban_sdk::Error>

Update the contract WASM hash (upgrade contract)

Errors

  • NotAdmin - If caller is not the admin
fn upgrade(
    env: soroban_sdk::Env,
    new_wasm_hash: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>

Add a game contract to the approved list

Errors

  • NotAdmin - If caller is not the admin
fn add_game(
    env: soroban_sdk::Env,
    id: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>

End a game session with outcome verification

Requires game contract authorization. Both players' FP wagers are spent/burned. Only the winner's wager contributes to their faction standings. ZK proof verification handled client-side for MVP.

Errors

  • SessionNotFound - If session doesn't exist
  • InvalidSessionState - If session is not Pending
  • InvalidGameOutcome - If outcome data doesn't match session
  • ProofVerificationFailed - If ZK proof is invalid
fn end_game(
    env: soroban_sdk::Env,
    game_id: soroban_sdk::Address,
    session_id: u32,
    proof: soroban_sdk::Bytes,
    outcome: GameOutcome,
) -> Result<(), soroban_sdk::Error>

Get the admin address

fn get_admin(env: soroban_sdk::Env) -> soroban_sdk::Address

Get epoch information

Returns current epoch if no number specified, otherwise the specified epoch.

Errors

  • EpochNotFinalized - If requested epoch doesn't exist
fn get_epoch(
    env: soroban_sdk::Env,
    epoch: Option,
) -> Result

Check if contract is paused

fn is_paused(env: soroban_sdk::Env) -> bool

Update the admin address

Errors

  • NotAdmin - If caller is not the current admin
fn set_admin(
    env: soroban_sdk::Env,
    new_admin: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>

Get the current configuration

fn get_config(env: soroban_sdk::Env) -> Config

Get player information

Returns complete persistent player data including selected faction, total deposited, and deposit timestamp.

Errors

  • UserNotFound - If user has never interacted with the contract
fn get_player(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> Result

Start a new game session

Locks factions and fp for both players. If this is a player's first game in the epoch, initializes their fp and locks their faction.

Errors

  • GameNotWhitelisted - If game_id is not approved
  • SessionAlreadyExists - If session_id already exists
  • InvalidAmount - If wagers are <= 0
  • InsufficientFactionPoints - If players don't have enough fp
  • ContractPaused - If contract is in emergency pause mode
fn start_game(
    env: soroban_sdk::Env,
    game_id: soroban_sdk::Address,
    session_id: u32,
    player1: soroban_sdk::Address,
    player2: soroban_sdk::Address,
    player1_wager: i128,
    player2_wager: i128,
) -> Result<(), soroban_sdk::Error>

Claim epoch winnings/yield for a user for a specific epoch

Calculates user's share of the reward pool based on their fp contribution to the winning faction.

Returns

Amount of USDC claimed

Errors

  • EpochNotFinalized - If epoch doesn't exist or isn't finalized
  • RewardAlreadyClaimed - If user already claimed for this epoch
  • NotWinningFaction - If user wasn't in the winning faction
  • NoRewardsAvailable - If user has no rewards to claim
  • ContractPaused - If contract is in emergency pause mode
fn claim_yield(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    epoch: u32,
) -> Result

Cycle to the next epoch

Finalizes current epoch (determines winner, withdraws BLND, swaps to USDC, sets reward pool) and opens next epoch.

Returns

The new epoch number

Errors

  • EpochNotReady - If not enough time has passed
  • EpochAlreadyFinalized - If current epoch is already finalized
  • FeeVaultError - If fee-vault operations fail
  • SwapError - If BLND → USDC swap fails
fn cycle_epoch(env: soroban_sdk::Env) -> Result

Remove a game contract from the approved list

Errors

  • NotAdmin - If caller is not the admin
fn remove_game(
    env: soroban_sdk::Env,
    id: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>

Initialize the contract

Sets up the admin, external contract addresses, and creates the first epoch.

Arguments

  • admin - Admin address (can modify config and upgrade contract)
  • fee_vault - fee-vault-v2 contract address
  • soroswap_router - Soroswap router contract address
  • blnd_token - BLND token address
  • usdc_token - USDC token address
  • epoch_duration - Duration of each epoch in seconds (default: 345,600 = 4 days)
  • reserve_token_ids - Reserve token IDs for claiming BLND emissions (e.g., vec![&env, 1] for reserve 0 b-tokens)

Errors

  • AlreadyInitialized - If contract has already been initialized
fn __constructor(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    fee_vault: soroban_sdk::Address,
    soroswap_router: soroban_sdk::Address,
    blnd_token: soroban_sdk::Address,
    usdc_token: soroban_sdk::Address,
    epoch_duration: u64,
    reserve_token_ids: soroban_sdk::Vec,
) -> Result<(), soroban_sdk::Error>

Update global configuration

Allows admin to update specific configuration parameters. Only updates parameters that are provided (non-None).

Arguments

  • new_fee_vault - New fee-vault-v2 contract address (optional)
  • new_soroswap_router - New Soroswap router contract address (optional)
  • new_blnd_token - New BLND token address (optional)
  • new_usdc_token - New USDC token address (optional)
  • new_epoch_duration - New epoch duration in seconds (optional)
  • new_reserve_token_ids - New reserve token IDs for claiming BLND emissions (optional)

Errors

  • NotAdmin - If caller is not the admin
fn update_config(
    env: soroban_sdk::Env,
    new_fee_vault: Option,
    new_soroswap_router: Option,
    new_blnd_token: Option,
    new_usdc_token: Option,
    new_epoch_duration: Option,
    new_reserve_token_ids: Option>,
) -> Result<(), soroban_sdk::Error>

Select a faction for the user

Sets the user's persistent faction preference. Can be changed at ANY time. If you haven't played a game this epoch, the new faction applies immediately. If you've already played this epoch, the current epoch stays locked to your old faction, and the new selection applies starting next epoch.

Arguments

  • faction - Faction ID (0=WholeNoodle, 1=PointyStick, 2=SpecialRock)

Errors

  • InvalidFaction - If faction ID is not 0, 1, or 2
fn select_faction(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    faction: u32,
) -> Result<(), soroban_sdk::Error>

Get the reward pool (USDC) for a finalized epoch

Errors

  • EpochNotFinalized - If epoch doesn't exist or isn't finalized
fn get_reward_pool(
    env: soroban_sdk::Env,
    epoch: u32,
) -> Result

Get player's epoch-specific information

Returns complete epoch-specific data including locked faction, available/locked FP, total FP contributed, and initial balance snapshot.

If the user exists but hasn't played this epoch yet, returns a valid EpochUser with:

  • No faction locked (epoch_faction = None)
  • Zero faction points (available_fp = 0, locked_fp = 0)
  • No contributions (total_fp_contributed = 0)
  • Initial balance of 0 (not yet snapshotted)

Errors

  • UserNotFound - If user has never interacted with the contract
fn get_epoch_player(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> Result

Check if a user's faction is locked for the current epoch

Once locked (after first game), faction cannot be changed until next epoch.

fn is_faction_locked(env: soroban_sdk::Env, user: soroban_sdk::Address) -> bool

Get the winning faction for a finalized epoch

Errors

  • EpochNotFinalized - If epoch doesn't exist or isn't finalized
fn get_winning_faction(
    env: soroban_sdk::Env,
    epoch: u32,
) -> Result

Check if user has claimed rewards for an epoch

fn has_claimed_rewards(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    epoch: u32,
) -> bool

Calculate how much a user would receive if they claimed now

This doesn't actually claim, just calculates the amount. Useful for UIs to show pending rewards.

Returns

Amount user would receive, or 0 if not eligible

fn get_claimable_amount(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
    epoch: u32,
) -> i128

Get faction standings for a specific epoch

Returns a map of faction ID to total faction points.

Errors

  • EpochNotFinalized - If epoch doesn't exist
fn get_faction_standings(
    env: soroban_sdk::Env,
    epoch: u32,
) -> Result, soroban_sdk::Error>

Imports

WebAssembly Text (WAT) ▶