Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6,884 changes: 4,145 additions & 2,739 deletions Cargo.lock

Large diffs are not rendered by default.

83 changes: 38 additions & 45 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@ resolver = "2"

[workspace.package]
authors = ["Triton One", "ABK-Labs"]
edition = "2021"
edition = "2024"
license = "MIT"
version = "0.6.0"
repository = "https://github.com/rpcpool/yellowstone-vixen"
publish = false


[workspace.dependencies]
agave-snapshots = "^3.0.0"
async-trait = "^0.1"
borsh = "1.5.5"
borsh = "1.5.7"
bs58 = "^0.5.1"
hex = "^0.4.3"
bytesize = "^2.0.0"
Expand All @@ -36,35 +37,38 @@ prost-build = "^0.13.1"
prost-types = "^0.13.1"
protobuf-src = "^1.0.0"
regex = "^1.11.0"
rustls = "^0.23.0"
serde = "^1.0.198"
serde_json = "^1.0.0"
smallvec = "^1.14.0"
solana-account = "^2.2.0"
solana-accounts-db = "^2.2.0"
solana-account-decoder-client-types = "^2.2.0"
solana-client = "^2.2.0"
solana-commitment-config = "^2.2.0"
solana-sdk = "^2.2.0"
solana-rpc-client-api = "^2.2.0"
solana-account-info = "^2.2.0"
solana-cpi = "^2.2.0"
solana-decode-error = "^2.2.0"
solana-pubkey = "^2.2.0"
solana-instruction = "^2.2.0"
solana-msg = "^2.2.0"
solana-program-entrypoint = "^2.2.0"
solana-program-error = "^2.2.0"
solana-transaction-status = "^2.2.0"
solana-ledger = "^2.2.0"
solana-runtime = "^2.2.0"
spl-pod = "^0.3.0"
solana-genesis-utils = "^3.0.0"
solana-account = "^3.0.0"
solana-accounts-db = "^3.0.0"
solana-program-option = "^3.0.0"
solana-account-decoder-client-types = "^3.0.0"
solana-client = "^3.0.0"
solana-commitment-config = "^3.0.0"
solana-sdk = "^3.0.0"
solana-rpc-client-api = "^3.0.0"
solana-account-info = "^3.0.0"
solana-cpi = "^3.0.0"
solana-decode-error = "^3.0.0"
solana-pubkey = "^3.0.0"
solana-instruction = "^3.0.0"
solana-msg = "^3.0.0"
solana-program-entrypoint = "^3.0.0"
solana-program-pack = "^3.0.0"
solana-program-error = "^3.0.0"
solana-transaction-status = "^3.0.0"
solana-ledger = "^3.0.0"
solana-runtime = "^3.0.0"
spl-pod = "^0.7.0"
spl-stake-pool = "^2.0.0"
spl-token = "^6.0.0"
spl-token-2022 = "^9.0.0"
spl-type-length-value = "^0.8.0"
spl-token-group-interface = "^0.6.0"
spl-token-metadata-interface = "^0.7.0"
spl-token = "^9.0.0"
spl-token-2022 = "^10.0.0"
spl-type-length-value = "^0.9.0"
spl-token-group-interface = "^0.7.0"
spl-token-metadata-interface = "^0.8.0"
rustls = "^0.23"
strum = "^0.27"
strum_macros = "^0.27"
syn = { version = "2", default-features = false }
Expand All @@ -76,7 +80,7 @@ tonic-reflection = "^0.12.1"
tonic-build = "^0.12.1"
toml = "^0.8.0"
topograph = "^0.4.0"
tokio = "^1.37.0"
tokio = "^1.48.0"
tracing = "^0.1.40"
quote = "1"
zstd = "^0.13.0"
Expand All @@ -85,6 +89,7 @@ bytemuck = "^1"
yellowstone-fumarole-client = "^0.2.0"
yellowstone-grpc-client = { version = "9" }
yellowstone-grpc-proto = { version = "9", default-features = false }

yellowstone-vixen = { path = "crates/runtime", version = "0.6.0" }
yellowstone-vixen-proc-macro = { path = "crates/proc-macro", version = "0.6.0" }
yellowstone-vixen-stream = { path = "crates/stream", version = "0.6.0" }
Expand All @@ -93,23 +98,11 @@ yellowstone-vixen-mock = { path = "crates/mock", version = "0.6.0" }
yellowstone-vixen-parser = { path = "crates/parser", version = "0.6.0" }
yellowstone-vixen-proto = { path = "crates/proto", version = "0.6.0" }

yellowstone-vixen-boop-parser = { path = "crates/boop-parser", version = "0.6.0" }
yellowstone-vixen-meteora-parser = { path = "crates/meteora-parser", version = "0.6.0" }
yellowstone-vixen-pumpfun-parser = { path = "crates/pumpfun-parser", version = "0.6.0" }
yellowstone-vixen-jupiter-swap-parser = { path = "crates/jupiter-swap-parser", version = "0.6.0" }
yellowstone-vixen-meteora-amm-parser = { path = "crates/meteora-amm-parser", version = "0.6.0" }
yellowstone-vixen-meteora-dbc-parser = { path = "crates/meteora-dbc-parser", version = "0.6.0" }
yellowstone-vixen-meteora-pools-parser = { path = "crates/meteora-pools-parser", version = "0.6.0" }
yellowstone-vixen-meteora-vault-parser = { path = "crates/meteora-vault-parser", version = "0.6.0" }
yellowstone-vixen-moonshot-parser = { path = "crates/moonshot-parser", version = "0.6.0" }
yellowstone-vixen-orca-whirlpool-parser = { path = "crates/orca-whirlpool-parser", version = "0.6.0" }
yellowstone-vixen-raydium-cpmm-parser = { path = "crates/raydium-cpmm-parser", version = "0.6.0" }
yellowstone-vixen-pump-swaps-parser = { path = "crates/pump-swaps-parser", version = "0.6.0" }
yellowstone-vixen-raydium-clmm-parser = { path = "crates/raydium-clmm-parser", version = "0.6.0" }
yellowstone-vixen-raydium-amm-v4-parser = { path = "crates/raydium-amm-v4-parser", version = "0.6.0" }
yellowstone-vixen-kamino-limit-orders-parser = { path = "crates/kamino-limit-orders-parser", version = "0.6.0" }
yellowstone-vixen-raydium-launchpad-parser = { path = "crates/raydium-launchpad-parser", version = "0.6.0" }
yellowstone-vixen-virtuals-parser = { path = "crates/virtuals-parser", version = "0.6.0" }
# Parsers
yellowstone-vixen-spl-token-extensions-parser = { path = "crates/spl-token-extensions-parser", version = "0.6.0" }
yellowstone-vixen-spl-token-parser = { path = "crates/spl-token-parser", version = "0.6.0" }
yellowstone-vixen-block-meta-parser = { path = "crates/block-meta-parser", version = "0.6.0" }
yellowstone-vixen-slot-parser = { path = "crates/slot-parser", version = "0.6.0" }

