fn upgrade(
env: soroban_sdk::Env,
new_wasm_hash: soroban_sdk::BytesN<32>,
operator: soroban_sdk::Address,
)
Initialize the bridged token wrapper contract.
admin - Contract admin, can set Axelar config and grant/revoke rolesupgrader - Can upgrade the contract WASMepoch_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:
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