Skip to content

Commit d394e29

Browse files
authored
Remove Codama Generated Parser Crates (#168)
1 parent 38ecfde commit d394e29

File tree

1,071 files changed

+7861
-417689
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,071 files changed

+7861
-417689
lines changed

Cargo.lock

Lines changed: 4145 additions & 2739 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@ resolver = "2"
55

66
[workspace.package]
77
authors = ["Triton One", "ABK-Labs"]
8-
edition = "2021"
8+
edition = "2024"
99
license = "MIT"
1010
version = "0.6.0"
1111
repository = "https://github.com/rpcpool/yellowstone-vixen"
1212
publish = false
1313

1414

1515
[workspace.dependencies]
16+
agave-snapshots = "^3.0.0"
1617
async-trait = "^0.1"
17-
borsh = "1.5.5"
18+
borsh = "1.5.7"
1819
bs58 = "^0.5.1"
1920
hex = "^0.4.3"
2021
bytesize = "^2.0.0"
@@ -36,35 +37,38 @@ prost-build = "^0.13.1"
3637
prost-types = "^0.13.1"
3738
protobuf-src = "^1.0.0"
3839
regex = "^1.11.0"
39-
rustls = "^0.23.0"
4040
serde = "^1.0.198"
4141
serde_json = "^1.0.0"
4242
smallvec = "^1.14.0"
43-
solana-account = "^2.2.0"
44-
solana-accounts-db = "^2.2.0"
45-
solana-account-decoder-client-types = "^2.2.0"
46-
solana-client = "^2.2.0"
47-
solana-commitment-config = "^2.2.0"
48-
solana-sdk = "^2.2.0"
49-
solana-rpc-client-api = "^2.2.0"
50-
solana-account-info = "^2.2.0"
51-
solana-cpi = "^2.2.0"
52-
solana-decode-error = "^2.2.0"
53-
solana-pubkey = "^2.2.0"
54-
solana-instruction = "^2.2.0"
55-
solana-msg = "^2.2.0"
56-
solana-program-entrypoint = "^2.2.0"
57-
solana-program-error = "^2.2.0"
58-
solana-transaction-status = "^2.2.0"
59-
solana-ledger = "^2.2.0"
60-
solana-runtime = "^2.2.0"
61-
spl-pod = "^0.3.0"
43+
solana-genesis-utils = "^3.0.0"
44+
solana-account = "^3.0.0"
45+
solana-accounts-db = "^3.0.0"
46+
solana-program-option = "^3.0.0"
47+
solana-account-decoder-client-types = "^3.0.0"
48+
solana-client = "^3.0.0"
49+
solana-commitment-config = "^3.0.0"
50+
solana-sdk = "^3.0.0"
51+
solana-rpc-client-api = "^3.0.0"
52+
solana-account-info = "^3.0.0"
53+
solana-cpi = "^3.0.0"
54+
solana-decode-error = "^3.0.0"
55+
solana-pubkey = "^3.0.0"
56+
solana-instruction = "^3.0.0"
57+
solana-msg = "^3.0.0"
58+
solana-program-entrypoint = "^3.0.0"
59+
solana-program-pack = "^3.0.0"
60+
solana-program-error = "^3.0.0"
61+
solana-transaction-status = "^3.0.0"
62+
solana-ledger = "^3.0.0"
63+
solana-runtime = "^3.0.0"
64+
spl-pod = "^0.7.0"
6265
spl-stake-pool = "^2.0.0"
63-
spl-token = "^6.0.0"
64-
spl-token-2022 = "^9.0.0"
65-
spl-type-length-value = "^0.8.0"
66-
spl-token-group-interface = "^0.6.0"
67-
spl-token-metadata-interface = "^0.7.0"
66+
spl-token = "^9.0.0"
67+
spl-token-2022 = "^10.0.0"
68+
spl-type-length-value = "^0.9.0"
69+
spl-token-group-interface = "^0.7.0"
70+
spl-token-metadata-interface = "^0.8.0"
71+
rustls = "^0.23"
6872
strum = "^0.27"
6973
strum_macros = "^0.27"
7074
syn = { version = "2", default-features = false }
@@ -76,7 +80,7 @@ tonic-reflection = "^0.12.1"
7680
tonic-build = "^0.12.1"
7781
toml = "^0.8.0"
7882
topograph = "^0.4.0"
79-
tokio = "^1.37.0"
83+
tokio = "^1.48.0"
8084
tracing = "^0.1.40"
8185
quote = "1"
8286
zstd = "^0.13.0"
@@ -85,6 +89,7 @@ bytemuck = "^1"
8589
yellowstone-fumarole-client = "^0.2.0"
8690
yellowstone-grpc-client = { version = "9" }
8791
yellowstone-grpc-proto = { version = "9", default-features = false }
92+
8893
yellowstone-vixen = { path = "crates/runtime", version = "0.6.0" }
8994
yellowstone-vixen-proc-macro = { path = "crates/proc-macro", version = "0.6.0" }
9095
yellowstone-vixen-stream = { path = "crates/stream", version = "0.6.0" }
@@ -93,23 +98,11 @@ yellowstone-vixen-mock = { path = "crates/mock", version = "0.6.0" }
9398
yellowstone-vixen-parser = { path = "crates/parser", version = "0.6.0" }
9499
yellowstone-vixen-proto = { path = "crates/proto", version = "0.6.0" }
95100

96-
yellowstone-vixen-boop-parser = { path = "crates/boop-parser", version = "0.6.0" }
97-
yellowstone-vixen-meteora-parser = { path = "crates/meteora-parser", version = "0.6.0" }
98-
yellowstone-vixen-pumpfun-parser = { path = "crates/pumpfun-parser", version = "0.6.0" }
99-
yellowstone-vixen-jupiter-swap-parser = { path = "crates/jupiter-swap-parser", version = "0.6.0" }
100-
yellowstone-vixen-meteora-amm-parser = { path = "crates/meteora-amm-parser", version = "0.6.0" }
101-
yellowstone-vixen-meteora-dbc-parser = { path = "crates/meteora-dbc-parser", version = "0.6.0" }
102-
yellowstone-vixen-meteora-pools-parser = { path = "crates/meteora-pools-parser", version = "0.6.0" }
103-
yellowstone-vixen-meteora-vault-parser = { path = "crates/meteora-vault-parser", version = "0.6.0" }
104-
yellowstone-vixen-moonshot-parser = { path = "crates/moonshot-parser", version = "0.6.0" }
105-
yellowstone-vixen-orca-whirlpool-parser = { path = "crates/orca-whirlpool-parser", version = "0.6.0" }
106-
yellowstone-vixen-raydium-cpmm-parser = { path = "crates/raydium-cpmm-parser", version = "0.6.0" }
107-
yellowstone-vixen-pump-swaps-parser = { path = "crates/pump-swaps-parser", version = "0.6.0" }
108-
yellowstone-vixen-raydium-clmm-parser = { path = "crates/raydium-clmm-parser", version = "0.6.0" }
109-
yellowstone-vixen-raydium-amm-v4-parser = { path = "crates/raydium-amm-v4-parser", version = "0.6.0" }
110-
yellowstone-vixen-kamino-limit-orders-parser = { path = "crates/kamino-limit-orders-parser", version = "0.6.0" }
111-
yellowstone-vixen-raydium-launchpad-parser = { path = "crates/raydium-launchpad-parser", version = "0.6.0" }
112-
yellowstone-vixen-virtuals-parser = { path = "crates/virtuals-parser", version = "0.6.0" }
101+
# Parsers
102+
yellowstone-vixen-spl-token-extensions-parser = { path = "crates/spl-token-extensions-parser", version = "0.6.0" }
103+
yellowstone-vixen-spl-token-parser = { path = "crates/spl-token-parser", version = "0.6.0" }
104+
yellowstone-vixen-block-meta-parser = { path = "crates/block-meta-parser", version = "0.6.0" }
105+
yellowstone-vixen-slot-parser = { path = "crates/slot-parser", version = "0.6.0" }
113106

114107
# Sources
115108
yellowstone-vixen-solana-rpc-source = { path = "crates/solana-rpc-source", version = "0.6.0" }

README.md

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Solana change events, following the Yellowstone gRPC specification, are received
1111
- [Problem Solving](#problem-solving)
1212
- [Features](#features)
1313
- [Quick Start](#quick-start)
14-
- [Official Parsers](#official-parsers)
14+
- [Parsers](#parsers)
1515
- [Official Sources](#official-sources)
1616
- [Developer Resources](#developer-resources)
1717
- [Maintainers](#maintainers)
@@ -29,7 +29,8 @@ Yellowstone Vixen solves core challenges for Solana dApp developers:
2929

3030
- **🛠 Parser + Handler Architecture**: Build pipelines that transform raw Solana events into structured models and trigger custom logic.
3131
- **🔥 Flexible Source Integration**: Register custom data sources or use existing ones like Dragon's Mouth for Solana Geyser streams.
32-
- **📈 Metrics Support**: Prometheus /metrics endpoint available out-of-the-box.
32+
- **✨ 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.
33+
- **📈 Metrics Support**: Register your own Prometheus registry for unified metrics reporting.
3334
- **🧪 Offline Testing with Fixtures**: Test parsers without connecting to live Solana nodes using devnet fixtures.
3435
- **🔄 gRPC Streaming API**: Serve parsed program events directly to external systems or clients.
3536

@@ -43,7 +44,7 @@ use std::path::PathBuf;
4344
use clap::Parser;
4445
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
4546
use yellowstone_vixen::Pipeline;
46-
use yellowstone_vixen_parser::token_program::{AccountParser, InstructionParser};
47+
use yellowstone_vixen_spl_token_parser::{AccountParser, InstructionParser};
4748
use yellowstone_vixen_yellowstone_grpc_source::YellowstoneGrpcSource;
4849

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

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

6667
fn main() {
68+
rustls::crypto::aws_lc_rs::default_provider()
69+
.install_default()
70+
.expect("Fialed to install rustls crypto provider");
71+
6772
tracing_subscriber::registry()
6873
.with(tracing_subscriber::EnvFilter::from_default_env())
6974
.with(tracing_subscriber::fmt::layer())
@@ -93,27 +98,37 @@ To run prometheus, you need to have docker and docker-compose installed on your
9398
sudo docker-compose up
9499
```
95100

96-
## Supported Programs
97-
98-
| Address | Public Name | Parser |
99-
| ---------------------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
100-
| `boop8hVGQGqehUK2iVEMEnMrL5RbjywRzHKBmBE7ry4` | **Boop.fun** | [yellowstone-vixen-boop-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/boop-parser) |
101-
| `JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4` | **Jupiter Aggregator v6** | [yellowstone-vixen-jupiter-swap-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/jupiter-swap-parser) |
102-
| `LiMoM9rMhrdYrfzUCxQppvxCSG1FcrUK9G8uLq4A1GF` | **Kamino Limit Order** | [yellowstone-vixen-kamino-limit-orders-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/kamino-limit-orders-parser) |
103-
| `cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG` | **Meteora DAMM v2** | [yellowstone-vixen-meteora-amm-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/meteora-amm-parser) |
104-
| `dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN` | **Meteora Dynamic Bonding Curve** | [yellowstone-vixen-meteora-dbc-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-dbc-parser) |
105-
| `LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo` | **Meteora DLMM** | [yellowstone-vixen-meteora-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-parser) |
106-
| `Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB` | **Meteora Pools** | [yellowstone-vixen-meteora-pools-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-pools-parser) |
107-
| `24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi` | **Meteora Vault** | [yellowstone-vixen-meteora-vault-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/meteora-vault-parser) |
108-
| `MoonCVVNZFSYkqNXP6bxHLPL6QQJiMagDL3qcqUQTrG` | **Moonshot** | [yellowstone-vixen-moonshot-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/moonshot-parser) |
109-
| `whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc` | **Whirlpools** | [yellowstone-vixen-orca-whirlpool-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/orca-whirlpool-parser) |
110-
| `pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA` | **Pump.fun AMM** | [yellowstone-vixen-pump-swaps-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/pump-swaps-parser) |
111-
| `6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P` | **Pump.fun** | [yellowstone-vixen-pumpfun-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/pumpfun-parser) |
112-
| `675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8` | **Raydium Liquidity Pool V4** | [yellowstone-vixen-raydium-amm-v4-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-amm-v4-parser) |
113-
| `CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK` | **Raydium Concentrated Liquidity** | [yellowstone-vixen-raydium-clmm-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-clmm-parser) |
114-
| `CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C` | **Raydium CPMM** | [yellowstone-vixen-raydium-cpmm-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-cpmm-parser) |
115-
| `LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj` | **Raydium Launchpad** | [yellowstone-vixen-raydium-launchpad-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/raydium-launchpad-parser) |
116-
| `5U3EU2ubXtK84QcRjWVmYt9RaDyA8gKxdUrPFXmZyaki` | **Virtuals** | [yellowstone-vixen-virtuals-parser](https://github.com/rpcpool/yellowstone-vixen/blob/main/crates/virtuals-parser) |
101+
## Parsers
102+
103+
### Built-in
104+
105+
| Address | Public Name | Parser |
106+
| --------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
107+
| `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA` | **Token Program** | [yellowstone-vixen-spl-token-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/spl-token-parser) |
108+
| `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` | **Token Extensions** | [yellowstone-vixen-spl-token-extensions-parser](https://github.com/rpcpool/yellowstone-vixen/tree/main/crates/spl-token-extensions-program) |
109+
110+
### Codegen Macro
111+
112+
The `yellowstone-vixen-proc-macro` crate provides the `include_vixen_parser!` procedural macro, which generates a Vixen parser from a Codama JSON IDL file.
113+
114+
To use it, add the following dependencies to your `Cargo.toml`:
115+
116+
```toml
117+
[dependencies]
118+
borsh = "^1.0.0"
119+
yellowstone-vixen-parser = { version = "0.6.0" }
120+
yellowstone-vixen-proc-macro = { version = "0.6.0" }
121+
```
122+
123+
Then, import and invoke the macro in your code. Specify the path to your Codama JSON IDL file relative to your crate root:
124+
125+
```rust
126+
use yellowstone_vixen_proc_macro::include_vixen_parser;
127+
128+
include_vixen_parser!("path/to/idl.json");
129+
```
130+
131+
The generated account and instruction parsers will be available under a module named after the program.
117132

118133
## Official Sources
119134

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[package]
2+
name = "yellowstone-vixen-block-meta-parser"
3+
description = "Vixen block meta parser."
4+
version.workspace = true
5+
edition.workspace = true
6+
license.workspace = true
7+
repository.workspace = true
8+
authors.workspace = true
9+
10+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
11+
12+
[dependencies]
13+
yellowstone-grpc-proto = { workspace = true }
14+
yellowstone-vixen-core = { workspace = true }
15+
16+
[dev-dependencies]
17+
yellowstone-vixen-mock = { workspace = true }
18+
tokio.workspace = true
19+
20+
[features]
21+
default = []
File renamed without changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
mod block_meta;
2+
3+
pub use block_meta::*;

crates/boop-parser/Cargo.toml

Lines changed: 0 additions & 42 deletions
This file was deleted.

crates/boop-parser/build.rs

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)