Skip to main content

Overview

Goldsky provides curated datasets for EVM chains, making it easy to build real-time data pipelines without managing Kafka topics or schemas. All datasets follow consistent schemas across chains, so you can write multi-chain pipelines with minimal code changes. See the supported chains page for the full list. The Datasource explorer contains all the chain and dataset names. You can also see datasets with goldsky dataset list using the CLI.
All Mirror datasets work with Turbo. For complete field schemas, see the EVM Data Schemas and Curated Data Schemas references.
Need a chain that isn’t in the supported list, or want to stream straight from an RPC endpoint (a Goldsky Edge endpoint or your own node)? Use the Edge EVM sources (edge.evm.* datasets) instead.

Quick Start

The simplest way to get started is with curated token transfer datasets:
Available EVM datasets: Datasets are namespaced by the network and type. The chain prefix is the network slug (for example matic for Polygon PoS, not polygon). See each chain’s page in supported chains for the correct slug.
  • ethereum.raw_logs for Ethereum mainnet event logs
  • matic.erc20_transfers for Polygon ERC-20 transfers
  • base.raw_logs for Base event logs
The following dataset types are available for most EVM chains:
  • erc20_transfers - Fungible token transfers (curated)
  • erc721_transfers - NFT transfers (curated)
  • erc1155_transfers - Multi-token transfers (curated)
  • raw_blocks - Block headers
  • raw_transactions - Transactions including receipt fields
  • raw_logs - Event logs
  • raw_traces - Internal transaction traces

Fast scan

Processing full datasets (starting from earliest) requires the pipeline to process a significant amount of data, which affects how quickly it reaches the chain tip. This is especially true for larger chains. When you only need a subset of historical data, you can enable fast scan by adding a filter to your source configuration. The filter is pre-applied at the source level, making initial ingestion of historical data much faster by skipping irrelevant blocks. When defining a filter, use attributes that exist in the dataset. You can get the schema of a dataset by running goldsky dataset get <dataset_name>.
The filter expression follows the SQL standard for what comes after the WHERE clause. Supported operators include =, <>, >, <, AND, OR, IN (...), and LIKE (with % as the wildcard). Use parentheses to group conditions when mixing AND and OR — otherwise AND binds tighter than OR and the logic will not match what you expect.
On EVM logs / raw_logs datasets, topics is a comma-separated string, not an array. The first value is the event-signature hash. To match a specific event, use topics LIKE '0xEVENT_SIG_HASH%' — the trailing % wildcard is required so that the pattern matches regardless of the remaining indexed topics.
Keep source filter expressions focused on columns that make the fast scan effective (typically address, topics, block_number). For row-level filtering on other columns (for example data <> '0x00...'), apply it in a downstream SQL transform instead — transforms accept full standard SQL and are not restricted to the fast-scan operator set.
Fast scan speeds up backfills only — when processing historical data with start_at: earliest. During real-time processing (when the pipeline has caught up to the chain tip), all blocks are processed regardless of the filter.
Fast scan also works with job mode. When you set a filter: together with start_at: earliest (or omit start_at), the source becomes bounded and job mode can terminate it cleanly. To make the backfill finite, include an upper bound on block_number in the filter: expression:
Deploy with job: true and the pipeline will self-terminate once block 20,000,000 is processed. Without a filter:, an EVM dataset becomes a streaming Kafka source and cannot be used with job: true.
end_block is not supported on EVM dataset sources — it is silently ignored. To bound an EVM job, put the block range in the filter: expression (e.g., block_number <= 20000000 or block_number BETWEEN 18000000 AND 20000000). end_block is Solana-only.

Guide: Track Specific Tokens

Use dynamic tables to monitor transfers for tokens you care about:
Add tokens to track: Dynamic tables default to the streamling schema with a value column. See Dynamic Tables for how to customize this.

Guide: Decode Custom Contract Events

Use _gs_log_decode to decode events from any contract with raw logs:
Decoding functions:
  • _gs_log_decode(abi, topics, data) - Decode event logs
  • _gs_fetch_abi(url, 'etherscan') - Fetch ABI from Etherscan
  • _gs_fetch_abi(url, 'raw') - Fetch raw JSON ABI from URL
Accessing decoded parameters:

Guide: Multi-Chain Monitoring

Track the same event across multiple chains:

Guide: High-Value Transfer Alerts

Send real-time alerts for large transfers:

Guide: UniswapV3 Swap Detection with Log Decoding

Track UniswapV3-like swaps on Base on specific pools of interest.
Populate pools from UniswapV3 Factory: Instead of manually adding pool addresses, you can automatically discover pools from factory PoolCreated events:
Or manually add specific pools:
Filter to specific tokens:
Key points:
  • Uses the base.raw_logs dataset for full event coverage and custom decoding
  • Swap event signature (0xc4207...) filters for UniswapV3 Swap events
  • _gs_log_decode decodes the raw log using inline ABI
  • Dynamic table pattern allows adding/removing pools without redeploying
  • Extracts all swap parameters: amounts, price, liquidity, and tick
  • Factory pattern automatically discovers new pools as they’re created