Amp ยท by Edge & Node

Amp is a blockchain-native database

A high performance, SQL-native, blockchain-specific database, integrating any chain's data with all your existing systems, and supporting realtime and analytics use-cases.

EXTRACTYOUR PIPELINE

Own the pipeline

You control the extraction and every step after it, end to end, on infrastructure you choose.

AMPSTREAMEXPORTSQL

Integrate with your stack

Standard SQL over Arrow Flight, plus export jobs into Snowflake and Postgres, and more!

ANY EVM CHAIN, SOLANAMORE ON THE WAY

Scale across chains and use cases

Any EVM chain plus Solana, with more chains added all the time. The same tables serve realtime and analytics workloads.

Pull any chain into the tools you already run.

Amp extracts every block, transaction, and log from the chains you point it at, keeps them as Parquet in your bucket, and serves them as SQL to whatever you query with today.

extract and verifyquery or stream
Ethereum
Base
Solana
Arbitrum
Optimism
Polygon
AmpParquet in your bucketSQL over Arrow Flight
Snowflake
ClickHouse
Postgres
Databricks
Apache Kafka
Grafana
EthereumBaseSolanaArbitrumOptimismPolygon
โ†“ extract and verify
Amp
โ†“ query or stream
SnowflakeClickHousePostgresDatabricksApache KafkaGrafana

Is it for me?

Pick your team and see what Amp does for it.


Chain data you query in SQL and plug into the pipelines you already run.

  • Every chain is a set of tables, queryable in standard SQL over Arrow Flight from any client that speaks it.
  • Schedule it from the orchestrator you already use, and land results in Snowflake, Postgres, or Polars.
  • Transformations are SQL that Amp keeps up to date block by block, so they live next to the data.
  • The same binary runs on your laptop and as a shared instance in your cloud or on-prem.
transfers.py
from amp import Client amp = Client("grpc+tls://gateway.amp.edgeandnode.com") transfers = amp.sql("""    SELECT block_num, tx_hash, address AS token    FROM mainnet.logs    WHERE topic0 = evm_topic('Transfer(address indexed from, address indexed to, uint256 value)')      AND _block_num > 21000000""") df = transfers.to_polars()transfers.load(connection=sf, destination="raw.transfers")

How does it work? From a chain to the tools you run

01

Connect your data sources

A provider tells Amp where to read a chain from: your own node or an RPC vendor. Credentials stay with the operator as ${VAR} references, and a provider can be swapped without touching anything downstream.

mainnet.toml
kind = "evm-rpc"network = "mainnet"url = "${ETH_RPC_URL}"
ampctl provider register mainnet_rpc ./mainnet.toml
02

Index raw chain data

A raw dataset extracts every block, transaction, and log into Parquet, backfills from a start block, then follows the chain head under a second behind it, correct through reorgs.

ampctl manifest generate --kind evm-rpc --network mainnet --out eth_mainnet.jsonampctl dataset register acme/eth_mainnet ./eth_mainnet.json --tag 1.0.0ampctl dataset deploy acme/eth_mainnet@1.0.0
+------------------+-------------------------------+| column_name      | data_type                     |+------------------+-------------------------------+| block_num        | UInt64                        || timestamp        | Timestamp(Nanosecond, +00:00) || hash             | FixedSizeBinary(32)           || parent_hash      | FixedSizeBinary(32)           || miner            | FixedSizeBinary(20)           || gas_used         | UInt64                        || base_fee_per_gas | Decimal128(38, 0)             |+------------------+-------------------------------+19 more columns, plus transactions and logs
03

Transform it with SQL

A derived dataset is a SQL query Amp keeps updated block by block. Decode events, join, aggregate, and version the result like any other dataset.

transfers.sql
SELECT l.block_num, l.timestamp, t.symbol,       evm_decode_hex(dec['from']) AS sender,       evm_decode_hex(dec['to'])   AS receiver,       dec['value']::double / pow(10, t.decimals) AS amountFROM (    SELECT *, evm_decode(topic1, topic2, topic3, data, 'Transfer(address indexed from, address indexed to, uint256 value)') AS dec    FROM "acme/eth_mainnet".logs    WHERE topic0 = evm_topic('Transfer(address indexed from, address indexed to, uint256 value)')) lJOIN "acme/stablecoins".tokens t ON t.address = l.address
+-----------+--------+-------------+-------------+-----------+| block_num | symbol | sender      | receiver    | amount    |+-----------+--------+-------------+-------------+-----------+| 25931398  | USDC   | 0x28c6โ€ฆ21a4 | 0x7a25โ€ฆ0f91 | 250000.00 || 25931398  | USDT   | 0xf977โ€ฆ9ff9 | 0x1ab4โ€ฆce10 | 18400.50  || 25931399  | USDC   | 0x4d9fโ€ฆ77c4 | 0x28c6โ€ฆ21a4 | 999.99    |+-----------+--------+-------------+-------------+-----------+
04

