← Back to the website (Spanish)
Español 📄 League rules (Spanish) Start reading ↓

N0LOSS

Savings that reward consistency: non-custodial savings with Consistency Leagues on Stellar / Soroban

Version v4.1 — Consolidated document (English translation of the Spanish original)

Date: October 2026

Status: Pre-launch — economic model defined; no real deposits

License: Creative Commons BY-NC 4.0

Abstract

N0Loss is a non-custodial savings app built on Stellar/Soroban that rewards the habit of saving, not luck or how much money someone has. It is designed to help families in Spain (and later in Latin America) build an emergency fund. Users deposit euros through MoneyGram, converted into EURC (the default in Spain) or USDC, into an account that only they control, with no deposit or withdrawal fees. Balances are placed in DeFindex vaults (over-collateralised lending). What they generate is variable and not guaranteed.

Of what savings generate, 60% goes to each saver on their own balance, accrues continuously and is always paid. 30% funds the prize pool of the Consistency Leagues, distributed in full among savers every month through a deterministic ranking with no element of chance. 10% goes to N0Loss. The 60% minimum and the 10% maximum are fixed in the contract.

1. Introduction and motivation

Many families have no savings cushion for emergencies. Current accounts pay almost nothing and traditional savings products lock the money away. Saving is hard mostly because of habit: the incentive to put a little aside every month is weak and comes late.

Prize-linked savings products have precedents, such as NS&I Premium Bonds in the UK or prize-linked savings accounts at US credit unions, and they show that a visible prize encourages saving. N0Loss takes that idea, but with no randomness: savers always receive their share of what their savings generate, and prizes are allocated through a public ranking that measures consistency and saving against each person's own pace, within leagues of similar balances. Prizes go to consistency, not to luck or to how much someone has.

2. Architecture (Stellar/Soroban)

The architecture is described at the level of contracts and functional modules. This document sets the economic behaviour they must follow.

Contract / moduleFunctionStellar building block
VaultOne per asset (EURC, USDC). Non-custodial deposits and withdrawals; principal accounted for in vault shares; per-person cap. Withdrawals cannot be paused.SAC / SEP-41
Strategy RouterAllocates capital to authorised strategies within their limits; keeps a liquidity buffer and manages the withdrawal queue (section 7).Soroban contract
DeFindex adapterDeposits into and withdraws from DeFindex vaults and reads their value. Later, a Spiko adapter with the same interface.DeFindex vaults
FeeSplitterSplits what savings generate: 60% to the saver (it stays in the Vault and raises their share value), 30% to LeagueVault and 10% to N0Loss. The 60% minimum and 10% maximum are immutable.Soroban contract
LeagueVaultLeague prize pool and its reserve. Receives the 30% and sponsor contributions; publishes the monthly Merkle root and pays claimed prizes.Soroban contract
SponsorVaultA sponsor's own vault: the sponsor keeps its principal, donates what it generates to LeagueVault and is subject to a 30-day withdrawal notice. It also holds the funds for sponsored challenges.Soroban contract + Strategy Router
GovernanceMultisig and a timelock of at least 30 days for any change to contracts or parameters; enforces the immutable limits.Soroban contract (OpenZeppelin Stellar)
OnboardingKYC (one person, one account) and euro ↔ EURC/USDC ramp.MoneyGram Ramps (SEP-24); SEP-12
Passkey walletsSmart accounts controlled with the phone's biometrics, with no seed phrases.Smart Account Kit; SEP-45

The ranking is computed off-chain with the public formula; only its Merkle root is published and verified on-chain (section 5.7). Settlement in a few seconds and sub-cent fees on Stellar.

3. Source of the surplus

Everything generated is variable and not guaranteed.

One vault per currency. Each Vault invests only in assets of its own currency, so savers take no exchange-rate risk between what they deposit and what is invested. Investing euros in dollar or sterling bonds would require hedging the currency, and that hedge costs roughly the difference between the two currencies' interest rates: what a hedged position generates ends up close to what a euro asset generates. That is why N0Loss does not promise in euros what bonds in other currencies generate.

