Welcome to the Stellar-Save FAQ! This comprehensive document addresses common questions, operational mechanics, troubleshooting scenarios, and community queries.
Tip
Quick Search: Press Ctrl + F (Windows/Linux) or Cmd + F (Mac) to quickly search for specific keywords or error codes.
- 🎒 1. Wallet Setup & Testnet Faucets
- 🏗️ 2. Group Creation & Parameters
- 🪙 3. Contribution Mechanics & Escrow
- ⏱️ 4. Payout Timing & Cycle Rotations
⚠️ 5. "What happens if I miss a contribution?" (Penalties & Late Rules)- 🔐 6. Smart Contract & Security Guarantees
- 🛠️ 7. Troubleshooting Common Transaction Failures
- 🌍 8. Community & Contribution Programs
Stellar-Save supports any wallet that integrates with Stellar's Soroban smart contract environment. The primary recommended wallet is Freighter (available as a web extension for Chrome, Brave, Firefox, and Edge). You can also use Lobstr or Albedo for wallet connection.
To interact with Stellar-Save during development and staging:
- Open the Freighter extension.
- Go to Settings (gear icon) -> Preferences -> Experimental Features.
- Toggle Enable Soroban to
ON. - Switch your network from
PublictoTestnetusing the network dropdown in the top bar.
For testnet development, you do not need real money. You can request free testnet XLM from the Stellar Friendbot faucet:
- Using browser: Visit
https://friendbot.stellar.org/?addr=<YOUR_STELLAR_ADDRESS> - Using Stellar CLI:
This command automatically calls Friendbot to fund your newly generated identity with 10,000 testnet XLM!
stellar keys generate deployer --network testnet
This is typically caused by one of two scenarios:
- DApp Authorization: The frontend application has not been granted permission. Click the Freighter extension icon, unlock your wallet, and look for an authorization prompt, or refresh the page and click "Connect Wallet".
- Local Port Incompatibility: Secure browser sandboxing might block script injection from
localhost. Ensure you are running your local frontend over a supported development server and that your Freighter extension is updated to the latest version.
By default, savings groups have boundaries enforced by the contract's configuration (ContractConfig):
- Minimum members: Enforced at
2(a ROSCA requires at least two participants). - Maximum members: The default is capped at
20members to manage cycle duration risk, though this can be configured differently by the contract admin. Creating a group with members outside these boundaries will fail withStellarSaveError::InvalidState.
No. Once a group is created, all parameters—including the contribution_amount, cycle_duration, max_members, and the rotating payout order—are permanently locked on-chain in storage (Group struct). This prevents a group creator or late-joining member from changing rules unfairly after participants have committed funds.
You can configure the cycle duration to any time window in seconds during group creation. Common presets include:
- Weekly:
604800seconds - Bi-weekly:
1209600seconds - Monthly (30 days):
2592000seconds The contract validates that the duration is greater than zero, and if aContractConfigis present, that it falls within the authorized bounds (e.g., between 1 day and 365 days).
When you call the contribute function, the smart contract utilizes Stellar's secure escrow mechanism. Funds are transferred directly from your wallet address into the contract's unique address via the SEP-41 token standard. They are locked securely in the contract state under that specific group's escrow pool and cannot be accessed by anyone, including the group creator, until a payout is executed.
Yes. If the savings group uses a custom SEP-41 token (like USDC or EURC), you must first grant the contract an allowance to transfer the contribution amount on your behalf.
- In the frontend, the app will automatically prompt you to sign a token
approvetransaction before prompting thecontributetransaction. - If you are calling the contract directly via CLI, you must call
approve(member, contract_address, amount)on the token contract first. Otherwise, the call will fail with aTokenTransferFailederror.
No. The contract enforces exact amount checks. If you try to call contribute with an amount other than group.contribution_amount, the smart contract will immediately reject the transaction with a StellarSaveError::InvalidAmount error, and no tokens will leave your wallet.
Stellar's Soroban fees are incredibly cheap, usually costing less than 0.001 XLM (a tiny fraction of a cent) per transaction. This makes micro-savings groups highly viable compared to other L1 blockchains.
Payouts are completely automated. The contract evaluates the state of the group immediately after a successful contribution.
- Instant Payout: The moment the last member of the group submits their contribution for the current cycle, the contract automatically executes the payout function within the very same transaction block. The full pool is sent to the scheduled recipient instantly.
- No Manual Execution: Members do not need to wait for a creator to click "payout" or manually claim their funds.
By default, the payout order is established by the order in which members join the group.
- The first member to join is assigned Position 0 (receives payout at the end of Cycle 0).
- The second member is assigned Position 1 (Cycle 1).
- Subsequent members are assigned positions in incrementing order up to
max_members - 1.
The contract uses a robust elapsed time helper function:
0 without panicking.
Important
A member is considered "late" if they fail to submit their contribution before the cycle time window expires. A group cannot progress to the next cycle until all contributions for the current cycle are recorded.
Cycle N Starts ──► [Contribution Window] ──► Member Misses Deadline ──► Group Stalled (No Payout) ──► Late Member Contributes + Penalty ──► Payout Executed ──► Cycle N+1 Starts
In the initial release, the escrow pool must be fully funded before a payout can be released.
- Group Freezing: If a member misses a deadline, the group's payout is stalled. Subsequent cycles cannot proceed because the payout recipient position is bound to the current cycle index.
- Resolution: The group remains in an "Active but Stalled" state until the late member submits their contribution, at which point the payout instantly fires and the next cycle immediately unlocks.
To discourage late payments and protect participating members, we are building several penalty mechanisms into the roadmap:
- Late Contribution Fees (Dynamic Penalty): A configurable penalty percentage (e.g., 5% to 10% of the contribution amount) is applied to the late member. The extra fee collected is pooled and distributed as a "cooperation bonus" to the other members who paid on time.
- Delayed Payout Queue Re-ordering: Members who miss contributions are systematically pushed to the end of the rotating payout queue (assigned the last cycle positions), meaning they lose the privilege of receiving an early pool payout.
- Configurable Grace Periods: Group creators can set a "Grace Period" (e.g., 24 or 48 hours). A payment submitted within the grace period is marked "Late" but incurs no monetary fee; payments beyond the grace period incur the full penalty.
- On-Chain Dispute Flags: If a member permanently defaults or goes unresponsive, a dispute mechanism will allow the remaining members to collectively vote to expel the defaulting member and dissolve the group, distributing locked escrow funds back to active members proportionally.
Yes. The group creator has no custodial power over your funds once they are in the escrow pool. The smart contract acts as a trustless third party. The only creator-exclusive functions are:
pause_group: Halts new contributions/payouts in an emergency.unpause_group: Resumes normal operations. Neither of these allows the creator to withdraw other members' funds.
Stellar-Save implements a strict Reentrancy Guard on all state-modifying transfer entry points. The contract checks and locks a reentrancy flag in storage at the beginning of a contribution or payout transfer call and releases it only upon exit, blocking nested recursive transaction calls.
Our smart contracts are completely open-source and public goods. You can audit the Rust implementation, error mappings, and validation checks directly in the repository at contracts/stellar-save/src/.
This section describes specific error codes returned by the smart contract and how to resolve them.
- Why it happens: You attempted to contribute a token amount that does not match
group.contribution_amountexactly, or submitted a zero value. - Resolution: Verify the required contribution in the group info card. Adjust your transaction parameters to send the exact amount.
- Why it happens: You attempted an action that is disallowed by the group's current status.
- Trying to
join_groupa group that is alreadyActive,Completed, orCancelled. - Trying to
contributeto a group that isPausedorPending. - Trying to create/update a group with out-of-bounds config parameters (e.g.
max_members < 2).
- Trying to
- Resolution: Check the group's status on the dashboard. If the group is paused, wait for the creator to call
unpause_groupbefore retrying.
- Why it happens: You have already successfully submitted your contribution for the current active cycle. Double payments in a single cycle are blocked.
- Resolution: No action needed! Your contribution is recorded. Wait for the cycle to end and roll over.
- Why it happens: The
group_idprovided in the transaction parameters does not match any registered savings group in the contract's persistent storage. - Resolution: Double-check the spelling/characters of your Group ID. If copying a link, ensure no trailing spaces are present.
- Why it happens: The contract failed to pull the custom SEP-41 tokens from your wallet address during
contribute(). This occurs if you have an insufficient balance of that token or forgot to approve the contract allowance. - Resolution:
- Confirm your wallet has a sufficient token balance.
- Ensure you have authorized a sufficient allowance for the smart contract address.
- Ensure you have a tiny amount of XLM to cover Stellar network transaction fees.
- Why it happens: The connection between Freighter and the Stellar RPC node timed out, or local network latency is high.
- Resolution:
- Go to Freighter Settings -> Network, and verify that the RPC URL is correct and active (e.g.,
https://soroban-testnet.stellar.orgfor Testnet). - Refresh the Stellar-Save frontend browser tab and reconnect your wallet.
- Go to Freighter Settings -> Network, and verify that the RPC URL is correct and active (e.g.,
Stellar-Save is an approved public goods project under the Drips Wave program. Contributors can earn funding by taking on designated development, testing, and documentation issues.
- Each open issue has an assigned point value (100–200 points).
- Once your PR is reviewed and merged, you receive points that convert to USDC at the end of the Wave cycle.
- Read the Wave Contributor Guide for complete rules.
We have an extremely active and welcoming community!
- GitHub Discussions: Post questions, ideas, and showcase work at Stellar-Save Discussions.
- Telegram Channel: Join us for quick chat at @Xoulomon.
- Developer Issues: Submit bugs and tasks at Stellar-Save GitHub Issues.