What is Sinker?
Sinker is a two-layer transaction reliability stack for Solana. It combines:- A Rust sidecar that tracks every stage of the transaction lifecycle — from bundle submission to on-chain finalization — using a live Yellowstone gRPC stream.
- An AI agent that makes tip selection, submission timing, and retry decisions grounded in real-time oracle data and historical bundle outcomes.
Start the stack
- Full stack (recommended)
- Sidecar only
- Agent only
[ AGENT ].Prerequisites
Rust sidecar running
The sidecar must be running at
localhost:7777 before the SDK can connect.
See the README for setup.Model API key
Sinker’s AI agent requires a provider key. Set
ANTHROPIC_API_KEY,
OPENAI_API_KEY, GROQ_API_KEY, or XAI_API_KEY in your environment.Pre-signed transaction
The SDK never touches your keypair. Sign the transaction yourself and pass
the base64-encoded wire bytes to
sinker.enqueue().Install
Submit your first transaction
The AI agent fires automatically on the
tx_enqueued SSE event. You don’t need to call submit() manually — the agent selects a tip and submits the bundle.What happens under the hood
Enqueue
sinker.enqueue() POSTs your transaction bytes to /tx/enqueue. The sidecar
assigns a tx_id, fires a tx_enqueued SSE event, and returns immediately.Agent decides
The AI agent receives the SSE event, checks the live tip oracle, reviews
failure history, and selects a tip percentile. It calls
POST /internal/submit
with tx_ids and tip_lamports.Jito bundle
The sidecar builds a Jito bundle (your tx + tip tx), submits it to the block
engine, and starts a background status tracker.