VaultForAssets
EURSpain and the EU (launch)DeFindex vaults in EURC; later, tokenised euro-area Treasury bills (Spiko EUTBL)
USDLatin America (later phase)DeFindex vaults in USDC; tokenised US Treasury bills, only from an issuer with retail access in the target countries and available on Stellar
Local currencyCountry by country (later phase)Tokenised local government debt, for example CETES through Etherfuse in Mexico, subject to analysis

3.1 Surplus for the period

Part of the balance stays uninvested as a liquidity buffer in EURC/USDC. The examples in this document assume 95% invested. The rest is spread across active strategies with weights w_k (at launch, only one: DeFindex):

S_total = Σ balance_i (balances of all savers)
APR_portfolio = Σ_k w_k × APR_k (Σ w_k = 1)
Y_month ≈ S_total × 0.95 × APR_portfolio / 12

APR_k: effective annual rate generated by each strategy, observed on-chain. Variable and not guaranteed.

4. Surplus split (60 / 30 / 10)

What savings generate —never the principal— is split as follows every time FeeSplitter records it:

DestinationWeightDescription
Saver60%On their own balance and in proportion to it. Accrues continuously and is always paid, whether or not they take part in the leagues.
League prize pool30%Goes to LeagueVault and is distributed in full among savers every month.
N0Loss10%Operations and technical reserve. N0Loss's only fee income.
Y = asset_value(t) − asset_value(t − 1) (recorded surplus)
Savers = 0.60 · Y LeagueVault = 0.30 · Y N0Loss = 0.10 · Y
UserShare_i ≈ balance_i × 0.95 × APR × 0.60 (per year)

The 60% stays in the Vault and is reflected in each saver's share value, so it accrues continuously. Immutable limits: the saver's share cannot go below 60% and N0Loss's cannot exceed 10%. No deposit or withdrawal fees.

5. Consistency Leagues

Taking part is free and voluntary: those who do not take part receive exactly the same. There is no element of chance: winners come from a deterministic ranking with a public formula.

5.1 Leagues and phases

Each saver competes in a league with people of similar balances. The league is assigned by the average daily balance over the last 3 months.

PhaseUsersPer-person capLeagues
TestnetPilot with test funds—Testing
Mainnet beta1,000–2,000, by invitation€1,000Up to €250 · €250 to €500 · €500 to €1,000
After the betaPhased openingExpandableNew leagues unlocked in phases: first up to €10,000, then higher

5.2 Pool per league

The monthly pool is split across leagues 50% by their money and 50% by their number of participants. The league with more users and more money generates more prizes.

Pool_month = 0.30 · Y_month + Sponsorship_month − Reserve_retention + Reserve_use
Pool_L = Pool_surplus × ( 0.5 × S_L / S_total + 0.5 × N_L / N_total ) + Sponsorship_L

S_L: balance of league L's participants. N_L: number of participants in league L. Pool_surplus: the part of the pool that comes from the surplus.

Sponsorship directed to higher-balance leagues. With the 50/50 split, high-balance leagues contribute more to the pool than they receive. Sponsor contributions correct this: they are allocated first, from the highest league down, to cover that deficit, and the rest goes to the highest league.

Deficit_L = max(0, Pool_surplus × (S_L / S_total − share_L)) share_L = 0.5 × S_L / S_total + 0.5 × N_L / N_total

In the beta example (section 8), the €500 to €1,000 league contributes ≈ €300.59/month and receives ≈ €226.19: about €74/month of sponsorship balances it.

5.3 Tiers

Within each league there are two tiers every month:

Top 0.5%: n₁ = max(1, round(0.005 × N_L)) Prize₁ = 0.65 × Pool_L / n₁
0.5% to 1%: n₂ = max(1, round(0.005 × N_L)) Prize₂ = 0.35 × Pool_L / n₂
Prize_i = min(Prize_tier, average_balance_i)

The prize is credited to the winner's balance. Any amount above the maximum prize goes to the prize reserve (section 5.6).

5.4 Scoring

Each participant's monthly score combines three criteria, each normalised between 0 and 1:

Score_i = 0.50 × C_i + 0.35 × A_i + 0.15 × R_i

Those with less than 6 months are measured with the median of the months they have; with no history, their target is the €30 minimum.

5.5 Rules

5.6 One-month reserve

Prizes are not announced in advance: they depend on what is actually generated in the month and are known at month-end. To keep them steady in weaker months, LeagueVault holds a reserve worth one month of pool, built up gradually, which also receives any excess when the maximum prize applies. The reserve belongs to the savers' pool.

