Overview
Ephemeral SPL Tokens let you hold and move SPL tokens inside a MagicBlock Ephemeral Rollup (ER) with the same low latency as any other delegated state, then settle back to Solana’s base layer. They are the token primitive behind MagicBlock’s private payments — but the primitive itself is general: a transfer can be public or private. Everything is powered by the on-chain Ephemeral SPL Token program (SPLxh1LVZzEkX99H6rqYizhytLWPZVV296zyYDPagv2), which implements
MIMD 0013.
Ephemeral SPL Token program
On-chain program + hosted API.
SPLxh1LV…Quickstart
Delegate a token account, transfer on the ER, withdraw — end to end.
Building a prediction market or trading protocol?
See how token custody fits with session keys, price oracles, cranks, and settlement.
The model
A normal SPL token account lives on Solana’s base layer. To move tokens at ER speed, the Ephemeral SPL Token program introduces two account types.Ephemeral ATA (eATA)
An ephemeral ATA is a program-owned PDA derived from[owner, mint] that holds a single u64
balance. It is not a real SPL token account — it is a lightweight balance record that can be
delegated to the ER and mutated there at high speed.
Global Vault
The real tokens are custodied in a per-mint Global Vault — a PDA derived from[mint] that owns
the SPL token account backing every eATA of that mint. Depositing moves real tokens into the vault
and credits your eATA’s u64; withdrawing does the reverse.
An eATA tracks a balance; the Global Vault holds the actual tokens. One vault backs all eATAs for a
given mint.
Delegation lifecycle
eATAs follow the standard Ephemeral Rollup lifecycle:1
Deposit & delegate
Real tokens move into the mint’s Global Vault, your eATA is credited, and the eATA is delegated to
a MagicBlock validator so it can be mutated inside the ER.
2
Transact on the ER
Transfer between eATAs inside the rollup at low latency. Transfers can be public or
private (
visibility).3
Undelegate & commit
The eATA is committed and undelegated back to the base layer.
4
Withdraw
Tokens move out of the Global Vault back to a standard base-layer SPL token account.
Public vs. private
The primitive supports both:- Public — a normal fast transfer between eATAs on the ER.
- Private (Private Payments) — the destination and settlement are shielded: private
visibility, encrypted/queued settlement, and stealth handles (a human-readable name such asalice@magicblock.idthat resolves to one or more destination keys). This is the use case behind the Private Payments guide.
Two ways to integrate
On-chain / SDK
Integrate directly in your own Anchor program and client with
@magicblock-labs/ephemeral-rollups-sdk — delegate a token account, transfer on the ER, withdraw.Hosted REST / MCP API
Let the hosted API build unsigned transactions for deposit, transfer, withdraw, balances, swap, and
private payments.

