BlockQuant — neural data matrix · lossless Base L2 microstructure data pipeline
BlockQuant · Data Pipeline Service

Lossless Base tick data & sandboxed backtesting, settled in USDC over x402.

BlockQuant operates a decoupled, read-only observer on the Uniswap V3 WETH/USDC 0.05% pool on Base Mainnet. We sell what is genuinely hard to source: lossless, string-cast Uniswap V3 tick data with un-truncated sqrtPriceX96 string validation and EIP-55 normalized logs, plus on-demand pessimistic multi-collision backtesting compute. Every endpoint speaks native x402 stablecoin negotiation, so an autonomous agent can discover the price, settle USDC on Base, and pull data in a single machine-to-machine handshake — no API keys, no accounts, no truncation.

$5.00 · full-day archive $1.00 · tick-range query $25.00 · backtest matrix Base Mainnet · chain 8453 Settlement · USDC via x402

Institutional Brief

The Data-Pipeline-Service Safety Profile

A reference for allocators and quant desks evaluating BlockQuant as a data and backtest-compute counterparty.

Data inception — 14 May 2026

Complete, lossless tick-level archives are compiled live from 14 May 2026 onward — the day our Base Mainnet pipeline was commissioned. No data exists before this boundary: any archive download, range query, or backtest requesting a date earlier than 2026-05-14 will fail.

1 · Decoupled, observational by design

Our pipeline is a read-only observer. It never participates in the trading loop, never places capital, and can be killed at any moment with zero impact on data integrity. It captures every meaningful tick on the WETH/USDC 0.05% pool and writes one immutable file per UTC day. Liveness guaranteed — a heartbeat row is written at least every 10 seconds even in dead-zone markets, so there are no silent gaps.

2 · The Pessimistic Multi-Collision Rule

Our backtester refuses to flatter itself. When a single price window touches both the take-profit and the stop-loss, the intrabar path is unknowable from one bar — so the engine always books the loss. This is the academically defensible default (it is what production-grade engines like Backtrader and vectorbt use under pessimistic flags) and it structurally eliminates the look-ahead bias that inflates naïve backtests.

Same-bar resolution — SL wins
Bar outcomeResolution
Take-profit touched onlyClose at TP (+gain)
Stop-loss touched onlyClose at SL (−loss)
Both touched in one windowSL wins — the loss is booked
Neither touchedPosition carries to next bar

Combined with pessimistic intrabar fills (a buy layer only fills when low ≤ L_k ≤ open), this means a reported edge has already survived the harshest reasonable accounting.

3 · Parametric Matrix Computation

The $25 backtest tier is not a single run — it is a native matrix engine that expands your strategy across every combination of parameters in one sandboxed job and ranks the survivors. Four engine properties make the numbers it returns defensible:

Engine propertyWhat it guarantees
Multi-dimensional nested sweeps Profit targets × stop losses × bid-layer counts are expanded into the full Cartesian grid and evaluated cell-by-cell — one job covers the entire parameter surface.
Pessimistic settlement invariant Intraday same-bar TP/SL collisions default to the absolute loss (see §2), structurally eliminating intrabar look-ahead bias in every cell.
Lossless slippage modeling Fills are priced against true, string-cast liquidity density — the un-truncated sqrtPriceX96 — never a rounded float proxy.
Pandas / Excel-ready reports Results return as a flat, typed JSON leaderboard that drops straight into pd.json_normalize() or a spreadsheet — no parsing glue.

Because every cell runs the identical pessimistic accounting, the leaderboard ranks only edges that have already survived the harshest reasonable execution assumptions. The builder below assembles a valid request payload against the live blockquant.backtest_matrix.v2 schema — adjust a control and watch the JSON regenerate in real time.

Backtest Config Generator

matrix · 1 cells / 1000 cap
0.30%
0.50%
5
{ }

Use add to stack a slider value into a sweep dimension — the live cell count is the product of all three arrays, capped at 1000 by the engine. POST the payload to /api/v1/matrix/backtest with your X-Payment proof; see The Agent Manifest for the full settlement flow.

4 · Lossless integrity — strings, not floats

Uniswap V3 stores √price as a uint160 (sqrtPriceX96), routinely ~25 digits — far beyond the 2⁵³ integer ceiling of a 64-bit float. Spreadsheet exporters silently corrupt it to 3.76e24. We never do. The value is captured as a string at the source and carried un-truncated through every boundary, so you can reconstruct price algebraically to full precision. Block references are EIP-55 normalized for unambiguous, checksum-safe logs.

5 · ?format=human — clean base-10 arrays for Excel & Pandas

Bots want the lossless integer; humans want a number they can chart. Append ?format=human to the tick-stream endpoint and we compute the clean base-10 price (USDC per ETH) on the fly from the canonical sqrtPriceX96price = (sqrtPriceX96 / 2⁹⁶)² × 10¹² — and return a flat JSON array that drops straight into a spreadsheet or a DataFrame:

format=raw (for agents)format=human (for desks)
"sqrtPriceX96":"3553933747709496972272671" "usdcPricePerEth": 2012.14598959

pd.json_normalize(resp.json()["rows"]) yields a tidy, typed frame — no string-to-float coercion, no scientific-notation surprises, ready for resampling and indicator work.

6 · Pricing

ProductWhat you getPrice
Pay-Per-Day ArchiveA complete, zipped calendar day of raw ticks$5.00
Pay-Per-Tick Range QueryA targeted historical block range, raw or human$1.00
Sandboxed Backtest MatrixA full parametric sweep on our engine, your parameters$25.00

All prices settle in USDC on Base Mainnet via the x402 protocol. See The Agent Manifest for machine-readable schemas and payment flow.

Machine-Readable API · Base Mainnet (8453)

Three endpoints. Native x402. No keys.

Every billable route answers an unauthenticated request with HTTP 402 Payment Required and a machine-readable challenge (price, USDC asset, network, pay-to). Settle the stablecoin transfer on Base, then replay the request with the proof in the X-Payment header.

Coverage boundary

Archives are compiled live from 2026-05-14 onward. Any date before this inception boundary returns HTTP 404 (code: NOT_FOUND on archive/stream; empty-catalog 404 on backtests). Inspect the live window anytime via GET /api/v1/catalog.

x402 negotiation — how an autonomous agent pays
  1. Request the resource with no payment → server returns 402 + an accepts[] array (scheme exact, network base, asset USDC, maxAmountRequired, payTo).
  2. Settle the USDC transfer on Base Mainnet to payTo for the quoted amount.
  3. Replay the identical request carrying the settlement proof / on-chain stablecoin hash in the X-Payment header → server verifies via the facilitator and streams the resource.
GET/api/v1/data/archive/:date$5.00

Buy a complete, zipped calendar day of raw ticks. :date is a closed UTC day, YYYY-MM-DD.

Response schema (402 challenge)
// HTTP/1.1 402 Payment Required
{
  "x402Version": 1,
  "accepts": [{
    "scheme": "exact",
    "network": "base",
    "asset": "USDC",
    "maxAmountRequired": "5000000",   // 5.00 USDC, 6 decimals
    "payTo": "0x<blockquant-cdp-wallet>",
    "resource": "https://blockquant.tech/api/v1/data/archive/2026-05-30"
  }]
}
cURL — handle the 402, then pull the archive
# 1) probe → receive the payment challenge
curl -i https://blockquant.tech/api/v1/data/archive/2026-05-30

# 2) settle USDC on Base, then replay with the on-chain proof
curl https://blockquant.tech/api/v1/data/archive/2026-05-30 \
  -H "X-Payment: 0x<settlement-tx-hash | x402-payload>" \
  -o base_price_ticks_2026-05-30.csv.zip
GET/api/v1/data/stream$1.00

Targeted historical block-range query. format=raw returns the un-truncated sqrtPriceX96 string for bots; format=human returns clean base-10 USDC/ETH for desks.

Query parameters
{
  "date":      "YYYY-MM-DD",   // required, closed UTC day
  "format":    "raw | human",  // default raw
  "limit":     500,            // last N matching rows (max 5000)
  "fromBlock": 46654900        // optional: rows with blockNumber >= fromBlock
}
Response row (format=human)
{ "timestamp":"2026-05-30T00:00:01.818Z", "blockNumber":46654927,
  "tick":-200251, "usdcPricePerEth":2012.14598959 }
cURL
curl "https://blockquant.tech/api/v1/data/stream?date=2026-05-30&format=human&limit=500&fromBlock=46654900" \
  -H "X-Payment: 0x<settlement-tx-hash>"
POST/api/v1/matrix/backtest$25.00

Run a full parametric sweep on our engine with your own parameters and built-in indicators (rsi, bbands, macd). Executed inside a network-isolated OS sandbox; uses the pessimistic multi-collision rule.

Request body
{
  "dates": ["2026-05-29", "2026-05-30"],
  "config": {
    "candleMinutes": 5,
    "matrix": {
      "profitTargets":  [0.001, 0.002],
      "stopLosses":     [0.003, 0.005],
      "bidLayerCounts": [1, 5]
    },
    "indicators": [{ "name":"rsi", "params":{ "period":14 } }],
    "rankBy": "netPnLPct"
  }
}
cURL
curl -X POST https://blockquant.tech/api/v1/matrix/backtest \
  -H "Content-Type: application/json" \
  -H "X-Payment: 0x<settlement-tx-hash>" \
  -d '{"dates":["2026-05-29","2026-05-30"],"config":{"candleMinutes":5,"matrix":{"profitTargets":[0.001,0.002],"stopLosses":[0.003,0.005],"bidLayerCounts":[1,5]},"indicators":[{"name":"rsi","params":{"period":14}}],"rankBy":"netPnLPct"}}'
Returns
{ "status":"success", "schema":"blockquant.backtest_matrix.v2",
  "matrixSize":8, "winner":{ "params":{…}, "metrics":{ "netPnLUsd":…, "winRate":… } },
  "leaderboard":[…] }

The Live Trading Floor · 2D Arcade

● reading /api/regime

A passive visualization of the BlockQuant floor. Its ticker and fee readouts poll the gateway's free, non-blocking /api/regime status endpoint — same origin, no payment required.