5.7 Verifiable ranking

  1. Computation: at month-end, the ranking is computed off-chain with the public formula and on-chain data (balances, contributions and withdrawals).
  2. Publication: a Merkle root with winners and amounts is published in LeagueVault, together with the data needed to reproduce the computation.
  3. Challenge period (7 calendar days): anyone can reproduce the computation with the published data and report a discrepancy, in the app or at contact@n0loss.com. If valid, the ranking is corrected, a new root is published and the period restarts.
  4. Claim (90 days): each winner then claims their prize with their Merkle proof and it is credited to their balance. Anything unclaimed after 90 days goes to the prize reserve.

Every user can check their own position. The N0Loss team cannot take part in the leagues.

6. Sponsors

Companies can support saving in three ways:

Sponsorship_month = Σ contributions + Σ (capital_k × 0.95 × APR / 12)

Contributions to the pool and what SponsorVaults generate and donate are directed to higher-balance leagues (section 5.2). Sponsors pay N0Loss a fee for the visibility service, separate from what they contribute to prizes. N0Loss promises sponsors no return of any kind; their capital is exposed to the same protocol risks as savers' capital. Excluded sectors: consumer credit and payday loans, gambling and betting, tobacco, alcoholic beverages, weapons, and promoters of speculative crypto-assets.

6.1 Business model

The 10% of the surplus covers operations and grows with total savings, but it is not enough on its own: with costs of €300,000/year (illustrative assumption) and vaults generating 4% a year, about €79M in savings would be needed. That is why the main revenue comes from services to third parties:

Revenue sourceWho paysWhat they get
Sponsorship feeBrands that contribute to the pool, fund challenges or deposit in a SponsorVaultVisibility with an audience that saves, aggregated impact metrics and association with a positive habit
B2B2C financial wellbeing programmesEmployers, city councils, NGOs and insurersLeagues and challenges for their staff or users, with their own contributions to the pool, and measurement of habit change (share saving every month, retention, savings growth), always aggregated
10% of the surplusGenerated by the deposited savingsOperations and technical reserve

7. Liquidity, withdrawals and losses

Users can withdraw their money at any time, free of charge. Withdrawals can never be paused: no governance role has that power.

7.1 Liquidity order

OrderSourceAvailability
1Liquidity buffer in EURC/USDCImmediate
2Positions in DeFindex vaultsImmediate if lending markets have free liquidity (depends on utilisation)
3Spiko (later)Redemption on the next business day, to replenish the sources above

Sizing rule. Liquidity available on demand must cover worst-case expected withdrawals. The buffer counts at 100% and DeFindex positions at a haircut d_D, because their liquidity depends on utilisation. Once Spiko is added, the worst case will include several consecutive days without redemptions (for example, a bank holiday), and Spiko's maximum weight follows from this rule.

Buffer + d_D × DeFindex ≥ Worst_case_withdrawals

With these values, available liquidity is 5% + 50% × 95% = 52.5% of the balance, more than three times the assumed worst case. These are initial values and will be recalibrated with beta data.

7.2 Fair withdrawal queue

If a withdrawal cannot be served immediately (for example, because lending markets are almost fully borrowed), it enters a first-come, first-served queue. The queue is served as liquidity comes in, nobody can jump ahead, and each queued withdrawal keeps being valued at the share value.

7.3 Loss mode

If a strategy suffers a loss, the Vault share value is marked down and the loss is shared proportionally among all savers. Nobody is paid in full while others wait: those who withdraw during loss mode do so at the adjusted value. While it lasts, FeeSplitter sends nothing to LeagueVault or N0Loss: everything generated goes to savers until the share value recovers its pre-loss level. The loss is disclosed in the app and on the website as soon as it is detected, with its amount and the new share value.

8. Numerical example and parameters

8.1 Illustrative example: the beta

Assumptions: 1,500 users, 40% in the league up to €250 (average balance €150), 35% in the €250 to €500 league (€375) and 25% in the €500 to €1,000 league (€750), for an average of about €380 (€378.75); vaults generating 4.5% a year; 95% invested; no sponsors and a full reserve.

