Streak Vault · section 06

Destination pools.

The Streak Vault is not live until a real vault address is pinned. When live, you may stake any ERC-20 on PulseChain (Ethereum and Base vaults use the same bytecode once pinned). Fees from a ramp go to that destination token’s pool — not a global split a fake token can siphon. Browser marks and confirmCycle never change payouts. This page is the published mechanic for how stablecoin fees are split. It is not a live APR. Nothing is minted.

Why fees follow the token you buy

The vault accepts any ERC-20. A global split across every staked token would let a worthless fake token siphon real ramp fees. Instead, each ramp’s fee is attributed to the destination token of that ramp. Only epoch-active stakers of that token earn it.

TokenEarnsWhy
Any ERC-20 you DCA intoThat ramp’s 1% feenotifyFee(destToken)
Fake token, no ramps$0Cannot siphon another pool

Isolated destination pools

Only epoch-active stake in that token’s pool counts. New or increased stake waits until the next weekly epoch. Browser streaks and self-attested habit cycles never change the split.

  1. Which pool. Incoming stablecoin (`notifyFee(destToken)`) plus any leftover `undistributedFees[destToken]` is the pot for that token only.
  2. Inside the pool. Your cut is your epoch-active raw balance of that token divided by that pool's totalActive.
notifyFee(destToken, amount)
  → pull stablecoins
  → if totalActive[destToken] == 0: hold in undistributedFees[destToken]
  → else: accRewardPerStake[destToken] += pot / totalActive[destToken]
share_user   = staked_user[destToken] / totalActive[destToken]
payout_user  = share_user × that pool’s pot   // claim(), never unstake()

Worked example

Epoch-active: 100 TOKEN-X. A $1,000 fee from ramps into TOKEN-X pays that pool only. If Alice holds 25 of the 100 active TOKEN-X, she claims $250 stablecoin. Her TOKEN-X stays in the vault. Stakers of TOKEN-Y earn none of that $1,000.

A global wad split across every token is not used. That design let a dust fake token take a share of every fee. Destination attribution closes that vector without an oracle. Pools are still not USD-fair versus each other — they are silos.

Where stake sits

Stake transfers the ERC-20 out of your wallet (MetaMask, Phantom, or a connected hardware wallet) into the Streak Vault contract. The vault holds the tokens; your wallet holds the keys. Tokens are not frozen inside the wallet — EOAs cannot lock ERC-20s. Unstake sends the same token amount back. No admin can seize the vault. Cold-storage tokens that never sign a stake transaction do not earn vault yield.

Claim is not unstake

Claim pays stablecoin fees only. Your staked tokens stay in the vault. Unstake withdraws principal for that token and pauses it until the next epoch. You never unstake to collect yield.

Staked tokens are transferred into the Streak Vault contract, not locked inside MetaMask or Phantom. Unstake sends that token back to your wallet and pauses that position until the next epoch. Claim never moves your staked ERC-20.

Single-sided, zero IL

Single-sided staking: deposit one ERC-20 at a time. You never pair it with a second asset or provide AMM liquidity. Native PLS must be wrapped to WPLS.

Zero impermanent loss: the Streak Vault is not a two-sided AMM pool. Unstake returns the same token amount you deposited. Yield is claimed separately in stablecoins. The token’s USD price can still move — that is market risk, not IL.

What this is not

  • Not emissions. Nothing is minted. Yield is ramp fee that already cleared.
  • Not live until a real vault address is pinned. Deposits and claims fail closed.
  • Not HABIT. HABIT is a later optional token. Vault yield stays stablecoin.
  • Not a named-firm bytecode certification. Hostile source review: HPX-VAULT-2026-08-21.