Read this first
What it computes
The exposure is the plan’s own formula:
Worst case per vault per offline session is roughly floor_limit × merchants_reached − locked_balance. […] The residual is an ordinary insurance line — which is exactly how card schemes have priced floor-limit risk for fifty years.
The model turns that into a number, nets off staked first-loss capital, treats overspend attempts as a Poisson count, and covers the tail at a chosen confidence.
At the default assumptions — 1,000 vaults, 200 locked, 10 bps attempt rate, 99.5% coverage:
Four findings
1 · The 0.20% line does not cover the losses it exists to cover
Separately, and not the same question: the reserve is a stock, the line is a flow. Even at the correct rate it takes 3.5 months of the line to accumulate the $8,000. A reserve correctly sized in steady state still needs funding on day one.
2 · The Trust Stake curve makes things worse before better
This is the result that was not obvious, and it constrainsk.
Staking raises the offline limit — and the limit is multiplied by every merchant the payer can reach, while the stake only covers itself once. Because √ has an unbounded slope at zero, a small stake adds more exposure than it absorbs.
Require a minimum stake
At least
s* before the curve applies at all.Lower k
The crossover goes as
k², so halving k quarters it — to about $62.50, which a small merchant could plausibly hold.RiskConfig update, not a redeploy. That is exactly why those parameters were left as configuration when the curve shipped.
3 · The hard cap is not doing any work
With base 500 cap takes $81,000 of staked value:
No small merchant will ever approach it, so the cap binds nothing and the real ceiling is whatever the curve happens to produce. Either the cap comes down to where it binds, or
k comes up — but k coming up pushes the crossover in finding 2 further out, since it moves as k². The two have to be set together.
4 · Reserve relief cannot fund the illustrative premium
The plan is explicit that the premium must be derived, not picked: “Nelo can pay up to the value of the capital it saves. […] an illustrative 1.5× is a placeholder until that model exists, not a promise.” Derived, above the crossover:
About 1.001×, not 1.5×.
The reason is dilution, and it is structural rather than a matter of tuning inputs. A staked dollar reduces the loss of the vault that defaults by a dollar — but the platform holds stake from every vault, and only ~10 of 1,000 default in the covered case. Reserve released per dollar of platform-wide stake is
covered_attempts / staking_vaults, not 1.
What is most worth measuring
The reserve is super-linear in merchants reachable — elasticity 1.25, because collateral is netted off once and everything above it scales:
It is also the input with the least behind it. One afternoon counting how many distinct merchants a customer could plausibly reach in a single offline trip is worth more than any refinement of the maths here.
A gap this model assumes rather than closes
The exposure priced here is a payer signing successive sequences that each carry a plausibleremaining_after, together exceeding their collateral.
The replay window closes double-spending at one sequence, and report_conflict freezes on two vouchers at the same sequence — but two vouchers at different sequences with inconsistent remaining_after are not a conflict by that definition, so they do not trigger the freeze.
That is the residual the insurance line exists for. Whether report_conflict should also accept an inconsistent-remaining_after pair is worth deciding deliberately — it would shorten the window in which a compromised device keeps trading. Not changed; it is a design decision, not a modelling one.
Where the numbers go
base,kandhard_cap→ theRiskConfigaccount, set by instruction. Findings 2 and 3 are config changes.- The reserve and rebate lines →
INSURANCE_RESERVEandREBATE_PAYABLEin@nelo/settle, which already accrues both per sale. Finding 1 is a rate change inmoney.ts. - The pitch deck’s unit economics and premium slides → where findings 1 and 4 have to be reflected before submission.