frozen mainnet · dedicated environment
Solana mainnet,
paused on a frame.
Reproduce the bug at the exact slot it happened. Stage a program upgrade against today's mainnet accounts. Decide a protocol change with evidence instead of a hunch.
Replay is your own Solana mainnet, frozen at any snapshot and yours alone — boot it, drive it slot by slot, splice transactions, patch accounts, deploy programs, and read every byte back over the full JSON-RPC, WebSocket, and Geyser your tools already speak. Nothing to rewrite.
replay-us-east
ActiveUS East · Pro · agave v4.0.1
Validator ready at slot 418,908,412
uptime 48m 16s
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
The hours you stop losing.
Three jobs that used to cost a day each and a fragile setup.
Replay collapses every one to the same loop: boot, drive, read. On a throwaway fork of real mainnet you can run ten times before lunch — no prod risk, no flaky local repro, no waiting on anyone.
Reproduce it on demand — not by luck.
The old way
Spin up a local validator, hand-craft the surrounding state, fail to reproduce, beg an operator for a database dump, give up.
With Replay
Boot the snapshot from before the incident, splice the offending transaction, watch the bank. The fork is throwaway — run the repro ten times until you see it.
Catch the regression before your users do.
The old way
Test against empty local-validator state, deploy, and meet the regression in production when a real account hits the path you never modeled.
With Replay
Deploy the candidate .so against today's actual accounts, run the workloads that break things, and catch the regression here — not in the post-mortem.
Make the call with proof behind it.
The old way
Argue from theory in a doc, or risk the parameter live on mainnet and hope the model held.
With Replay
Splice the proposed transactions, advance the chain, read the result. Compare three approaches before any of them touch production.
Pick any moment. Start from the real state.
One click on a slot, one click on Start. You are now Solana mainnet at that exact frame, with no other tenants.
Cached snapshots skip the network fetch, then still extract and index locally. Uncached ones fetch first. Pick the compatibility version. Pick a Geyser plugin (or none). The Replay environment that comes up is isolated to you, in the region you chose.
replay-us-eastActive
US East · Pro · agave v4.0.1
Boot
Pick a snapshot and start the local replay validator.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
Boot From Snapshot
Select a snapshot slot to boot the replay validator
- Cached
418,908,370
27s ago · 84.2 GB
- Cached
418,876,800
9m ago · 84.1 GB
- Cached
418,832,500
32m ago · 83.9 GB
- Stream
418,791,200
1h ago · 83.7 GB
- Stream
418,733,400
2h ago · 83.5 GB
Geyser plugin
Optional. Loads a Solana Geyser plugin alongside the validator for this boot. Pick a bundled preset, upload your own .so + config.json, or leave off for a vanilla validator.
vanilla validator, JSON-RPC + WebSocket only
bundled preset · gRPC endpoint after boot
your .so + config.json · endpoint shown after boot
Validator is currently running
Booting will stop the current validator and rebuild replay state from the selected snapshot.
Inspect every account at that exact slot.
USDC. Jupiter. Your wallet. The Raydium AMM that broke at 9pm. Open the address, see the bank's actual answer.
The sidebar is your production address book — quick-add chips for the programs you'll always need, paste-anywhere input for the ones you won't. The detail panel reads the bank: owner, balance, data size, rent epoch, raw bytes. Mutate lamports, owner, data, or executable in-place — every patch is labeled, and the moment one lands the environment flips to a labeled local fork. Re-boot to return to canonical mainnet.
replay-us-eastActive
US East · Pro · agave v4.0.1
Accounts
Inspect, mutate, and deploy programs to accounts on the local fork.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
Tokenkeg…623VQ5DA
ProgramTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Owner
BPFLoader2111111111111111111111111111111111
5,678,237,313 lamports
134,080 bytes
u64::MAX sentinel — never charged
Account Data
134,080 bytes
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 .ELF........ 00000010 03 00 f7 00 01 00 00 00 d8 f9 00 00 00 00 00 00 ............ 00000020 40 00 00 00 00 00 00 00 80 09 02 00 00 00 00 00 @........... 00000030 00 00 00 00 40 00 38 00 04 00 40 00 09 00 08 00 ....@.8...@.. 00000040 01 00 00 00 05 00 00 00 20 01 00 00 00 00 00 00 ............ 00000050 20 01 00 00 00 00 00 00 20 01 00 00 00 00 00 00 ............ 00000060 60 b9 01 00 00 00 00 00 60 b9 01 00 00 00 00 00 '.......'..... 00000070 00 10 00 00 00 00 00 00 01 00 00 00 06 00 00 00 ............
…133,568 more bytes (download for full data)
Actions
Mutations are applied directly to the local fork — they bypass normal Solana authority. Re-boot the snapshot to revert.
Splice your transactions into the canonical stream.
Append at block_end. Inject after a known signature. Replace the transaction at slot index 14.
Eight anchors. One queue. Run advance and canonical mainnet blocks stream in, with your transactions woven in at the slot you asked for. Replay walks forward block-by-block — canonical, then yours, then canonical again — exactly the order it applies them. Cancel any time and inspect what landed.
replay-us-eastActive
US East · Pro · agave v4.0.1
Advance
Replay mainnet blocks into the local validator, or send a custom transaction.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
Advance Validator
Move the replay validator forward, with optional custom splices.
Current Slot
418,908,412
Shred Version
50093
Target Slot
Inject operator-supplied VersionedTransactions into upstream blocks at chosen anchor points. Each splice targets a single slot in (current, target].
block_end
signed by WALLET · JUP6Lk…NyVTaV4
after_signature · 5fH8wK…XzQ7P
replace LP token amount · 3pNa6w…rTzYk
replace_index · ix #14
modified signer + amount · 8mRkLp…wQz3D
Every block. Every transaction. Including the one you added.
Walk the chain forward from your boot point. 1,446 txs in a block, your splice at index 10, the fee at 1,005,000 lamports.
Filter by signature or any pubkey in the tx — recipient, signer, program. The list reflects your replay chain, not upstream mainnet, so the tx you spliced in at slot 418,908,420 sits exactly where you put it. Click any row for the decoded instructions, log messages, and pre/post balances.
replay-us-eastActive
US East · Pro · agave v4.0.1
Blocks
Browse confirmed blocks and inspect transactions on the local validator.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
Slot
Find by transaction signature
Slot
418,908,420
Parent slot
418,908,419
Block height
397,000,050
Transactions
1,255 + 191 err / 1,446
Blockhash
# FykHTQkha8t7eHDAdLYxCKpEqPAwCuHr18wuek16GFX8 ⧉
block time: 5/17/2026, 6:14:02 PM
- 0PMXyVcmpdT34Z9YfbvTUJ5JW5YAKvyCGNNjqZrDEnTKUF6DR4vxefWDQzLVdAJBHNW2VS4v1bEzMX4ftDDxzYYgLfee 5,000 λ
- 15cBbxrnkszXXoZy8pvCkmxhNHJ9CzJuYzibJLQcscFwn6r2aCUQ7ztnoZHTNhiiu72EZ4dqso4koa6CioT2JbHnSfee 5,000 λ
- 2RGTr4gD1dPRX2MzRZMTytFZuy8XVXm8Gcc4DgdpLWe9rwAV9D6kdksbKzUv38gsad9rvP7c1KVXimGMeHXRpE5yfee 5,000 λ
- 34Lc5tED7tKtn7wkqPRP4i4RaG9ArzRCafq1skc2r96GC42ZEpRajqmM3HUbD5R5K5rgazLMBqUAiUZc4MZSqxds8Sfee 5,000 λ
- 45TceA34JWotUCEeSAx9ewELmo5pAqTinCWwCjLAqYNR9s4YpKwdGHQ2DWTNTV3fzXBmfnz1gAdD347fui6JRFf3gfee 5,000 λ
- 53XapaApeV8qTa1CYVfKj6DMseGXubjnPm4AzUwY17XYxSWdYjVxd57Tmuj6EK3UH9ShNngiaWeGv36VLjwc2g5Dufee 15,000 λ
- 62HWPNAH1ijDweyB8aNs1LEwdqA2QqGoFbWMW3ZhxsFdQ6lZfL4a1xE7uLzHQYgLWSUM6xBhRuxSExbPCuMmp61aFWfee 15,000 λ
- 77PYeKVVBBTvWyWEsHLi1hBe9wNRm85Z91dKkYZaPsQamTad1f1At3FzGLgA9A9mkGgT2zXNKZ145HiAmerxUvYCfee 5,000 λ
- 82Yqf3xZBbCgX9p4z5UNyMR1vGQK2tPwL8aH7eXjK3mNzBdT6cRY1uV4sP9tQrLnA8mEhKjF2WxBpDcZ4NHsTqVRyfee 5,000 λ
- 96KqRpA8WHbMyL2zXg3vN1eFt5cBdQ7uPrJ9oS4iH8eWxKj2nM3sV1aB7tY5cZqL4wRhUfPxN6yE9oDmCb3JsKtVefee 5,000 λ
- 104ApAhJaV1AiHziFgPHXxgzN7AP8omaWBFfL9E6hUPz8h2im6Wz1MFpzrvJAT9SUzkaMyscS1N5EcJmq75UboiDDXoursfee 1,005,000 λ
Down to the byte. Every account it touched.
Click any committed tx and the State diff tab shows the exact pre/post account state the validator wrote — lamports, owner, data — with a hex view that highlights the bytes that changed.
Every non-vote transaction your replay session executes is captured as a state-diff fixture: writable rows side-by-side with role-only rows, lamport movements stacked, owner changes inline, and a hex diff for any account whose data moved. Identical wire shape on the API (GET /fixtures/tx/:sig), the MCP tool (replay_fixture_get), and the k256-replay CLI (k256-replay diff <sig>) — drop the same signature into any one and you'll see the same diff. Iterate fearlessly: clear the cache, advance again, diff again. A 5 GiB FIFO bound and a process-lifetime evicted/oversized/cleared counter keep you honest about what's still in the session.
replay-us-eastActive
US East · Pro · agave v4.0.1
Blocks
Browse confirmed blocks and inspect transactions on the local validator.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
- 104ApAhJaV1AiHziFgPHXxgzN7AP8omaWBFfL9E6hUPz8h2im6Wz1MFpzrvJAT9SUzkaMyscS1N5EcJmq75UboiDDXoursfee 1,005,000 λ
row 0
5Zzguz…McqkJx- Lamports
- 311,943,205→ 306,943,205
- Owner
- 1111…1111
- Data
- same
row 1
9nVVwy…XrSc1V- Lamports
- 9,243,352,240→ 9,248,102,240
- Owner
- 9B6F…2ft9
- Data
- len 165
row 2
5oKEXg…YV7PDb- Lamports
- 324,637,281→ 324,887,281
- Owner
- Toke…Q5DA
- Data
- len 165
row 3
Tokenk…3VQ5DA- Lamports
- —
- Owner
- —
- Data
- not captured
row 4
JUP6Lk…yVTaV4- Lamports
- —
- Owner
- —
- Data
- not captured
row 5
Hp53XE…RNXQKp- Lamports
- 5,436,955→ 5,436,955
- Owner
- whir…tyCc
- Data
- len 653
| # | Account | Change | Lamports | Owner | Data |
|---|---|---|---|---|---|
| 0 | 5Zzg…qkJxfee payersignerwritableinstruction | changed | 311,943,205→ 306,943,205 | 1111…1111 | same |
| 1 | 9nVV…Sc1Vwritableinstruction | changed | 9,243,352,240→ 9,248,102,240 | 9B6F…2ft9 | len 165 |
| 2 | 5oKE…7PDbwritableinstruction | changed | 324,637,281→ 324,887,281 | Toke…Q5DA | len 165 |
| 3 | Toke…Q5DAreadonlyinvokedinstruction | role only | — | — | not captured |
| 4 | JUP6…TaV4readonlyinvokedinstruction | role only | — | — | not captured |
| 5 | Hp53…XQKpwritableinstruction | changed | 5,436,955→ 5,436,955 | whir…tyCc | len 653 |
Hp53…XQKp· 14 bytes differ· owner whir…tyCchexasciiwhirlpools_config
pubkey
- Pre
- 2Lec…P2NQ
- Post
- 2Lec…P2NQ
whirlpool_bump
[u8;1]
- Pre
- [fe]
- Post
- [fe]
tick_spacing
u16
- Pre
- 128
- Post
- 128
fee_tier_index_seed
[u8;2]
- Pre
- [80 00]
- Post
- [80 00]
fee_rate
u16
- Pre
- 10,000
- Post
- 10,000
protocol_fee_rate
u16
- Pre
- 1,300
- Post
- 1,300
liquidity
u128
- Pre
- 271,030,330,806
- Post
- 271,030,330,806
sqrt_price
u128
- Pre
- 8,949,020,920,635,578,298
- Post
- 8,949,106,042,015,710,954
tick_current_index
i32
- Pre
- -14,468
- Post
- -14,468
protocol_fee_owed_a
u64
- Pre
- 236,334,893
- Post
- 236,334,893
protocol_fee_owed_b
u64
- Pre
- 53,452,578
- Post
- 53,454,220
| field | type | pre | post |
|---|---|---|---|
| whirlpools_config | pubkey | 2Lec…P2NQ | 2Lec…P2NQ |
| whirlpool_bump | [u8;1] | [fe] | [fe] |
| tick_spacing | u16 | 128 | 128 |
| fee_tier_index_seed | [u8;2] | [80 00] | [80 00] |
| fee_rate | u16 | 10,000 | 10,000 |
| protocol_fee_rate | u16 | 1,300 | 1,300 |
| liquidity | u128 | 271,030,330,806 | 271,030,330,806 |
| sqrt_price | u128 | 8,949,020,920,635,578,298 | 8,949,106,042,015,710,954 |
| tick_current_index | i32 | -14,468 | -14,468 |
| protocol_fee_owed_a | u64 | 236,334,893 | 236,334,893 |
| protocol_fee_owed_b | u64 | 53,452,578 | 53,454,220 |
Save any moment. Snap back to it in an instant.
Checkpoint before a risky splice. Try three approaches. Return to the exact state you started from — as many times as you want.
Every checkpoint is a complete, independent save of your environment at that slot. Restoring is instant. Keep as many as you need — name them, restore any one, delete the ones you're done with. Experiment without fear: there's always a way back to a known-good state.
replay-us-eastActive
US East · Pro · agave v4.0.1
Checkpoints
Save the fork at a point in time, then restore (replay) it instantly — over and over.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
Save a checkpoint
Save the exact state of your environment at this moment. Restore it later — instantly, as many times as you like.
Restore slot: 418,908,412. The slot is saved as checkpoint metadata, separate from your label.
Saving briefly pauses the node while the checkpoint is captured; the moment it's ready you can restore (instant) or save again.
Saved checkpoints
Refreshbefore-experiment
Restore slot
418,908,412
Saved
2m ago
Checkpoint id
before_experiment
Restorepost-splice
Restore slot
418,908,420
Saved
just now
Checkpoint id
post_splice
Restoreclean-boot
Restore slot
418,908,370
Saved
14m ago
Checkpoint id
clean_boot
Restore
Full JSON-RPC, WebSocket, and Geyser.
Every read endpoint your existing tools already speak — hidden until you reveal and copy it.
@solana/web3.js, anchor, solana-cli, your indexer, your bots, your dashboards. Reveal the direct endpoint when you need it, copy the curl, and treat that URL like an operational secret. Subscribe to slotSubscribe, then advance the fork to produce the next local slot. Yellowstone gRPC is one switch away on boot. Nothing to rewrite.
replay-us-eastActive
US East · Pro · agave v4.0.1
RPC
Copy endpoint snippets and run common validator RPC checks.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
Validator endpoints
Show endpointsYellowstone does not expose gRPC reflection on this endpoint. Use a Yellowstone client/protobuf example instead of grpcurl list. Streams are quiet while the fork is idle; run an advance to produce slot, transaction, block, or account updates.
Standard Solana JSON-RPC. Point any client (web3.js, Anchor, solana-cli) at this URL — read methods return state from the local replay fork (snapshot + your /advances + patches + materializations).
Direct endpoint URLs stay hidden by default for screenshots and are outside the workspace bearer once copied.
Six things to know before pointing a client at these endpoints
Account
shared across the account-bearing calls
getSlot
Return the validator's current slot.
curl -s "$REPLAY_RPC_ENDPOINT" \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"processed"}]}' | jqgetAccountInfo
Look up the account above at the replay slot. Returns null if it doesn't exist.
curl -s "$REPLAY_RPC_ENDPOINT" \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getAccountInfo","params":["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",{"encoding":"jsonParsed"}]}' | jqgetBalance
Return the lamport balance of the account above.
curl -s "$REPLAY_RPC_ENDPOINT" \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",{"commitment":"processed"}]}' | jqEvery advance, recorded.
Start slot, target slot, duration, status. Twenty most recent jobs, in memory.
Skim what ran, expand a row for the exit code, the finality choice, and the full job ID. The signal you want when you're iterating on a splice plan and need to know which run produced which state.
replay-us-eastActive
US East · Pro · agave v4.0.1
History
Advance jobs, local mutations, and durable audit rows for this environment.
Validator ready at slot 418,908,412
uptime 48m 16s
- Download
- Boot
- Extract
- Index
- Ready
advanced 2 slots since boot
boot point of the local fork
RPC accepting queries
JSON-RPC accepting queries
History
Advance jobs, local mutations, and durable audit rows for this environment
8 loaded
slot jobs
patches + splices
durable environment rows
Search loaded history
Event type
Filters apply to the rows already loaded by the console. Use Copy JSON for the exact route payload behind an event.
Advance jobs2 / 2
Recent slot advances for this runtime session.
Slots
418,908,412 → 418,908,500
Duration
4.1s
Status
Done
req a34f9cSlots
418,908,370 → 418,908,412
Duration
1.9s
Status
Done
req 7b10e2
Local mutations3 / 3
Account patches, transaction splices, and program deploys recorded by the fork.
Transaction splice
slot 418,908,4202w38yYfzXVLduAqEFLJBQPtKS2joCJykC9XrbGyU...
Time
just now
Duration
182ms
Request ID
req c8e441
Account patch
slot 418,908,4125Zzguz4NsSRFxGkHfM4FmsFpGZiCDtY72zH2jzMcqkJx
Time
2m ago
Duration
41ms
Request ID
req 0fd2b7
Durable audit trail3 / 3
Gateway audit rows scoped to this environment. Restore rewinds fork state; these rows remain.
Checkpoint saved
acceptedbefore-experiment
Actor
workspace
Time
2m ago
Request ID
req 4f2db1
Checkpoint restored
acceptedclean-boot
Actor
workspace
Time
14m ago
Request ID
req a90df8
Drive Replay from your agent. Or curl.
One API host. api.k256.xyz. Org key in, pick your environment by id — over HTTP for scripts, or Model Context Protocol for AI agents. Same token, same contract, every verb.
Cursor, Claude (Code & Desktop), Codex CLI, VS Code — paste one snippet and your agent can boot, advance, splice, patch, and inspect on its own.
Cursor
~/.cursor/mcp.jsonClaude
claude mcp add ...Codex CLI
codex mcp add ...VS Code
.vscode/mcp.json- Is this really mainnet, or a simulation?
- Real. It is a managed Replay environment restored from an actual mainnet snapshot you pick — at the protocol layer it is mainnet, frozen at that slot. getAccountInfo on any address returns exactly what the chain held at that moment, down to the bytes.
- Is my work isolated — and can I throw it away?
- Every environment is isolated to your workspace in the region you choose, with no other tenants and no public consensus to keep up with. Splice, patch, and deploy freely; a reboot drops every mutation and returns you to canonical mainnet. Nobody else sees your fork.
- Will my existing tools and CI work unchanged?
- Yes. It exposes Solana JSON-RPC, WebSocket PubSub, and Geyser endpoints in the same wire formats your stack already targets. The one thing to know: the chain only moves forward when you advance it, so anything that polls for new slots waits until you say go.
- What's the boundary between mainnet and my fork?
- Reads before any mutation match mainnet at the snapshot slot. The moment you patch an account, deploy a program, or splice a transaction, the UI flips a label and you're on a clearly-marked local fork — so you always know which state you're reading.
private access · invite only
Stop rebuilding mainnet by hand.
Teams who debug production Solana, ship program upgrades, or do protocol work already lose hours to ad-hoc fork setups. Replay collapses that to one click and one URL.
pricing
Dedicated environment. One region. One operator.
- Validator version of your choice
- Snapshots cached
- Full RPC + WS + Geyser
- Public IP, your DNS
- Unlimited splices and patches
before checkout
- Billing
- $1,599/month per dedicated environment. Checkout shows the selected units before payment; the in-app cancel flow shows refund impact before confirmation.
- Endpoint boundary
- Workspace API keys protect the managed HTTP and MCP surfaces. Direct RPC, WebSocket, and Geyser URLs stay hidden by default and become operational secrets once revealed or copied.
- Lifecycle
- Reboot returns a mutated fork to canonical mainnet at the boot point. Checkpoints are saved inside the environment until you delete or restore them.
- Support
- Invite-only access. If you need fixed retention, procurement terms, or an SLA, talk to us before checkout.