Aventura, Florida · serving clients across the United States (305) 404-9404Toll-free (800) 767-8566Emergency? Get a call within 1 hour
Financial technology, digital-asset market data

From empty repository to mainnet in ten days: a market-data platform and post-quantum wallets for a new blockchain

A digital-asset market-data start-up.

Scale
10 days to launch, 3 independent capture regions, ~70-step release gate, 2 post-launch redesigns
Engagement
26 October to 4 November 2026 to mainnet launch (10 days), then continuous releases and managed operations

The challenge

A new blockchain was about to switch on native tokens, NFTs, an on-chain market and a decentralized exchange at one fixed block height. The client wanted the market's reference screen, where traders check prices, charts, liquidity and token safety, to be live and correct from the first block, with wallets that keep keys in the browser and resist harvest-now-decrypt-later attacks. The deadline was set by a block rather than a calendar, history could not be recovered later, and the budget meant modest cloud machines with no exposed servers.

A new blockchain was about to switch on native tokens, NFTs, an on-chain market and an exchange at a single known block height. The client, a digital-asset market-data start-up, wanted the place where traders check prices, charts, liquidity and token safety to be live and correct from the first block, together with wallets that hold keys in the browser and resist harvest-now-decrypt-later attacks. Our senior engineers took the product from an empty repository to mainnet in ten days, and the work is real, not illustrative. They used AI-assisted, human-in-the-loop practices from Claude: parallel work on separate branches, every change reviewed and merged by a senior engineer, every release behind the automated gate and every change to live infrastructure approved by a person first. People decide and sign off; the assistance adds speed. Before the real chain, we ran a private copy of it on our own hardware, with traffic bots and injected faults such as cut connections, a stopped archiver and a replayed reorganization.

The architecture is raw first, derived second. A Rust archiver stores every block's raw bytes, payloads and replaced blocks permanently, and a Rust indexer applies each block to a PostgreSQL database in one transaction, so a block is counted completely or not at all and a reorganization is rewound block by block. A transaction of an unknown shape marks that one block for review instead of stopping the platform. Token images are served only if their hash matches the hash recorded on chain, so nobody can swap a logo after the fact.

Redundancy is built in. Three independent capture points in three regions each run their own node and archiver, so losing a machine or a region loses no data. Serving runs on a primary and a warm standby, and every release goes to the standby first and can be rolled back in one step. No server has a public address: traffic arrives through a tunnel, and administrators reach machines only over an encrypted WireGuard mesh. Three monitoring layers watch the heartbeats, and a real fault phones the on-call engineer. Backups go to write-once offsite storage under client-side encryption.

Speed was measured, not assumed. On a synthetic test database of 100 million trades (160 GB) the slowest heavy query took 37.7 seconds before tuning and 39 milliseconds after, about 970 times faster. On a database of 1 million tokens and 10 million trades, screener lists answer in 3 to 50 milliseconds and a token page in 1 to 3. The look of the product moved as fast: a researched palette, a dense terminal layout, a dark theme with a market heat map and phone and tablet boards, four design versions in two weeks, each kept in version control so the client could switch back.

Security followed the same rule as speed: nothing is waived. The wallets keep keys in the browser, protect the vault with Argon2id, summarize every signing request in plain words and flag look-alike and imitation tokens. Direct messages use a hybrid ML-KEM-768 and X25519 exchange. About seventy automated steps run before any release, and audit rounds alternated with fix rounds. After launch the design team shipped two further redesigns without taking the site down. Load figures come from a test network and synthetic data, not from production traffic.