Assumption / resultValue
Total savings≈ €568,125
Surplus generated (95% invested, 4.5%)≈ €2,024/month
For savers (60%)≈ €1,214/month
League prize pool (30%)≈ €607/month
N0Loss (10%)≈ €202/month
LeagueParticipantsLeague poolTop 0.5%0.5% to 1%
Up to €250600≈ €169.533 × ≈ €36.733 × ≈ €19.78
€250 to €500525≈ €211.463 × ≈ €45.823 × ≈ €24.67
€500 to €1,000375≈ €226.192 × ≈ €73.512 × ≈ €39.58

A saver with €500 receives ≈ 500 × 4.5% × 0.95 × 0.60 ≈ €12.83/year (≈ 2.57% a year), whether or not they take part in the leagues. With €1,000, ≈ €25.65/year.

8.2 Scale scenario: €10M

Assumption / resultValue
Total savings€10,000,000
Surplus generated (95% invested, 4.5%)≈ €35,625/month
For savers (60%)≈ €21,375/month
League prize pool (30%)≈ €10,688/month
N0Loss (10%)≈ €3,563/month

Initial proposal for leagues at scale, to be recalibrated with beta data: up to €250 · €250 to €500 · €500 to €1,000 · €1,000 to €2,500 · €2,500 to €5,000 · €5,000 to €10,000. The 50/50 split across leagues and sponsorship directed to higher-balance leagues remain.

Illustrative figures. What savings generate is variable and not guaranteed. Actual prizes are known at each month-end.

8.3 Parameters

ParameterValue
Per-person savings cap€1,000 in the beta, expandable in phases
Deposit / withdrawal fee0 / 0
Surplus split60% saver / 30% league pool / 10% N0Loss (immutable limits: ≥ 60% and ≤ 10%)
Saver's shareContinuous accrual
League cycleMonthly
League assignmentAverage daily balance over the last 3 months
Split across leagues50% money / 50% participants
TiersTop 0.5%: 65% · 0.5% to 1%: 35% · at least 1 winner per tier
ScoringConsistency 50% · new savings 35% (minimum target €30) · streak 15% (at least €30 a month; counts up to 24 months)
Tie-breakFewest prizes in 12 months → longest streak → tenure
SponsorshipDirected to higher-balance leagues
Rest after winning3 months
Maximum prize per person per monthTheir average balance
Minimum balance to compete€50
Emergency withdrawal1 per year, up to 25% of the balance
Prize reserve1 month of pool; 10% retention until full; used below 80% of the average
Challenge / prize claim7 days / 90 days (unclaimed goes to the reserve)
Liquidity buffer / DeFindex haircut5% / 50%
Per-strategy limit / Spiko60% / 40% of what is invested
Timelock≥ 30 days
StrategiesOne vault per currency. EUR: DeFindex; Spiko planned after mainnet. USD and local currencies: later phase
NetworkStellar (Soroban)

9. Security and risk management

The name «N0Loss» is not a guarantee: savers' money is not guaranteed and is not covered by the Spanish Deposit Guarantee Fund.

RiskMitigation
Exploit in N0Loss contractsOpen source; external audit planned through the SCF Audit Bank before receiving real funds; per-person cap.
Failure or exploit in DeFindex vaults or lending marketsAudited protocols; per-strategy limit; collateral monitoring; loss mode with proportional sharing (section 7.3). Cannot be eliminated: it can affect the principal.
Stablecoin depeg (EURC, USDC)Stablecoins from regulated issuers. Cannot be eliminated.
Drop in what savings generateThe saver bears the variation of their 60%; prizes depend on what is actually generated and the one-month reserve smooths them.
Liquidity (high utilisation; later, Spiko redemptions on business days only)Liquidity order, buffer sized for the worst case and fair withdrawal queue (section 7).
Malicious upgrades or parameter changesMultisig and a timelock of at least 30 days with in-app notice; immutable limits; withdrawals cannot be paused, so anyone can exit before a change takes effect.
Ranking manipulationPublic formula; on-chain Merkle root; challenge period; KYC (one person, one account); the team does not take part.

9.1 Threat model

What must be protected: savers' balances (Vault), the prize pool and its reserve (LeagueVault), sponsors' capital (SponsorVault) and the integrity of the ranking. What follows are design requirements the contracts must meet; they will be checked with tests and in the audit, and the full model will be published with the repository.

