Contract 3f7882ccee842e8010f1ca102f6fae8d49baa3458deec4e534e93196b2c0c26b

← Back to Index 📥 Download WASM

Meta

cliver 25.1.0#a048a57a75762458b487052e0021ea704a926bee
rssdkver 23.5.1#59fcef437260ed4da42d1efb357137a5c166c02e
rsver 1.89.0

Instances

  • CBGU2GKAER5OETATLBO5GS4QXWFWV3FDW5CIPG6N2LTHJHKDP6A4BW5F

Interface

Initialize the contract. Must be called once after deployment.

fn initialize(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
) -> Result<(), RoscaError>

Upgrade the contract WASM. Only the contract admin can call this.

fn upgrade(
    env: soroban_sdk::Env,
    new_wasm_hash: soroban_sdk::BytesN<32>,
) -> Result<(), RoscaError>

Transfer contract admin role.

fn set_contract_admin(
    env: soroban_sdk::Env,
    new_admin: soroban_sdk::Address,
) -> Result<(), RoscaError>

Create a new ROSCA group. Caller becomes admin.

fn create_group(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    config: GroupConfig,
) -> Result

Admin invites a member. For AdminOnly policy, member is directly approved. For vote policies, a pending vote is created (may resolve immediately). During Active status, MajorityVote is forced regardless of admission_policy.

fn invite_member(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
    candidate: soroban_sdk::Address,
) -> Result<(), RoscaError>

Cast a vote on a pending membership.

fn cast_vote(
    env: soroban_sdk::Env,
    voter: soroban_sdk::Address,
    group_id: u64,
    candidate: soroban_sdk::Address,
    approve: bool,
) -> Result<(), RoscaError>

Invited member accepts the invitation. Transitions from Invited → Approved.

fn accept_invite(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Invited member declines the invitation. Removes them from the group.

fn decline_invite(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Member deposits collateral. Required before group can start.

fn deposit_collateral(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Admin locks the group — no more members can join.

fn lock_group(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Admin starts the ROSCA. All members must be in Ready status.

fn start_group(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Transfer group admin role to another member.

fn transfer_group_admin(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
    new_admin: soroban_sdk::Address,
) -> Result<(), RoscaError>

Member voluntarily leaves the group (Recruiting or Locked only). Admin cannot leave — must transfer_group_admin first. Refunds any deposited collateral.

fn leave_group(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Approved member joins an Active group. Deposits collateral + back-payment. Back-payment = settled_rounds × contribution, distributed to each past beneficiary. total_rounds is incremented by 1.

fn join_active(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Member contributes to the current round.

fn contribute(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Advance to next round. Handles defaults, payouts, and bid resolution. Can be called by anyone after the deadline (+ grace period).

fn advance_round(env: soroban_sdk::Env, group_id: u64) -> Result<(), RoscaError>

Submit a bid in Bidding mode (before round deadline).

fn submit_bid(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
    discount_bps: u32,
) -> Result<(), RoscaError>

Admin cancels group (only in Recruiting or Locked status).

fn cancel_group(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Admin dissolves an active group. Returns remaining collateral.

fn dissolve_group(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

After a completed group, admin can start a new cycle.

fn start_new_cycle(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>

Member withdraws collateral after group is Completed.

fn withdraw_collateral(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    group_id: u64,
) -> Result<(), RoscaError>
fn remove_member(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    group_id: u64,
    member: soroban_sdk::Address,
) -> Result<(), RoscaError>
fn get_group(env: soroban_sdk::Env, group_id: u64) -> Result
fn get_members_list(
    env: soroban_sdk::Env,
    group_id: u64,
) -> soroban_sdk::Vec
fn get_member(
    env: soroban_sdk::Env,
    group_id: u64,
    address: soroban_sdk::Address,
) -> Result
fn get_rounds_list(
    env: soroban_sdk::Env,
    group_id: u64,
) -> soroban_sdk::Vec
fn get_round(
    env: soroban_sdk::Env,
    group_id: u64,
    round_index: u32,
) -> Result
fn get_current_round(
    env: soroban_sdk::Env,
    group_id: u64,
) -> Result
fn get_user_groups(
    env: soroban_sdk::Env,
    user: soroban_sdk::Address,
) -> soroban_sdk::Vec
fn get_votes_list(
    env: soroban_sdk::Env,
    group_id: u64,
) -> soroban_sdk::Vec
fn get_bids_list(env: soroban_sdk::Env, group_id: u64) -> soroban_sdk::Vec
fn get_contract_admin(
    env: soroban_sdk::Env,
) -> Result

Imports

WebAssembly Text (WAT) ▶