What our team delivered

  • A raw-first design: a Rust archiver stores every block's bytes, payloads and replaced blocks permanently, and a Rust indexer builds a PostgreSQL database that can be rebuilt from that raw store at any time
  • One writer and one transaction per block, so a block is applied completely or not at all and a reorganization is rewound block by block
  • Three independent capture points in three regions, each with its own node and archiver, plus an outside public node used only for cross-checking
  • A primary and a warm standby for serving, with every release checked on the standby first, switched atomically and reversible in one step
  • No server with a public address: traffic arrives through a Cloudflare tunnel and administrators reach machines only over an encrypted WireGuard mesh
  • Three monitoring layers so no single failure silences them all, including a per-minute edge check that phones the on-call engineer
  • A mempool archive that records every pending transaction with its outcome, in hash-chained segments copied to write-once offsite storage
  • Query tuning measured on a synthetic database of 100 million trades: the heaviest query went from 37.7 seconds to 39 milliseconds, and list pages answer in 3 to 50 milliseconds
  • A Chrome/Brave extension and a built-in browser wallet sharing one core written in Rust and compiled to WebAssembly, with hybrid ML-KEM-768 + X25519 messaging, Argon2id vault protection and plain-language signing prompts
  • A release gate of about 70 automated steps (unit, API, real-browser, visual, security and Rust tests) that is fixed, never waived

Result

The reference screen was live and correct from the first block of the new features, with every block and every pending transaction preserved in three regions. The platform runs on a few modest cloud machines, has no exposed servers, calls a person when something is wrong, and was redesigned twice after launch without downtime. Load figures come from the test network and synthetic databases, not production traffic.

What a trader sees

Screener · live pairs · sorted by 24 h change
PairPrice24 hVolume
Asset A / Base1.0842+4.2%2.1M
Asset B / Base0.2210-1.8%880K
Asset C / Base12.480+9.6%5.4M
Asset D / Base0.0391-6.3%310K
Asset E / Base3.7150+0.7%1.2M
Asset F / Base0.8820-0.4%640K
Illustration only. Made-up rows, not real assets or prices.

A market-data platform with no single point of failure

Three independent capture points record the chain in three regions, a primary and a warm standby serve visitors behind an edge network with no exposed servers, archives go to write-once storage, and three monitoring layers make sure no single failure can silence the alarm.

A market-data platform with no single point of failureA blockchain network feeds three independent capture points, each with its own node and archiver, in Frankfurt, São Paulo and Ashburn. An outside public node is used only to cross-check. The captures feed a primary serving stack with a warm standby behind an edge network, which serves traders. Archives are copied to write-once, retention-locked offsite storage. Three monitoring layers watch the system: an edge monitor every minute that phones the on-call engineer, cloud metrics with email alarms, and an hourly deep cross-check. On a loop the primary fails and the standby serves with no gap. Frankfurtnode + archiverSão Paulonode + archiverAshburnnode + archiverChainnetworkPrimaryservesWarm standbydeploys firstEdge networktunnel · WAF · cacheTraderssite + APIOffsite storagewrite-onceOutside nodecross-checkprimary down: standby servesLayer 1 · edge monitorevery minute · phones on-callLayer 2 · cloud metricsevery minute · email alarmsLayer 3 · deep cross-checkhourly · hashes agreeTHREE MONITORING LAYERS

From 37.7 seconds to 39 milliseconds

Measured on a synthetic database of 100 million trades (160 GB) on the test network: the slowest heavy query of a market-data screener took 37.7 s before tuning and 39 ms after, about 970 times faster. For scale, list pages on a synthetic 1‑million-token, 10‑million-trade database answer in 3 to 50 ms and a token page in 1 to 3 ms. The time axis is logarithmic. Load figures come from the test network and synthetic data, not from production traffic.

From 37.7 seconds to 39 millisecondsHorizontal bars on a log time axis. A heavy query on 100 million trades took 37.7 seconds before tuning and 39 milliseconds after. Screener list pages take 3 to 50 milliseconds and token pages 1 to 3 milliseconds on a smaller synthetic database.Query time (log scale)1 ms10 ms100 ms1 s10 s100 sHeavy query, before100M trades, 160 GB37.7 sSame query, after tuning100M trades, 160 GB39 msScreener list1M tokens, 10M trades3–50 msToken page1M tokens, 10M trades1–3 msabout 970× fastersame query, same dataMeasured on the test network with synthetic data. Bars start at 1 ms; each gridline is ten times the last.

