Advance the tanda - single action that:
fn advance(env: soroban_sdk::Env, tanda_id: soroban_sdk::String) -> bool
Deposit for current cycle
fn deposit(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
tanda_id: soroban_sdk::String,
)
Upgrade the contract code (admin only)
fn upgrade(env: soroban_sdk::Env, new_wasm_hash: soroban_sdk::BytesN<32>)
Check if a member can be expelled (6 days passed without deposit)
fn can_expel(
env: soroban_sdk::Env,
tanda_id: soroban_sdk::String,
member: soroban_sdk::Address,
) -> bool
Get current admin
fn get_admin(env: soroban_sdk::Env) -> soroban_sdk::Address
Get tanda details
fn get_tanda(env: soroban_sdk::Env, tanda_id: soroban_sdk::String) -> Tanda
Transfer admin role (admin only)
fn set_admin(env: soroban_sdk::Env, new_admin: soroban_sdk::Address)
Initialize the contract (called once)
fn initialize(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
eurc_token: soroban_sdk::Address,
commission_address: soroban_sdk::Address,
commission_bps: u32,
)
Join a tanda (while in Forming status)
fn join_tanda(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
tanda_id: soroban_sdk::String,
)
Get tanda members
fn get_members(
env: soroban_sdk::Env,
tanda_id: soroban_sdk::String,
) -> soroban_sdk::Vec
Start the tanda (creator only, requires at least 2 members)
fn start_tanda(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
tanda_id: soroban_sdk::String,
)
Cancel tanda and refund deposits (requires >50% vote) For simplicity, only creator can cancel while in Forming status
fn cancel_tanda(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
tanda_id: soroban_sdk::String,
)
Create a new tanda
fn create_tanda(
env: soroban_sdk::Env,
creator: soroban_sdk::Address,
name: soroban_sdk::String,
amount: i128,
max_members: u32,
) -> soroban_sdk::String
Check if all members have deposited for current cycle
fn all_deposited(env: soroban_sdk::Env, tanda_id: soroban_sdk::String) -> bool
Update commission settings (admin only)
fn set_commission(
env: soroban_sdk::Env,
commission_address: soroban_sdk::Address,
commission_bps: u32,
)
Trigger payout to current beneficiary (anyone can call) Succeeds only if all active members have deposited
fn trigger_payout(env: soroban_sdk::Env, tanda_id: soroban_sdk::String)
Get current beneficiary (who will receive next payout)
fn get_beneficiary(
env: soroban_sdk::Env,
tanda_id: soroban_sdk::String,
) -> soroban_sdk::Address
Expel a delinquent member (anyone can call) Succeeds if member hasn't deposited and 6 days have passed since last payout
fn expel_delinquent(
env: soroban_sdk::Env,
tanda_id: soroban_sdk::String,
delinquent: soroban_sdk::Address,
)
Get seconds until delinquency deadline
fn time_to_deadline(env: soroban_sdk::Env, tanda_id: soroban_sdk::String) -> u64
Get status for "Advance" button - what will happen if called Returns: (can_advance, will_expel_count, will_payout, beneficiary_if_payout)
fn get_advance_status(
env: soroban_sdk::Env,
tanda_id: soroban_sdk::String,
) -> (bool, u32, bool, Option)