Cronos Public Dataset - AWS S3 Access Guide
The Cronos public blockchain dataset is hosted on Amazon S3 and is freely queryable via Athena, ClickHouse, Presto/Trino, DuckDB, or any engine that supports S3-backed Parquet or CSV data.
Dataset Overview
Base S3 path:
s3://aws-public-blockchain/v1.1/cronos/evm/
Public index page: https://aws-public-blockchain.s3.us-east-2.amazonaws.com/index.html#v1.1/cronos/evm/
Region: us-east-2
Update frequency: Nightly sync at +2 UTC
Available Tables
blocks
One row per block — includes block metadata like hash, miner, and gas usage.
transactions
One row per transaction — includes sender, recipient, gas, and value.
receipts
One row per transaction receipt — includes status, gas used, and logs count.
logs
One row per emitted EVM log — includes address, topics, and data.
decoded_events
Human-readable decoded events (topics and data mapped to ABI definitions).
Common Prerequisites (Step 0)
Before you start, make sure you:
Have internet access (dataset is public, no credentials needed).
Use region
us-east-2
for AWS-based tools.Have a basic understanding of SQL (optional).
Option 1: Amazon Athena (Console Method)
Step 0 — Create or Log In to AWS Account
Sign in at https://aws.amazon.com/.
Step 1 — Open Athena in the us-east-2
Region
us-east-2
RegionGo to https://console.aws.amazon.com/athena/.
Step 2 — Create a Database
CREATE DATABASE IF NOT EXISTS cronos;
USE cronos;
Step 3 — Create Tables
blocks
CREATE EXTERNAL TABLE IF NOT EXISTS blocks (
block_hash string,
block_number bigint,
block_timestamp bigint,
parent_hash string,
gas_limit bigint,
gas_used bigint,
miner string,
size bigint,
extra_data string,
base_fee_per_gas bigint,
logs_bloom string,
state_root string,
transactions_root string,
receipts_root string
)
PARTITIONED BY (date string)
STORED AS PARQUET
LOCATION 's3://aws-public-blockchain/v1.1/cronos/evm/'
TBLPROPERTIES (
'parquet.compression'='SNAPPY',
'projection.enabled'='true',
'projection.date.type'='date',
'projection.date.format'='yyyy-MM-dd',
'projection.date.range'='2021-11-01,NOW',
'storage.location.template'='s3://aws-public-blockchain/v1.1/cronos/evm/blocks/date=${date}/'
);
transactions
CREATE EXTERNAL TABLE IF NOT EXISTS transactions (
block_hash string,
block_number bigint,
block_timestamp bigint,
transaction_hash string,
transaction_index int,
nonce string,
from_address string,
to_address string,
value string,
input string,
gas string,
gas_price string,
transaction_type tinyint
)
PARTITIONED BY (date string)
STORED AS PARQUET
LOCATION 's3://aws-public-blockchain/v1.1/cronos/evm/'
TBLPROPERTIES (
'parquet.compression'='SNAPPY',
'projection.enabled'='true',
'projection.date.type'='date',
'projection.date.format'='yyyy-MM-dd',
'projection.date.range'='2021-11-08,NOW',
'storage.location.template'='s3://aws-public-blockchain/v1.1/cronos/evm/transactions/date=${date}/'
);
receipts
CREATE EXTERNAL TABLE IF NOT EXISTS receipts (
block_hash string,
block_number bigint,
block_timestamp bigint,
transaction_hash string,
transaction_index int,
from_address string,
to_address string,
contract_address string,
cumulative_gas_used string,
gas_used string,
effective_gas_price string,
status tinyint
)
PARTITIONED BY (date string)
STORED AS PARQUET
LOCATION 's3://aws-public-blockchain/v1.1/cronos/evm/'
TBLPROPERTIES (
'parquet.compression'='SNAPPY',
'projection.enabled'='true',
'projection.date.type'='date',
'projection.date.format'='yyyy-MM-dd',
'projection.date.range'='2021-11-08,NOW',
'storage.location.template'='s3://aws-public-blockchain/v1.1/cronos/evm/receipts/date=${date}/'
);
logs
CREATE EXTERNAL TABLE IF NOT EXISTS logs (
block_hash string,
block_number bigint,
block_timestamp bigint,
transaction_hash string,
transaction_index int,
log_index int,
address string,
data string,
topics array<string>,
removed boolean
)
PARTITIONED BY (date string)
STORED AS PARQUET
LOCATION 's3://aws-public-blockchain/v1.1/cronos/evm/'
TBLPROPERTIES (
'parquet.compression'='SNAPPY',
'projection.enabled'='true',
'projection.date.type'='date',
'projection.date.format'='yyyy-MM-dd',
'projection.date.range'='2021-11-08,NOW',
'storage.location.template'='s3://aws-public-blockchain/v1.1/cronos/evm/logs/date=${date}/'
);
decoded_events
CREATE EXTERNAL TABLE IF NOT EXISTS decoded_events (
block_hash string,
block_number bigint,
block_timestamp bigint,
transaction_hash string,
transaction_index int,
log_index int,
address string,
event_hash string,
event_signature string,
topics array<string>,
args array<struct<key:string,value:string>>,
removed boolean
)
PARTITIONED BY (date string)
STORED AS PARQUET
LOCATION 's3://aws-public-blockchain/v1.1/cronos/evm/'
TBLPROPERTIES (
'parquet.compression'='SNAPPY',
'projection.enabled'='true',
'projection.date.type'='date',
'projection.date.format'='yyyy-MM-dd',
'projection.date.range'='2021-11-08,NOW',
'storage.location.template'='s3://aws-public-blockchain/v1.1/cronos/evm/decoded-events/date=${date}/'
);
Step 4 — Query Examples
SELECT COUNT(*) FROM blocks;
SELECT * FROM transactions WHERE to_address IS NOT NULL LIMIT 10;
SELECT event_name, COUNT(*) FROM decoded_events GROUP BY 1 ORDER BY 2 DESC;
Option 2: ClickHouse
Step 0 — Install ClickHouse
docker run -d \
--name clickhouse-server \
-p 8123:8123 -p 9000:9000 \
-e CLICKHOUSE_PASSWORD='YOUR_PASSWORD' \
clickhouse/clickhouse-server
or
brew install clickhouse
Step 1 — Connect
clickhouse-client
Step 2 — Query Public Parquet Data
SELECT block_number, miner
FROM s3(
'https://aws-public-blockchain.s3.us-east-2.amazonaws.com/v1.1/cronos/evm/blocks/date=*/*.parquet',
'Parquet'
)
WHERE block_number = 20000000
ORDER BY block_number DESC;
SELECT block_number, miner
FROM s3(
'https://aws-public-blockchain.s3.us-east-2.amazonaws.com/v1.1/cronos/evm/blocks/date=2025-01-01/*.parquet',
'Parquet'
)
ORDER BY block_number DESC
LIMIT 5;
Repeat similarly for other tables by adjusting the path:
/transactions/date=*/*.parquet
/receipts/date=*/*.parquet
/logs/date=*/*.parquet
/decoded_events/date=*/*.parquet
No credentials or setup required.
Option 3: Presto / Trino
Step 0 — Install
Follow: https://trino.io/docs/current/installation.html
Step 1 — Configure Hive Connector
Edit etc/catalog/hive.properties
:
connector.name=hive
hive.s3.path-style-access=true
hive.s3.region=us-east-2
Step 2 — Start Trino
bin/launcher start
Step 3 — Create Schema & Tables
blocks
CREATE SCHEMA IF NOT EXISTS cronos;
USE cronos;
CREATE TABLE blocks (
block_hash VARCHAR,
block_number BIGINT,
block_timestamp BIGINT,
parent_hash VARCHAR,
gas_limit BIGINT,
gas_used BIGINT,
miner VARCHAR,
size BIGINT,
extra_data VARCHAR,
base_fee_per_gas BIGINT,
logs_bloom VARCHAR,
state_root VARCHAR,
transactions_root VARCHAR,
receipts_root VARCHAR,
date VARCHAR
)
WITH (
external_location = 's3a://aws-public-blockchain/v1.1/cronos/evm/blocks/',
format = 'PARQUET',
partitioned_by = ARRAY['date']
);
transactions
CREATE TABLE transactions (
block_hash VARCHAR,
block_number BIGINT,
block_timestamp BIGINT,
transaction_hash VARCHAR,
transaction_index INTEGER,
nonce VARCHAR,
from_address VARCHAR,
to_address VARCHAR,
value VARCHAR,
input VARCHAR,
gas VARCHAR,
gas_price VARCHAR,
transaction_type TINYINT,
date VARCHAR
)
WITH (
external_location = 's3a://aws-public-blockchain/v1.1/cronos/evm/transactions/',
format = 'PARQUET',
partitioned_by = ARRAY['date']
);
receipts
CREATE TABLE receipts (
block_hash VARCHAR,
block_number BIGINT,
block_timestamp BIGINT,
transaction_hash VARCHAR,
transaction_index INTEGER,
from_address VARCHAR,
to_address VARCHAR,
contract_address VARCHAR,
cumulative_gas_used VARCHAR,
gas_used VARCHAR,
effective_gas_price VARCHAR,
status TINYINT,
date VARCHAR
)
WITH (
external_location = 's3a://aws-public-blockchain/v1.1/cronos/evm/receipts/',
format = 'PARQUET',
partitioned_by = ARRAY['date']
);
logs
CREATE TABLE logs (
block_hash VARCHAR,
block_number BIGINT,
block_timestamp BIGINT,
transaction_hash VARCHAR,
transaction_index INTEGER,
log_index INTEGER,
address VARCHAR,
data VARCHAR,
topics ARRAY<VARCHAR>,
removed BOOLEAN,
date VARCHAR
)
WITH (
external_location = 's3a://aws-public-blockchain/v1.1/cronos/evm/logs/',
format = 'PARQUET',
partitioned_by = ARRAY['date']
);
decoded events
CREATE TABLE decoded_events (
block_hash VARCHAR,
block_number BIGINT,
block_timestamp BIGINT,
transaction_hash VARCHAR,
transaction_index INTEGER,
log_index INTEGER,
address VARCHAR,
event_hash VARCHAR,
event_signature VARCHAR,
topics ARRAY<VARCHAR>,
args ARRAY<ROW(key VARCHAR, value VARCHAR)>,
removed BOOLEAN,
date VARCHAR
)
WITH (
external_location = 's3a://aws-public-blockchain/v1.1/cronos/evm/decoded-events/',
format = 'PARQUET',
partitioned_by = ARRAY['date']
);
Step 4 — Query
SELECT COUNT(*) FROM blocks;
SELECT * FROM transactions WHERE date = '2025-10-08' LIMIT 5;
SELECT block_number, COUNT(*) FROM receipts GROUP BY block_number ORDER BY block_number DESC LIMIT 10;
Option 4: DuckDB (Local)
Step 0 — Install
pip install duckdb
Step 1 — Run Query (CLI)
duckdb -c "
SELECT block_number, miner
FROM read_parquet('https://aws-public-blockchain.s3.us-east-2.amazonaws.com/v1.1/cronos/evm/blocks/date=2025-01-01/*.parquet')
ORDER BY block_number DESC
LIMIT 5;
"
Step 2 — Python Example
import duckdb
con = duckdb.connect()
con.sql("""
SELECT block_number, miner
FROM read_parquet('https://aws-public-blockchain.s3.us-east-2.amazonaws.com/v1.1/cronos/evm/blocks/date=2025-01-01/*.parquet')
ORDER BY block_number DESC
LIMIT 5;
""").show()
Works out-of-the-box — no AWS setup needed.
Option 5: Other Tools
Spark
spark.read.parquet("s3a://aws-public-blockchain/v1.1/cronos/evm/transactions/date=*/")
Dask / Polars
dd.read_parquet("https://.../*.parquet")
or pl.scan_parquet()
AWS Glue
Create crawler with s3://aws-public-blockchain/v1.1/cronos/evm/
Redshift Spectrum
Create external schema and map Parquet tables to S3 paths
Summary
Athena
No
AWS Console
Easiest for browser users
ClickHouse
No
Local or Cloud
Fast columnar queries
Presto / Trino
No
Cluster setup
Integrates with Hive
DuckDB
No
Local, Python
Lightweight and portable
Data Model — Cronos Public Dataset
The Cronos dataset consists of five interrelated tables:
blocks
│
├── transactions
│ └── receipts
│ └── logs
│ └── decoded_events
Each layer represents a deeper level of blockchain execution — from the block level down to decoded smart contract events.
Relationship Diagram (Text-Based)
+----------------------+
| blocks |
|----------------------|
| block_number (PK) |
| block_hash |
| block_timestamp |
+----------------------+
│
│ 1 : N
▼
+----------------------+
| transactions |
|----------------------|
| transaction_hash (PK)|
| block_number (FK) |
| from_address |
| to_address |
+----------------------+
│
│ 1 : 1
▼
+----------------------+
| receipts |
|----------------------|
| transaction_hash (PK)|
| block_number (FK) |
| status |
| gas_used |
+----------------------+
│
│ 1 : N
▼
+----------------------+
| logs |
|----------------------|
| transaction_hash (FK)|
| log_index (PK) |
| address |
| topics |
| data |
+----------------------+
│
│ 1 : 1
▼
+----------------------+
| decoded_events |
|----------------------|
| transaction_hash (FK)|
| log_index (FK) |
| event_signature |
| args (key/value) |
+----------------------+
Key Relationships
blocks
transactions
block_number
One block has many transactions
transactions
receipts
transaction_hash
One-to-one
transactions
logs
transaction_hash
One-to-many
logs
decoded_events
transaction_hash
, log_index
One-to-one
blocks
receipts
/ logs
/ decoded_events
block_number
Cross-layer link for time context
Last updated
Was this helpful?