# Sources
yellowstone-vixen-solana-rpc-source = { path = "crates/solana-rpc-source", version = "0.6.0" }
Expand Down
65 changes: 40 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Solana change events, following the Yellowstone gRPC specification, are received
- [Problem Solving](#problem-solving)
- [Features](#features)
- [Quick Start](#quick-start)
- [Official Parsers](#official-parsers)
- [Parsers](#parsers)
- [Official Sources](#official-sources)
- [Developer Resources](#developer-resources)
- [Maintainers](#maintainers)
Expand All @@ -29,7 +29,8 @@ Yellowstone Vixen solves core challenges for Solana dApp developers:

- **🛠 Parser + Handler Architecture**: Build pipelines that transform raw Solana events into structured models and trigger custom logic.
- **🔥 Flexible Source Integration**: Register custom data sources or use existing ones like Dragon's Mouth for Solana Geyser streams.
- **📈 Metrics Support**: Prometheus /metrics endpoint available out-of-the-box.
- **✨ IDL-Based Code Generation**: Generate type-safe parsers directly from your Solana program's IDL using a procedural macro, eliminating manual deserialization and improving maintainability.
- **📈 Metrics Support**: Register your own Prometheus registry for unified metrics reporting.
- **🧪 Offline Testing with Fixtures**: Test parsers without connecting to live Solana nodes using devnet fixtures.
- **🔄 gRPC Streaming API**: Serve parsed program events directly to external systems or clients.

Expand All @@ -43,7 +44,7 @@ use std::path::PathBuf;
use clap::Parser;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
use yellowstone_vixen::Pipeline;
use yellowstone_vixen_parser::token_program::{AccountParser, InstructionParser};
use yellowstone_vixen_spl_token_parser::{AccountParser, InstructionParser};
use yellowstone_vixen_yellowstone_grpc_source::YellowstoneGrpcSource;

#[derive(clap::Parser)]
Expand All @@ -57,13 +58,17 @@ pub struct Opts {
pub struct Logger;

impl<V: std::fmt::Debug + Sync, R: Sync> vixen::Handler<V, R> for Logger {
async fn handle(&self, _value: &V, _raw: &R) -> vixen::HandlerResult<()> {
async fn handle(&self, value: &V, _raw: &R) -> vixen::HandlerResult<()> {
tracing::info!(?value);
Ok(())
}
}

fn main() {
rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.expect("Fialed to install rustls crypto provider");

tracing_subscriber::registry()
.with(tracing_subscriber::EnvFilter::from_default_env())
.with(tracing_subscriber::fmt::layer())
Expand Down Expand Up @@ -93,27 +98,37 @@ To run prometheus, you need to have docker and docker-compose installed on your
sudo docker-compose up
```

## Supported Programs

| Address | Public Name | Parser |
| ---------------------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `boop8hVGQGqehUK2iVEMEnMrL5RbjywRzHKBmBE7ry4` | **Boop.fun** | [yellowstone-vixen-boop-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/boop-parser) |
| `JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4` | **Jupiter Aggregator v6** | [yellowstone-vixen-jupiter-swap-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/jupiter-swap-parser) |
| `LiMoM9rMhrdYrfzUCxQppvxCSG1FcrUK9G8uLq4A1GF` | **Kamino Limit Order** | [yellowstone-vixen-kamino-limit-orders-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/kamino-limit-orders-parser) |
| `cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG` | **Meteora DAMM v2** | [yellowstone-vixen-meteora-amm-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/meteora-amm-parser) |
| `dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN` | **Meteora Dynamic Bonding Curve** | [yellowstone-vixen-meteora-dbc-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-dbc-parser) |
| `LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo` | **Meteora DLMM** | [yellowstone-vixen-meteora-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-parser) |
| `Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB` | **Meteora Pools** | [yellowstone-vixen-meteora-pools-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-pools-parser) |
| `24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi` | **Meteora Vault** | [yellowstone-vixen-meteora-vault-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-vault-parser) |
| `MoonCVVNZFSYkqNXP6bxHLPL6QQJiMagDL3qcqUQTrG` | **Moonshot** | [yellowstone-vixen-moonshot-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/moonshot-parser) |
| `whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc` | **Whirlpools** | [yellowstone-vixen-orca-whirlpool-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/orca-whirlpool-parser) |
| `pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA` | **Pump.fun AMM** | [yellowstone-vixen-pump-swaps-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/pump-swaps-parser) |
| `6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P` | **Pump.fun** | [yellowstone-vixen-pumpfun-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/pumpfun-parser) |
| `675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8` | **Raydium Liquidity Pool V4** | [yellowstone-vixen-raydium-amm-v4-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-amm-v4-parser) |
| `CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK` | **Raydium Concentrated Liquidity** | [yellowstone-vixen-raydium-clmm-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-clmm-parser) |
| `CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C` | **Raydium CPMM** | [yellowstone-vixen-raydium-cpmm-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-cpmm-parser) |
| `LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj` | **Raydium Launchpad** | [yellowstone-vixen-raydium-launchpad-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-launchpad-parser) |
| `5U3EU2ubXtK84QcRjWVmYt9RaDyA8gKxdUrPFXmZyaki` | **Virtuals** | [yellowstone-vixen-virtuals-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/virtuals-parser) |
## Parsers

### Built-in

| Address | Public Name | Parser |
| --------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA` | **Token Program** | [yellowstone-vixen-spl-token-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/spl-token-parser) |
| `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` | **Token Extensions** | [yellowstone-vixen-spl-token-extensions-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/spl-token-extensions-program) |

### Codegen Macro

The `yellowstone-vixen-proc-macro` crate provides the `include_vixen_parser!` procedural macro, which generates a Vixen parser from a Codama JSON IDL file.

To use it, add the following dependencies to your `Cargo.toml`:

```toml
[dependencies]
borsh = "^1.0.0"
yellowstone-vixen-parser = { version = "0.6.0" }
yellowstone-vixen-proc-macro = { version = "0.6.0" }
```

Then, import and invoke the macro in your code. Specify the path to your Codama JSON IDL file relative to your crate root:

```rust
use yellowstone_vixen_proc_macro::include_vixen_parser;

include_vixen_parser!("path/to/idl.json");
```

The generated account and instruction parsers will be available under a module named after the program.

## Official Sources

Expand Down
21 changes: 21 additions & 0 deletions crates/block-meta-parser/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[package]
name = "yellowstone-vixen-block-meta-parser"
description = "Vixen block meta parser."
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
yellowstone-grpc-proto = { workspace = true }
yellowstone-vixen-core = { workspace = true }

[dev-dependencies]
yellowstone-vixen-mock = { workspace = true }
tokio.workspace = true

[features]
default = []
3 changes: 3 additions & 0 deletions crates/block-meta-parser/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mod block_meta;

pub use block_meta::*;
42 changes: 0 additions & 42 deletions crates/boop-parser/Cargo.toml

This file was deleted.

19 changes: 0 additions & 19 deletions crates/boop-parser/build.rs

This file was deleted.

Loading
Loading