About STASH

A savings vault for coins that pay their holders.

You put in the coin. Each payout the vault receives, minus one fee, is sold for more of that same coin and released into your share over six hours by default. When you leave, you take the same coin back, at the current rate.

It is a savings vault, full stop.

How a harvest works, step by step

Built for Robinhood Chain. STASH is a working name; the final name is not decided.

Illustrationone payout, one share · not to scale

A payout arrives in another token and is swapped. By default 10% goes to the treasury; the rest buys more of the same coin, which is released into your share in a straight line over six hours. The share rate is flat at the moment of the harvest, then rises in a straight line, and never falls.

Who it is for

For you if you

  • hold a coin that pays its holders (a share of trading fees, ETH, a stablecoin or a stock token) and would rather have more of that coin than the payout;
  • would rather not claim, swap and buy back by hand after every payout;
  • want rules you can check: each contract limit on this page gives the line of code that sets it.

Not for you if you

  • want a fixed rate or a promised return: nothing here promises either;
  • want protection from the coin's price: the share rate counts coin, not dollars;
  • must be able to get out at any moment, no exceptions: the admin can pause redemption for up to 72 hours.

What it is not

Four things it is not.

STASH does one job: it turns what your coin pays into more of your coin. It lends nothing, launches nothing and sells nothing of its own.

Not a lending market.

Nothing is lent out and nothing is borrowed against. Your coin leaves the vault in one place only: when a share is redeemed.

the coin's only exit: redeem() · src/StashVault.sol:428 · rescue() refuses the coin · :626–641

Not a launchpad vault.

A vault opens only for a coin that already pays its holders: its creator points the payouts at the vault and signs that transaction (source A), or a test account first receives at least twenty payouts (source B). Buybacks don't count.

The opening rules

opening rules · README.md:379–388 · createVault() is admin only · src/StashFactory.sol:72

No token and no presale.

A token trading under the name STASH is not issued by this project. What a vault gives you is its share, named s + the coin's ticker, and it is redeemable for that coin.

share symbol "s" + ticker · src/StashVault.sol:202 · no mint entrypoint · src/lib/ERC20.sol:6–9

No promised return.

Nothing makes a harvest happen or sets its size. If the coin stops paying, there is nothing to harvest, and the rate does not fall. The rate figures on this site are labelled test runs, not forecasts.

no vault function lowers the rate · test/unit/Invariants.t.sol:612

How it makes money

One fee, taken from each payout. Nothing else.

At each harvest, 10% of the payout goes to the treasury by default, before the rest is sold for more of your coin. It is the only fee in the contract. The admin can change it, but the code refuses anything above 30%, and it is never taken from your deposit.

Where one payout goes defaults · src/StashVault.sol:46–47

A payoutin the payout's token

  • 10% to the treasury, in the payout's token
  • 90% sold for more of your coin, then released over 6 h

Your depositthe coin you put in

0% taken, on the way in or out

the same split in a test run

Payout harvested
1 WETH
To the treasury (10%)
0.1 WETH
Sold in the pool
0.9 WETH
More of the coin, released over 6 h
2,474.511185 USDG

dry run on a local fork, nothing broadcast · anvil fork of Robinhood Chain, 22 Sep 2026 · test sizes, not a yield forecast

Where each cost goes

10% of each payout
To the treasury. The only fee in the contract: a default the admin can change, never above 30%.
The pool's swap fee
To the pool, not to STASH. Every swap pays it, and the price floor already counts it.
Gas
To the network. You pay it on your own deposit and redeem; the keeper pays it on harvests.

Never charged

  • Deposit feenone
  • Exit feenone
  • Fee on principalnone
  • Yearly feenone

feeBps is the only fee in the code · harvest() · src/StashVault.sol:451 · deposit() :366 and redeem() :402 take no fee

Who holds which key

Four roles. None of them can move your coin.

The factory refuses to create a vault unless admin, guardian, treasury and keeper are four different non-zero addresses. After that, the admin can reassign the guardian, treasury and keeper; only non-zero is checked.

Where each key reaches illustration

Every role stops at the contract. Only one line goes through to the coin: yours, in and out.

