TANDA CHAMA SUSU STOKVEL GYE 계 HUI 會 EQUB እቁብ ARISAN PARDNER
Community Savings Protocol

ROSCO

Rotating Savings & Credit Organization on Qi

The ancient savings circle, perfected on-chain. Members pool tokens each round — one collects the full pot. Smart-contract enforced, yield-bearing, trustless community finance.

"The poor man's bank, where money is not idle for long" — now on Cairo/StarkNet with VESU yield

Try the Demo View Contract
Every Culture Invented This
A ROSCA (Rotating Savings and Credit Association) is humanity's oldest peer-to-peer financial system. A group agrees to contribute a fixed amount regularly. Each round, one member receives the entire pot. The rotation continues until everyone has received once. No bank. No interest. Pure community trust.
Tanda
Latin America
Chama
East Africa
Susu
West Africa / Caribbean
Hui 會
Chinese Communities
Stokvel
South Africa
Equb እቁብ
Ethiopia
Gye 계
South Korea
Arisan
Indonesia
Pardner
West Indies
Kameti کمیٹی
Pakistan
Paluwagan
Philippines
Gam'eya جمعية
Egypt
Four Steps to Community Finance
ROSCO takes the trust-based rotating savings model and replaces social enforcement with smart contracts. Payments are automatic. Rotation is on-chain. Idle funds earn yield through VESU. Nobody can cheat.
01

Create a Circle

Deploy a SavingBox contract. Set the save_amount per round, number_of_payments (total rounds), payment_interval, withdraw_fee, and link a token + VESU yield address.

02

Members Join & Pay

Members call pay() during the first round to register. Each round, every member contributes save_amount. Late payments are tracked separately from on-time ones.

03

Funds Earn Yield

Every deposit is automatically forwarded to the VESU lending protocol to earn interest while sitting in the pot. Idle money is never idle — it compounds for all members.

04

Withdraw + Bonus

At cycle end, call withdraw() to receive your savings plus a proportional share of all fees. More on-time payments = bigger share. Early exit costs a fee.

VESU Yield — Money Never Sleeps

Unlike traditional ROSCAs where pooled money sits idle, ROSCO automatically deposits every contribution into the VESU lending protocol. The pot generates yield in real-time. When the cycle ends, members split not just their savings — but the accumulated interest and fees from early withdrawals. The disciplined savers are rewarded most.

Try a Savings Circle
This simulation demonstrates how a ROSCO SavingBox contract operates. 6 members, 30 Qi per round, 6 rounds. Click through to see the lifecycle.
SavingBox Simulation
LIVE SIMULATION
POT
0 Qi
Round 1 / 6
Save Amount 30 Qi
Members 6
Pot Total 0 Qi
VESU Yield 0.0 Qi
Early W. Fees 0 Qi
[init] SavingBox deployed — 6 members, 30 Qi/round, 6 rounds, 10% early withdrawal fee
SavingBox.cairo Architecture
Written in Cairo for StarkNet. The contract manages registration, payment tracking (on-time vs late), VESU yield deposits, early withdrawal with configurable fees, and proportional reward distribution.
View Functions (read-only)
VIEWget_samount()Qi per round
VIEWget_number_of_payments()Total rounds
VIEWget_payment_interval()Seconds between
VIEWget_start_time()Unix timestamp
VIEWget_current_payment()Current round #
VIEWget_user_data(addr)Savings, valid, late, registered
VIEWget_registered_users()All member addresses
VIEWget_withdraw_fee()Early exit fee %
VIEWget_total_fees_collected()Fee pool total
VIEWget_expected_payments(ts)Payments due at time
External Functions (state-changing)
EXTpay()Contribute save_amount
EXTadvance_payment()Sync round to clock
EXTwithdraw()End-of-cycle payout
EXTearly_withdraw(n)Exit early (fee applies)
EXTdonate(amount)Boost the reward pool
CONSTRUCTOR PARAMS
u256save_amountTokens per round
u64number_of_payments# of rounds
u64payment_intervalSeconds between
u64withdraw_feeEarly exit % (max 50)
addrtoken_addressERC-20 contract
addrvesu_addressVESU lending pool
// Deploy a ROSCO savings circle on StarkNet
const savingBox = await deploy("SavingBox", {
    save_amount:       30_000000000000000000,  // 30 Qi (18 decimals)
    number_of_payments: 8,                      // 8 rounds
    payment_interval:   604800,                 // 7 days in seconds
    withdraw_fee:       10,                     // 10% early exit fee
    token_address:      QI_TOKEN_ADDRESS,       // ERC-20 Qi token
    vesu_address:       VESU_POOL_ADDRESS,      // VESU lending pool
});

// Member joins by paying first round
await savingBox.pay();  // Registers + deposits 30 Qi → VESU

// ... after all rounds complete ...
await savingBox.withdraw();  // Receives savings + fee share + yield
// What happens inside pay():

1. advance_payment()         // Sync current_round to block timestamp
2. if !registered → register  // First-time callers join (round 1 only)
3. assert total_paid < max    // Can't overpay
4. token.transfer_from(user)  // Pull save_amount from member
5. update savings map          // Track cumulative deposits
6. if on_time → valid++       // On-time? Increment valid_payments
   else    → late++          // Late? Increment late_payments
7. token.approve(vesu)        // Approve VESU to spend
8. vesu.deposit(amount)       // Deposit to earn yield