Contract 25e310b6e60a61af53a6d2fdcdde42608ae73bdbda4ef4dd6e419e3fea02e22d

← Back to Index 📥 Download WASM

Meta

binver 0.0.1
rssdkver 22.0.8#f46e9e0610213bbb72285566f9dd960ff96d03d8
rsver 1.87.0

Instances

  • CAHXNAMJ5KOU24NLLOQGF56RCWYJQS463YQZEJECN5CLVJW227OYF5YB
  • CBM44OB6XXIQWKN57WKZEJI623T2S26KSBTE524LPKF6GW5GJHIOJY3B
  • CCVUQBED3YDGF66TCYQZ7I5DR2M2CQLHZDFVHOYRM2BYP3MXNDB4BNOJ

Interface

fn upgrade(
    env: soroban_sdk::Env,
    new_wasm_hash: soroban_sdk::BytesN<32>,
    operator: soroban_sdk::Address,
)

Initialize the bridged token wrapper contract.

Roles

  • admin - Contract admin, can set Axelar config and grant/revoke roles
  • upgrader - Can upgrade the contract WASM

Important

epoch_op and minter roles must NEVER be assigned to the same address. mint_from uses caller's role to distinguish between token mint and K update.

fn __constructor(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    upgrader: soroban_sdk::Address,
    code: soroban_sdk::String,
    name: soroban_sdk::String,
    decimals: u32,
)

Update K manually (for admin/epoch_op use before Axelar bridge is ready). K must be monotonically non-increasing (scaled decimal, K_SCALE = 1.0).

fn update_k(env: soroban_sdk::Env, epoch_op: soroban_sdk::Address, new_k: i128)

Get current K coefficient (scaled decimal, K_SCALE = 1.0)

fn get_current_k(env: soroban_sdk::Env) -> i128

Get raw shares balance (not rebased). Use this when calling Axelar ITS directly, as ITS works with shares.

fn shares_balance(env: soroban_sdk::Env, account: soroban_sdk::Address) -> i128

Convert base shares to rebased tokens at current K. rebased = shares * K_SCALE / K (floor)

fn to_rebased(env: soroban_sdk::Env, base_amount: i128) -> i128

Convert rebased tokens to base shares at current K (ceil rounding). base = ceil(tokens * K / K_SCALE)

fn to_base_ceil(env: soroban_sdk::Env, rebased_amount: i128) -> i128

Mint new shares OR update K from bridge.

This function serves dual purpose based on caller's role:

  • minter: Mints shares to account (token bridge via Axelar ITS)
  • epoch_op: Updates K to the provided value (epoch bridge via Axelar)

Operator and minter must be different addresses to avoid ambiguity.

fn mint_from(
    env: soroban_sdk::Env,
    caller: soroban_sdk::Address,
    account: soroban_sdk::Address,
    amount: i128,
)
fn has_role(
    env: soroban_sdk::Env,
    account: soroban_sdk::Address,
    role: soroban_sdk::Symbol,
) -> Option
fn get_role_member_count(env: soroban_sdk::Env, role: soroban_sdk::Symbol) -> u32
fn get_role_member(
    env: soroban_sdk::Env,
    role: soroban_sdk::Symbol,
    index: u32,
) -> soroban_sdk::Address
fn get_role_admin(
    env: soroban_sdk::Env,
    role: soroban_sdk::Symbol,
) -> Option
fn get_admin(env: soroban_sdk::Env) -> Option
fn grant_role(
    env: soroban_sdk::Env,
    caller: soroban_sdk::Address,
    account: soroban_sdk::Address,
    role: soroban_sdk::Symbol,
)
fn revoke_role(
    env: soroban_sdk::Env,
    caller: soroban_sdk::Address,
    account: soroban_sdk::Address,
    role: soroban_sdk::Symbol,
)
fn renounce_role(
    env: soroban_sdk::Env,
    caller: soroban_sdk::Address,
    role: soroban_sdk::Symbol,
)
fn renounce_admin(env: soroban_sdk::Env)
fn transfer_admin_role(
    env: soroban_sdk::Env,
    new_admin: soroban_sdk::Address,
    live_until_ledger: u32,
)
fn accept_admin_transfer(env: soroban_sdk::Env)
fn set_role_admin(
    env: soroban_sdk::Env,
    role: soroban_sdk::Symbol,
    admin_role: soroban_sdk::Symbol,
)
fn total_supply(env: soroban_sdk::Env) -> i128
fn balance(env: soroban_sdk::Env, account: soroban_sdk::Address) -> i128
fn allowance(
    env: soroban_sdk::Env,
    owner: soroban_sdk::Address,
    spender: soroban_sdk::Address,
) -> i128
fn transfer(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    to: soroban_sdk::Address,
    amount_rebased: i128,
)
fn transfer_from(
    env: soroban_sdk::Env,
    spender: soroban_sdk::Address,
    from: soroban_sdk::Address,
    to: soroban_sdk::Address,
    amount_rebased: i128,
)
fn approve(
    env: soroban_sdk::Env,
    owner: soroban_sdk::Address,
    spender: soroban_sdk::Address,
    amount_rebased: i128,
    live_until_ledger: u32,
)
fn decimals(env: soroban_sdk::Env) -> u32
fn name(env: soroban_sdk::Env) -> soroban_sdk::String
fn symbol(env: soroban_sdk::Env) -> soroban_sdk::String

Burn shares directly. Called by Axelar ITS for bridge-out.

NOTE: Unlike other token operations, this takes SHARES not rebased tokens. This is because Axelar bridges shares and needs to burn exact shares.

fn burn(env: soroban_sdk::Env, from: soroban_sdk::Address, amount_shares: i128)
fn burn_from(
    env: soroban_sdk::Env,
    spender: soroban_sdk::Address,
    from: soroban_sdk::Address,
    amount_shares: i128,
)

Burn tokens (rebased amount). Converts to shares internally. Use this for user-initiated burns when user thinks in token terms.

fn burn_rebased(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    amount_rebased: i128,
)

Prepare for interchain transfer via AxelarBatcher. Burns rebased tokens and returns the number of shares burned.

Flow: User wants to bridge X tokens → this burns X tokens → returns Y shares → Batcher sends Y shares to Axelar ITS → Axelar unlocks Y shares on Ethereum

fn interchain_transfer(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    amount_rebased: i128,
) -> i128
fn set_axelar_config(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    its: soroban_sdk::Address,
    dest_chain: soroban_sdk::String,
    token_id: soroban_sdk::BytesN<32>,
    gas_token: soroban_sdk::Address,
)
fn token_id(env: soroban_sdk::Env) -> soroban_sdk::BytesN<32>
fn get_axelar_its(env: soroban_sdk::Env) -> soroban_sdk::Address
fn get_axelar_chain(env: soroban_sdk::Env) -> soroban_sdk::String
fn get_axelar_gas_token(env: soroban_sdk::Env) -> soroban_sdk::Address

Imports

WebAssembly Text (WAT) ▶