Connect your internal systems

Join chain data with the reference data you already hold, and deliver the result to Snowflake or Postgres through an ADBC export job, exactly once, reorgs included.


amp.sql(q).load(connection=sf, destination="raw.transfers")
> SELECT * FROM raw.transfers LIMIT 3;+-----------+-------------+-------------+| BLOCK_NUM | TX_HASH     | TOKEN       ||-----------+-------------+-------------||  25931398 | 0x6f2cโ€ฆ91ab | 0xa0b8โ€ฆeb48 ||  25931398 | 0x0d47โ€ฆ3e10 | 0xdac1โ€ฆ1ec7 ||  25931399 | 0xb81eโ€ฆ77c4 | 0xc02aโ€ฆ6cc2 |+-----------+-------------+-------------+
05

Query and visualize

Standard SQL over Arrow Flight, from a console, a notebook, a BI tool, or Polars. Swap the LIMIT for SETTINGS stream = true and the same statement streams in block order.


SELECT block_num, tx_hash, address AS tokenFROM "acme/eth_mainnet".logsWHERE topic0 = evm_topic('Transfer(address indexed from, address indexed to, uint256 value)')LIMIT 5
+-----------+-------------+-------------+| block_num | tx_hash     | token       |+-----------+-------------+-------------+| 25931398  | 0x6f2cโ€ฆ91ab | 0xa0b8โ€ฆeb48 || 25931398  | 0x0d47โ€ฆ3e10 | 0xdac1โ€ฆ1ec7 || 25931399  | 0xb81eโ€ฆ77c4 | 0xc02aโ€ฆ6cc2 || 25931399  | 0x2a9fโ€ฆd005 | 0xa0b8โ€ฆeb48 || 25931400  | 0xe53bโ€ฆ0f9e | 0xdac1โ€ฆ1ec7 |+-----------+-------------+-------------+
06

Monitor freshness and performance

Sync progress, distance to the chain head, storage, and job health come from the Admin API. ampctl shows the same numbers in the terminal, and OpenTelemetry carries them into Grafana.

ampctl dataset status acme/eth_mainnet@1.0.0
Status:   RunningKind:     RawDataset:  acme/eth_mainnet@1.0.0 Table         Synced through   Distance to head   Storageblocks        25931403         1 block            18.2 GiBtransactions  25931403         1 block            211.6 GiBlogs          25931403         1 block            164.9 GiB
Chain agnostic
Any EVM chain plus Solana, with more chains added all the time. A provider is one TOML file.
SQL-first
Standard SQL over Arrow Flight, with ABI, Borsh, SCALE, and XDR decoded at query time.
Integrate with your stack
Arrow in Polars, export jobs into Snowflake and Postgres, and any client that speaks Arrow Flight SQL.
Self-host or run it with us
Run it in your cloud or on-prem, or the same binary run for you by Edge & Node.
Low latency
Under a second behind the chain head, correct through reorgs.
Minimal footprint
Two services to run besides ampd. Parquet at rest is 10ร— smaller than BigQuery's Solana dataset.

Correct through forks, bad data, and time.

ORPHANEDREPLAYEDHEAD

Forks roll back on their own

Hash-linked ranges detect the fork, drop the orphaned blocks, and replay the canonical ones.

VERIFY

Bad RPC data never lands

With --verify, Amp recomputes header hashes and Merkle roots. A bad RPC response fails instead of landing in a table.

REVISION 12, PINNEDIMMUTABLE REVISIONS

Last quarter's number, every time

Datasets are immutable revisions. Query as of a pinned revision and get the same answer every time.

Plugs into the stack you already run.

Snowflake, BigQuery, ClickHouse, Postgres, Kafka, and the rest of the tools your data team works in.

  • Snowflake
  • BigQuery
  • ClickHouse
  • Postgres
  • Apache Iceberg
  • Delta Lake
  • Amazon S3
  • Power BI
  • Tableau
  • Databricks
  • LangChain
  • Apache Kafka
  • Redis
  • CDC / Debezium
  • Datadog
  • Grafana
  • Splunk

Run Amp where your data lives. The team sets it up with you.