Who can do what
What each role can and cannot do in a vault
ActionAdminGuardianKeeperTreasuryYou
Nobody, not even the admin
Move your coin or your sharesrescue() refuses the coin, the payout token and the sharescannotcannotcannotcannotcannot
Lower the share rateno vault function doescannotcannotcannotcannotcannot
Change the coin, payout token, router or poolall fixed when the vault is createdcannotcannotcannotcannotcannot
Mint shares without a depositcannotcannotcannotcannotcannot
Settings, inside limits the code fixes
Set the feeup to 30% of each payout · 10% by defaultcancannotcannotcannotcannot
Set vesting10 minutes to 7 days · 6 hours by defaultcancannotcannotcannotcannot
Set the harvest pace60 seconds to 7 days, never longer than vesting · 2 minutes by defaultcancannotcannotcannotcannot
Set the price window and tolerance10 minutes to 2 hours · tolerance up to 10%cancannotcannotcannotcannot
Reassign guardian, treasury, keeperto any non-zero addresscancannotcannotcannotcannot
Send back other tokens sent by mistakenever the coin, the payout token or the sharescancannotcannotcannotcannot
Pauses
Pause deposits and harvestseither can lift it againcancancannotcannotcannot
Pause redemption72 hours at most, then not again for 72 hourscancannotcannotcannotcannot
Everyday
Harvestonce per interval, at the price floor or bettercannotcannotcancannotcannot
Receive the feein the payout's tokencannotcannotcannotcancannot
Deposit, redeem, transfer shareseach with a minimum you set · no blacklist, no transfer taxcannotcannotcannotcannotcan

The factory

Creates one vault per coin, admin only, then steps away. It holds no funds and cannot touch anything inside a vault. A retired vault keeps every right for its holders, redeem included.

Your way out

You redeem without the keeper, the guardian or the treasury. In the contract, only the admin's pause, 72 hours at most, can hold up a redemption.

Every function, limit and error: the Docs

Risk

What can go wrong.

In plain words, before you deposit. Deposit only what you can afford to lose.

  1. No external audit yet.

    The review so far is internal: two adversarial passes and a test suite (as of 23 Sep 2026: 318 offline tests in 16 suites plus 4 against live chain state, all green). Tests lower the odds of a bug; they do not rule one out.

    How it was reviewed

  2. The coin can fall to zero.

    The share rate counts coin, not dollars. It never falls, but the coin under it can lose all of its value, and your deposit with it.

  3. The coin's own rules reach into the vault.

    The vault holds what the coin's contract lets it hold. A coin that can freeze, seize or rebase balances can do that to the vault's balance too.

  4. Payouts are not promised.

    Nothing makes a harvest happen or sets its size. If the coin stops paying, or the keeper stops, nothing is harvested and the rate does not fall. Redeem keeps working without the keeper.

  5. The keeper picks the moment.

    It can sell a harvest at the edge of the price floor: by default about 1% plus the pool fee below the pool's 30-minute average price. The admin can widen that tolerance to 10% at most. It costs part of a harvest's gain, never principal.

  6. The admin has levers, with limits.

    The fee up to 30% of each payout, pausing deposits and harvests, pausing redemption for up to 72 hours. A careless admin can make a vault worse to hold; no admin function can take your coin.

How long redemption can be held up

Only the admin can pause redemption: for 72 hours at most, and then it cannot pause again for 72 hours. Lifting a pause early does not bring the next one closer. The guardian can never pause it, and the deposit and harvest pauses never stop a redemption.

longest case · MAX_REDEEM_PAUSE = 72 hours, REDEEM_PAUSE_COOLDOWN = 72 hours · src/StashVault.sol:61–62, :599–616

Launch

Where the launch stands.

Three steps, in this order. Each one says “not yet” until it happens, then links to its transaction or contract on the chain's explorer.

Read from config/addresses.json, the same file behind the header's status and the vault page. Nothing on this list is typed in by hand.

Where the hashes go: Proof

launch checklist · derived from config/addresses.json
  1. Factory deployed—Creates vaults, one per coin. Holds no funds and keeps no power over a vault once it exists.
  2. Vault #1 created—Only with four different non-zero role addresses and a coin with a swap pool. It gets a seed deposit before it opens, so the first real depositor is never the first depositor.
  3. Yield source signed—Source A: the coin's creator signs the transaction that points its payouts at the vault. Or source B: a test account first receives at least twenty payouts.

Rules you can read.

Each limit has a line number.

Reading config/addresses.json…