Four designs in two weeks

The design team's iterations for a market-data product, from the first palette on 26 October to the phone and tablet boards on 8 November. Every version was kept in version control so the client could switch back; the dense terminal layout became the only interface within three days, and the next two redesigns shipped without taking the site down.

Four designs in two weeksTimeline of four design versions. Version 0, a researched palette with light and dark themes, 26 to 27 October. Version 1, a dense terminal layout, 28 to 29 October. Version 2, a dark theme with a market heat map, 6 November. Version 3, phone and tablet boards, 7 to 8 November. Mainnet launched on 4 November.Design versions, 26 October to 8 November 20264 Nov: mainnet launchv0 StandardResearched leading screeners; new palette, light and darkv1 Dense terminalSquare-cornered trading layout, the only interface from 29 Octv2 Dark theme + heat mapFull redesign, squarified market heat map, opt-in betav3 Phone and tablet19 new boards: 390 px phone, 834 px tablet, your own trades on the chart26 Oct28 Oct30 Oct1 Nov3 Nov5 Nov7 Nov9 NovEvery version stayed in version control, so the client could switch back at any time.

A hybrid post-quantum TLS handshake

The client offers X25519MLKEM768, which pairs a classical X25519 exchange with ML-KEM-768 from FIPS 203. The server encapsulates to the client's ML-KEM key, both sides join the two secrets and feed them to HKDF, and an attacker has to break both algorithms to read recorded traffic later.

A hybrid post-quantum TLS handshakeA sequence diagram of a TLS 1.3 handshake between a client and a server. The client's ClientHello carries a key_share for the hybrid group X25519MLKEM768: an ML-KEM-768 encapsulation key of 1184 bytes and an X25519 public key of 32 bytes. The server answers with a ServerHello whose key_share holds an ML-KEM-768 ciphertext of 1088 bytes, produced by encapsulating to the client's key, and its own X25519 public key. The client decapsulates. Both sides now hold an ML-KEM shared secret and an X25519 shared secret, concatenate them, and use the result as input to the HKDF key schedule of TLS 1.3. Encrypted handshake messages and application data then flow in both directions. Clientbrowser or APIServerTLS 1.3 endpointClientHello · key_share X25519MLKEM768ML-KEM-768 encapsulation key 1184 B + X25519 public key 32 BServerHello · key_share X25519MLKEM768ML-KEM-768 ciphertext 1088 B + X25519 public key 32 BEncrypted handshake and application dataAES-256-GCM or ChaCha20-Poly1305ML-KEM secret + X25519 secret, concatenatedHKDF-Extract and Expand: handshake and traffic keysTLS 1.3 · group X25519MLKEM768 · ML-KEM per FIPS 203safe if either algorithm holds

Frequently asked questions

Direct answers to the questions we hear most. Something else on your mind?

Send us a message
How was the platform ready in ten days?

The team worked from approved written plans, built the indexer, API, site, charts and wallets in parallel, and ran every change through a gate of about 70 automated steps. Senior engineers reviewed and merged all work, with AI assistance adding speed and volume. People approved every live-infrastructure change. Plans came first, code second.

How does the platform stay correct when the chain reorganizes?

Every block's raw bytes are stored permanently, and the database is built from that store by one writer, one transaction per block. A block is applied completely or not at all, and a replaced block is rewound step by step. The database can be rebuilt from the raw store at any time.

What makes the wallets post-quantum ready?

Keys stay in the browser. Wallet messaging uses hybrid ML-KEM-768 with X25519, so an attacker would have to break both to read recorded traffic later, and vaults are protected with Argon2id. The core is written in Rust and compiled to WebAssembly. Plain-language prompts show each approval before it is signed.

Are the performance figures from production traffic?

No. Load and query figures come from a test network and synthetic databases, and the case says so. They show headroom and design behavior, not live visitor counts. The launch itself, repository to mainnet in ten days, is a real result.

Do you know if your company is safe?

Speak with a security engineer today. The first assessment call is free and confidential.

CallFree assessment