Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Photon: the Indexer for ZK Compression on Solana

Photon is the core indexer for ZK Compression on the Solana blockchain. It offers rapid indexing capabilities, snapshot support, and flexible database options to cater to local and production deployments.

🚀 Quick Start

Installation

  1. Install dependencies:
sudo apt install -y build-essential pkg-config libssl-dev
  1. Install photon-indexer:
cargo install photon-indexer

🔧 Usage

Basic Usage

  • Run Photon with default settings against localnet:
photon

Configuration

  • Connect to Devnet:
photon --rpc-url=https://api.devnet.solana.com
  • Use gRPC for block streaming (requires GRPC_X_TOKEN env variable):
photon --rpc-url=https://api.devnet.solana.com --grpc-url=<grpc_url>
  • Use a local Postgres database:
photon --db-url=postgres://postgres@localhost/postgres
  • Specify a start slot:
photon --start-slot=123
  • For more advanced options:
photon --help

📸 Snapshots

Photon supports snapshots for quick bootstrapping.

Loading a Snapshot

  1. Download a snapshot:
photon-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com
  1. Run Photon with the snapshot:
photon --snapshot-dir=~/snapshot --rpc-url=https://api.devnet.solana.com --db-url=postgres://postgres@localhost/postgres

Creating Snapshots

Create a local snapshot:

photon-snapshotter --snapshot-dir=~/snapshot

Store snapshots in an R2 bucket:

photon-snapshotter --r2-bucket=some-bucket --r2-prefix=prefix

Note: Set R2_ACCESS_KEY, R2_ACCOUNT_ID, and R2_SECRET_KEY environment variables when using R2.

🗄️ Database Management

Photon supports both Postgres and SQLite. By default, it uses an in-memory SQLite database.

To use a custom database:

export DATABASE_URL="postgres://postgres@localhost/postgres"# Set ENABLE_CUSTOM_INDEXES=true to enable program-specific indexes. 
photon-migration up
photon --db-url=$DATABASE_URL

🗄️ Custom Indexes

Developers can easily add program-specific indexes through a custom migration to speed up queries. See src/migration/migrations/custom/custom20252201_000001_init.rs for an example. In the future, we will add tooling to make it easier to add custom indexes. For now, contact the Helius team to add custom indexes.

🛠️ Local Development

Running Tests

  1. Set up the environment:
export MAINNET_RPC_URL=https://api.mainnet-beta.solana.com
export DEVNET_RPC_URL=https://api.devnet.solana.com
export TEST_DATABASE_URL="postgres://postgres@localhost/postgres"
  1. Install additional tools:
npm install -g @apidevtools/swagger-cli
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
docker run -p 3001:3001 docker.io/pmantica1/light-prover:1
  1. Run tests:
cargo test

Note: All migrations run automatically during tests for both Postgres and SQLite.

Database Model Generation

cargo install sea-orm-cli --version 0.10.6
sea-orm-cli generate entity -o src/dao/generated

API Documentation

Generate OpenAPI schemas:

cargo run --bin=photon-openapi

📬 Support

For support or queries, please open an issue on Github or contact the Helius discord.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages