Cherry is a python library for building blockchain data pipelines.
It is designed to make building production-ready blockchain data pipelines easy.
See getting started section of the docs.
- Pure
python
library. Don't need yaml, SQL, toml etc. - High-level
datasets
API and flexible pipeline API. High-performance
,low-cost
anduniform
data access. Ability to use advanced providers without platform lock-in.- Included functionality to
decode
,validate
,transform
blockchain data. All implemented inrust
for performance. - Write transformations using
polars
,pyarrow
,datafusion
,pandas
,duckdb
or any otherpyarrow
compatible library. Schema inference
automatically creates output tables.- Keep datasets fresh with
continuous ingestion
. Parallelized
, next batch of data is being fetched while your pre-processing function is running, while the database writes are being executed in parallel. Don't need to hand optimize anything.- Included library of transformations.
- Included functionality to implement
crash-resistance
.
Provider | Ethereum (EVM) | Solana (SVM) |
---|---|---|
HyperSync | ✅ | ❌ |
SQD | ✅ | ✅ |
Yellowstone-GRPC | ❌ | ✅ |
- ClickHouse
- Iceberg
- Deltalake
- DuckDB
- Arrow Datasets
- Parquet
Python code uses the standard logging
module of python, so it can be configured according to python docs.
Set RUST_LOG
environment variable according to env_logger docs in order to see logs from rust modules.
To run an example with trace level logging for rust modules:
RUST_LOG=trace uv run examples/path/to/my/example
This repo uses uv
for development.
- Format the code with
uv run ruff format
- Lint the code with
uv run ruff check
- Run type checks with
uv run pyright
- Run the tests with
uv run pytest
Core libraries we use for ingesting/decoding/validating/transforming blockchain data are implemented in cherry-core repo.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.