Slv Grpc Geyser
Ansible playbooks and templates for deploying and managing Solana gRPC Geyser streaming nodes with Yellowstone or Richat plugins.
Description
SLV gRPC Geyser Skill
Ansible playbooks and Jinja2 templates for deploying and managing Solana gRPC Geyser streaming nodes.
Supported Configurations
| Config | Description |
|---|---|
| Yellowstone gRPC | Standard Geyser gRPC plugin (Triton/rpcpool) |
| Richat gRPC | Richat Geyser plugin (lamports-dev) |
Directory Structure
ansible/
mainnet-rpc/ — Playbooks (gRPC Geyser uses mainnet-rpc playbooks)
cmn/ — Shared common playbooks
jinja/
mainnet-rpc/ — Jinja2 templates
cmn/ — Shared templates
CLI Command ↔ Playbook Mapping
gRPC Geyser nodes are managed via slv r (RPC) commands with rpc_type set to Geyser gRPC or Index RPC + gRPC.
| CLI Command | Playbook | Description |
|---|---|---|
slv r deploy |
mainnet-rpc/init.yml |
Full gRPC Geyser node initialization |
slv r start |
mainnet-rpc/start_node.yml |
Start node |
slv r stop |
mainnet-rpc/stop_node.yml |
Stop node |
slv r restart |
mainnet-rpc/restart_node.yml |
Restart node |
slv r build:solana |
mainnet-rpc/install_solana.yml |
Build Solana from source |
slv r update:geyser |
mainnet-rpc/update_geyser.yml |
Update Geyser plugin |
slv r update:script |
mainnet-rpc/update_startup_config.yml |
Update start-validator.sh |
slv r setup:firedancer |
mainnet-rpc/setup_firedancer.yml |
Setup Firedancer |
Key Playbooks
| Playbook | Description |
|---|---|
init.yml |
Full gRPC Geyser node initialization |
init_richat_geyser.yml |
Richat Geyser initialization |
geyser_build.yml |
Build Yellowstone gRPC from GitHub source |
geyser_richat_build.yml |
Build Richat plugin from GitHub source |
install_richat.yml |
Install Richat plugin |
update_geyser.yml |
Update Geyser plugin |
restart_node.yml |
Restart node |
start_node.yml / stop_node.yml |
Start/stop node |
update_startup_config.yml |
Update start-validator.sh from template |
setup_firedancer.yml |
Setup Firedancer |
run_snapshot_finder.yml |
Find and download best snapshot |
run_restarter.yml |
Run restarter script |
Geyser Build Details
Yellowstone gRPC (geyser_build.yml)
- Clones from https://github.com/rpcpool/yellowstone-grpc
- Builds with
cargo build --release - Produces
libyellowstone_grpc_geyser.so - Config template:
jinja/mainnet-rpc/geyser.json.j2
Richat (geyser_richat_build.yml)
- Clones from https://github.com/lamports-dev/richat
- Builds with
cargo build --release - Produces
librichat_plugin_agave.so - Config template:
jinja/mainnet-rpc/geyser-richat.json.j2 - Service template:
jinja/mainnet-rpc/richat.service.j2 - Settings template:
jinja/mainnet-rpc/richat-setting.yml.j2
Key Variables (extra_vars)
| Variable | Description | Default |
|---|---|---|
rpc_type |
Must be Geyser gRPC or Index RPC + gRPC |
— |
validator_type |
Client type (agave, jito, firedancer-agave, etc.) |
— |
solana_version |
Solana/Agave version | — |
yellowstone_grpc_version |
Yellowstone gRPC version tag | — |
richat_version |
Richat plugin version (e.g. richat-v8.1.0) |
— |
snapshot_url |
Snapshot download URL | — |
port_grpc |
gRPC listen port | 10000 |
limit_ledger_size |
Ledger size limit | 100000000 |
Jinja Templates
| Template | Description |
|---|---|
start-validator.sh.j2 |
Main start script (branches by rpc_type) |
start-mainnet-rpc-grpc.sh.j2 |
gRPC-specific start script |
geyser.json.j2 |
Yellowstone gRPC config |
geyser-richat.json.j2 |
Richat gRPC config |
richat-setting.yml.j2 |
Richat settings |
richat.service.j2 |
Richat systemd service |
firedancer-config.toml.j2 |
Firedancer config |
firedancer.service.j2 |
Firedancer systemd service |
solv.service.j2 |
Solv systemd service |
generate_configs.sh.j2 |
Config generation script |
Geyser Plugin Sources
Both plugins are built from source (no binary downloads):
- Yellowstone gRPC: https://github.com/rpcpool/yellowstone-grpc
- Richat: https://github.com/lamports-dev/richat
Usage
# Deploy a new gRPC Geyser node
ansible-playbook -i inventory mainnet-rpc/init.yml \
-e '{"rpc_type":"Geyser gRPC","solana_version":"3.1.8","yellowstone_grpc_version":"v6.0.0","snapshot_url":"https://..."}'
# Build/update Richat plugin
ansible-playbook -i inventory mainnet-rpc/geyser_richat_build.yml \
-e '{"richat_version":"richat-v8.1.0"}'
No versions.yml required — all variables can be passed via extra_vars.
Interactive Deployment Flow
See AGENT.md for the full step-by-step flow and examples/inventory.yml for output format.
Required Variables
| Variable | Prompt | Validation |
|---|---|---|
server_ip |
"Target server IP?" | Valid IPv4 |
region |
"Server region?" | String |
rpc_type |
"Geyser gRPC or Index RPC + gRPC?" | Geyser gRPC, Index RPC + gRPC |
validator_type |
"Underlying client?" | agave, jito, jito-bam, firedancer-agave |
solana_version |
"Solana version? (default: 3.1.8)" | Semver |
identity_account |
"Node identity pubkey?" | Base58 pubkey |
snapshot_url |
"Snapshot URL? (auto for ERPC)" | URL (cannot be empty for init) |
Plugin Selection (choose ONE)
| Plugin | Version Variable | Source | Output |
|---|---|---|---|
| Yellowstone gRPC | yellowstone_grpc_version |
github.com/rpcpool/yellowstone-grpc | libyellowstone_grpc_geyser.so |
| Richat | richat_version |
github.com/lamports-dev/richat | librichat_plugin_agave.so |
Both are built from source (no pre-built binaries). Build time: ~15-30 min. Only collect the version variable for the selected plugin.
Conditionally Required Variables
| Variable | When Required |
|---|---|
jito_version |
jito/jito-bam types |
firedancer_version |
firedancer types |
shred_receiver_address |
jito/jito-bam (auto by region) |
block_engine_url |
jito/jito-bam (auto by region) |
Optional Variables
| Variable | Default | When Required |
|---|---|---|
ssh_user |
solv |
Always |
port_grpc |
10000 |
Always |
port_rpc |
8899 (ERPC: 7211) |
Always |
limit_ledger_size |
100000000 |
Always |
dynamic_port_range |
8000-8025 |
Always |
allowed_ssh_ips |
— | Strongly recommended (UFW) |
allowed_ips |
— | Optional (UFW) |
Optional: Reference RPC
| Variable | Description | Default |
|---|---|---|
reference_rpc_url |
Reference RPC endpoint for slot sync comparison (e.g., ERPC) | — |
ERPC API keys are free at https://erpc.global — enables full slot sync monitoring during deployment and updates.
Pre-flight: Fresh Server Setup
ansible-playbook -i inventory.yml cmn/add_solv.yml \
-e '{"ansible_user":"ubuntu"}' --become
Deployment Command
All paths relative to skill's ansible/ directory:
cd /path/to/slv-grpc-geyser/ansible/
ansible-playbook -i inventory.yml mainnet-rpc/init.yml \
-e '{"rpc_type":"Geyser gRPC","solana_version":"<version>","richat_version":"<version>"}'
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!