Solana's account model and SPL token standard make on-chain vesting feel different from the EVM equivalent – and that difference shows up clearly in Streamflow, the most-used vesting protocol on Solana. If you are coming from Sablier or Hedgey, the mental model needs a small adjustment.
This article walks through what Streamflow is, why it works the way it does, and how Vestream surfaces Streamflow positions next to your EVM streams in a single dashboard.
What Streamflow Does
Streamflow provides token streaming and vesting for SPL tokens on Solana. It supports the same broad family of patterns familiar from EVM protocols: cliff + linear release, tranche-based release, payroll-style continuous streams, and revocable team grants. What is different is the underlying account architecture.
On Solana, every stream is its own program-derived account holding state. There is no shared mapping of 'all streams' inside one contract – each stream is its own data account.
How SPL Token Mechanics Differ from ERC-20
If you are EVM-native, the most surprising parts of SPL token vesting are:
- Associated Token Accounts (ATAs): a wallet does not directly hold SPL tokens. It holds a token account per mint. Streamflow's escrow is a token account owned by a program-derived address (PDA).
- Rent-exempt accounts: creating a stream requires depositing a small SOL amount as rent for the new accounts. This is recoverable when the stream closes.
- Discriminators: Solana programs identify account types via an 8-byte discriminator at the start of the account data. To enumerate all Streamflow streams, you query getProgramAccounts with the right discriminator filter.
- No 'msg.sender' notion of revocation: Solana relies on signers being passed explicitly. Revocation is implemented as a separate instruction signed by the original sender.
These differences are infrastructural, not philosophical. The end result for a recipient is identical: tokens that unlock over time, with a claimable balance you can withdraw to your wallet.
Streamflow Stream Variants
Streamflow exposes a few stream archetypes through its program. The main ones relevant to vesting:
- Vesting Contract: the canonical schedule with start, end, optional cliff, and unlock granularity.
- Token Vesting (multi-recipient): bulk-create grants for a list of contributors in a single transaction.
- Payment streams: open-ended streams used for payroll and grants programs.
- AlignedContract: a specialised variant Vestream's adapter currently skips in favour of the standard vesting contract surface.
Reading a Streamflow Stream
The fields you'll see on a Streamflow stream map cleanly to the cross-protocol vocabulary covered in How to Read a Vesting Schedule:
| Streamflow field | Maps to | Meaning |
|---|---|---|
| start | startTime | When the stream began accruing |
| end | endTime | When the final SPL token unlocks |
| cliff | cliffTime | Timestamp before which zero is claimable |
| depositedAmount | totalAmount | Total SPL tokens placed into the stream |
| withdrawnAmount | withdrawnAmount | Tokens already pulled by the recipient |
| recipient | recipient | The wallet entitled to claim |
| mint | tokenAddress | SPL token mint address (base58) |
Streamflow uses base58 addresses (e.g. So11111111111111111111111111111111111111112 for wrapped SOL), unlike EVM's 0x-prefixed hex. Vestream handles the address-format normalisation for you, but it's worth knowing if you're reading on-chain data directly.
Why Solana for Vesting at All?
- Cost: creating a stream on Solana costs a fraction of what mainnet Ethereum charges. For projects vesting to hundreds of contributors, the savings are significant.
- Speed: Solana's sub-second finality makes the per-block accrual feel genuinely real-time.
- Ecosystem fit: any project whose token is an SPL token is going to vest there natively rather than bridging.
- SDK quality: the @streamflow/stream JS SDK is well-maintained and integrates cleanly with Solana wallet adapters.
Streamflow runs both vesting and payments products. When evaluating Streamflow's vesting-specific TVL, always isolate the vesting category – combined headline numbers can include open payment streams that are not strictly vesting.
How Vestream Indexes Streamflow
Vestream's Streamflow adapter uses the official @streamflow/stream SDK against an Alchemy Solana RPC endpoint. For every wallet you track, the adapter calls Streamflow's per-recipient query and normalises every returned stream into the same VestingStream shape used for EVM protocols. This is what lets you view a Solana SPL vest and an Ethereum Sablier stream in the same dashboard view.
The Solana ecosystem in Vestream is feature-flagged – for environments without Solana RPC configured, the adapter is a no-op. Production users on Vestream get Streamflow coverage by default.
Add any Solana wallet (base58 address) to <a href="/login">Vestream</a> and every Streamflow vesting stream it holds will appear next to your EVM positions, with claimable balance updated in real time.
FAQ
Frequently Asked Questions
Does Streamflow support cliff schedules?
Yes – every Streamflow vesting contract accepts a cliff parameter. It behaves the same as EVM cliffs: zero claimable until the cliff timestamp, then the cliff portion unlocks in one go.
Can a Streamflow stream be cancelled?
Yes, if the stream was configured as cancelable at creation. The sender can call cancel and reclaim unvested tokens. Many vesting deployments deliberately set cancelable to false.
What's the difference between Streamflow's vesting and payments products?
Vesting is finite, with a defined total amount and end date. Payments streams are open-ended, designed for payroll-style ongoing flows. Vestream surfaces the vesting category.
Why isn't Streamflow on EVM?
Streamflow is a Solana-native protocol that takes advantage of Solana's account model and low fees. The EVM equivalent for similar UX is Sablier or Superfluid.