CryptoAPIsOffline: nothing is sent

Test against synthetic fixtures and seeded mock scenarios

Load labelled synthetic fixtures into any tool, or run a scenario where a seeded random source injects timeouts, internal errors, rate limits, range caps and reorgs while your retry policy plays out on a virtual clock.

Fixtures are synthetic and the mock runs only in this page. There is no public endpoint, no webhook, and nothing here is a real balance or block.

cryptoapis.fixtures v1.0.0 (2026-10-30). Success, RPC error, revert, transport error, rate limit, truncated, reorg, batch and snapshot cases for the EVM JSON-RPC profile. Synthetic, self-authored. Not collected from any network.

FixtureCategoryLayer (explorer verdict)
syntheticsnapshot
Successresult: Result: hex (3.5 bytes if DATA)
syntheticsnapshot
Successresult: Result: hex (0.5 bytes if DATA)
syntheticsnapshot
Snapshotresult: Result: hex (9 bytes if DATA)

The request says "latest" but this is a frozen synthetic response. 0x3635c9adc5dea00000 = 1,000,000,000,000,000,000,000 wei (beyond 2^53, kept exact). It is never a current balance.

Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBalance",
  "params": [
    "0x1111111111111111111111111111111111111111",
    "latest"
  ]
}
Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x3635c9adc5dea00000"
}

Use it in: response explorer · snapshot viewer

syntheticsnapshot
Successresult: Result: hex (32 bytes if DATA)
syntheticsnapshot
Revertrpc-error: Execution reverted (3)
syntheticsnapshot
Revertrpc-error: Execution reverted (3)
syntheticsnapshot
RPC errorrpc-error: Method not found (-32601)
syntheticsnapshot
RPC errorrpc-error: Invalid params (-32602)
syntheticsnapshot
Rate limittransport: Limit exceeded (-32005)
syntheticsnapshot
Transporttransport
syntheticsnapshot
Partial dataincomplete
syntheticsnapshot
Snapshotresult: Result: object (14 fields)
syntheticsnapshot
Snapshotresult: Result: array of 3
syntheticsnapshot
Snapshotresult: Result: object (17 fields)
syntheticsnapshot
Snapshotresult: Result: object (19 fields)
syntheticsnapshot
Successresult: Result: null
syntheticsnapshot
Reorg / contextresult: Result: object (17 fields)
syntheticsnapshot
Reorg / contextresult: Result: object (17 fields)
syntheticsnapshot
Batchresult: Result: hex (4.5 bytes if DATA)

Deterministic by construction

The runner uses a seeded generator and a virtual clock, so the same scenario and seed always produce the same transcript. A SHA-256 digest of the transcript is shown; share the scenario JSON and anyone gets the same digest.

Retries that respect method semantics

Read methods are retried with exponential backoff and optional seeded jitter, honouring Retry-After on simulated 429s. Stateful methods like eth_newFilter and eth_getFilterChanges are never blindly retried, and the transcript says why.

Fixture coverage

  • Success results, null results and a fixture named "latest balance" that stays labelled as a snapshot.
  • Reverts with Error(string) and Panic, method-not-found and invalid-params errors.
  • HTTP 429 with Retry-After, a 502 HTML body and a truncated JSON body.
  • A reorg pair (same height, different hash) and two providers at different heights.
  • A reordered batch with a missing reply, a duplicate id and an unexpected id.

Questions

Can my backend call this mock?

No. It runs inside this browser tab only. To test a backend, export the fixtures or transcript and load them into your own test harness.

Are the fixture addresses real?

No. They use repeated-digit patterns like 0x1111… and invented hashes. Every fixture carries a synthetic label.

What does the seed change?

Which attempts fail, jitter amounts and synthetic values. The scenario structure stays the same.