ThreatMitigationResidual risk
A. N0Loss contracts
Share accounting errors (rounding, first-deposit inflation attack)Rounding always in the Vault's favour; a non-withdrawable initial deposit by N0Loss; the invariant «value of shares = Vault assets» checked with property-based tests.Bugs missed by tests and audit.
Incorrect surplus splitPercentages are enforced in the contract (≥ 60% for the saver, ≤ 10% for N0Loss). Only value above the previous high-water mark is split, so nothing is ever taken from principal or split twice.Low.
Blocked withdrawalsThere is no function to pause withdrawals. If liquidity is short, the first-come, first-served queue is served as funds arrive; the per-person cap limits its size.Waiting times when liquidity is very low.
B. Admin keys
Theft or misuse of an admin key, including by insidersMultisig with keys on separate devices [PENDING: threshold and signers]. Every change goes through a 30-day timelock visible on-chain and announced in the app, and since withdrawals cannot be paused, anyone can exit before it takes effect. No role can move Vault funds to another address, change the immutable limits or pause withdrawals.Users not reacting within the 30-day window.
Urgent withdrawal from a strategyThe only action without a timelock is returning funds from a strategy to the Vault: it can only go in that direction, never outwards.Low.
C. DeFindex (external dependency)
Failure, exploit or insolvency of the vault or the underlying lending marketPer-strategy limit; monitoring of the DeFindex share value and utilisation; urgent withdrawal to the Vault; loss mode with proportional sharing (section 7.3).Loss of part of the principal: cannot be eliminated.
Changes made by DeFindex's own administrators, outside N0Loss's timelockChoose vaults whose governance has its own delays [PENDING: verify the guarantees of the chosen vault]; monitor their changes and withdraw to the Vault if a change increases risk.Changes applied without prior notice.
Manipulated DeFindex share value, to withdraw more than dueWithdrawals are valued at the lower of the current value and the last validated value. Surplus is only recorded if the value rises within a reasonable margin between two readings; anomalous jumps are not split and are held for review.Small manipulations below the margin.
D. Ranking manipulation
Several accounts held by one personKYC (one person, one account), per-person cap and a €50 minimum balance to compete.Identity fraud that gets past KYC.
Withdrawing and re-depositing to inflate new savingsNet savings for the month are measured (contributions minus withdrawals); a net withdrawal breaks consistency; the target is one's own median and the score is capped at 100%.Low.
Last-minute moves before month-endLeagues are assigned by 3-month average daily balance, not by the balance at a single point in time.Low.
Operator publishing a wrong or self-serving rankingFormula, computation code and data are public so anyone can reproduce it; 7-day challenge period; the contract rejects a root whose prizes add up to more than each league's available pool; the team cannot take part.Errors nobody challenges in time.
E. Off-chain
Impersonation of the website or app (phishing)Passkey accounts (WebAuthn), bound to the domain and phishing-resistant; no seed phrases to steal.Attacks on the user's device.
Identity data leakKYC is done by the anchor (MoneyGram); N0Loss keeps the minimum needed to enforce «one person, one account».Incidents at providers.

10. Regulatory compliance

11. Governance

12. Roadmap

Validation (website, double opt-in waitlist and economic model) is complete. This is the plan from the SCF award; months are counted from the award and will be adjusted to the programme's actual timelines.

StageIndicative durationWhat gets closed
Kick-offMonth 0–1Company incorporated, legal opinion commissioned, public repository, full threat model and contract specification.
Tranche 2: testnetMonths 1–3Contracts and DeFindex integration on testnet, ranking service, app demo and audit request to the SCF Audit Bank.
Between tranchesMonths 3–5Audit and fixes, legal opinion received, agreement with MoneyGram, final rules and terms, and regulatory sandbox application.
Tranche 3: mainnet betaMonths 5–91,000–2,000 users by invitation, €1,000 cap, three leagues and weekly metrics.
RecalibrationMonths 9–10Parameter adjustments, higher caps and more leagues, first sponsors and B2B2C pilots.
Later—Spiko as a second strategy, dollar vault and Latin America.

What could delay the plan the most: the legal opinion (if the EU fit is not favourable) and the MoneyGram agreement. That is why both start in the first month.

13. Building blocks and references