Skip to main content

A flexible blockchain indexing and data processing pipeline

Project description

Cherry Event Indexer

A flexible blockchain event indexing and data processing pipeline.

Overview

Cherry Event Indexer is a modular system for:

  • Ingesting blockchain events and logs
  • Processing and transforming blockchain data
  • Writing data to various storage backends

Features

  • Modular Pipeline Architecture

    • Configurable data providers
    • Customizable processing steps
    • Pluggable storage backends
  • Built-in Steps

    • EVM block validation
    • Event decoding
    • Custom processing steps
  • Storage Options

    • Local Parquet files
    • AWS S3
    • More coming soon...

Project Structure:

cherry/
├── src/
│ ├── config/ # Configuration parsing
│ ├── utils/ # Pipeline and utilities
│ └── writers/ # Storage backends
├── examples/ # Example implementations
├── tests/ # Test suite
└── config.yaml # Pipeline configuration

Prerequisites:

  • Python 3.10 or higher
  • Docker and Docker Compose
  • MinIO (for local S3-compatible storage)

Installation Steps

Clone the repository and go to the project root:

git clone https://github.com/steelcake/cherry.git
cd cherry

Create and activate a virtual environment:

# Create virtual environment (all platforms)
python -m venv .venv

# Activate virtual environment

# For Windows with git bash:
source .venv/Scripts/activate

# For macOS/Linux:
source .venv/bin/activate

Install dependencies:

pip install -r requirements.txt

Set up environment variables:

Create a .env file in the project root Add your Hypersync API token:

Quick Start

  1. Create a config file (config.yaml):

  2. Run the script:

python main.py

Custom Processing Steps

To add a custom processing step, you need to:

  1. Define the step function
  2. Add the step to the context
  3. Add the step to the config

example: get_block_number_stats.py

def get_block_number_stats(data: Dict[str, pa.RecordBatch], step_config: Dict[str, Any]) -> Dict[str, pa.RecordBatch]:
    """Custom processing step for transfer events"""
    pass

config.yaml

steps:
  - name: my_get_block_number_stats
    kind: get_block_number_stats
    config:
      input_table: logs
      output_table: block_number_stats

Running the Project

Start MinIO server (for local S3 storage):

# Navigate to docker-compose directory
cd docker-compose

# Start MinIO using docker-compose
docker-compose up -d

# Return to project root
cd ..

Default credentials:

Access Key: minioadmin
Secret Key: minioadmin
Console URL: http://localhost:9001

Note: The MinIO service will be automatically configured with the correct ports and volumes as defined in the docker-compose.yml file.

Configure pipelines:

  • Open config.yaml
  • Adjust query, event filters, and batch sizes as needed for your pipeline
  • Configure writer settings (S3/local parquet etc.)

Run the indexer:

python main.py

License

Licensed under either of

at your option.

Contribution

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cherry_indexer-0.1.1.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cherry_indexer-0.1.1-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file cherry_indexer-0.1.1.tar.gz.

File metadata

  • Download URL: cherry_indexer-0.1.1.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for cherry_indexer-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7bd1e26e166fb316454e821b416a64a064cc80449e9501e731de618d5726312f
MD5 e2bf0e5835cd2d0ffd4ce9e8a10c6d15
BLAKE2b-256 42f839ef3e78df628d9dd35dcbfc1fecd36c2bf3afe7ebfc0e5a426d0de24853

See more details on using hashes here.

File details

Details for the file cherry_indexer-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: cherry_indexer-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 17.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for cherry_indexer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1293cece1ef5940b1b7e415ee39c649aa8427b950f10bd26f3aa537e5c125447
MD5 13e7594bcb4e7f3d771d00ea2a319e6b
BLAKE2b-256 97ce6f57f75bf97965bb040766d1dca629d48f48070391a9d645feba2727e421

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page