Speed is the entire product.
When a new memecoin mints, the first few minutes are when interesting things happen. Most dashboards poll on a 30-second interval, which is forever in crypto-time. The goal: see new mints within seconds of the on-chain event, with all the metadata needed to make a decision — and pipe it straight to a Discord channel where my watchers already live.
Tight loop, predictable latency, no GC pauses.
I chose Rust over Node because the hot path is small, latency-sensitive, and never sleeps. Tokio handles thousands of concurrent tasks without thread overhead. The binary subscribes to a Solana `transactionSubscribe` WebSocket filtered to the Moonshot program, decodes the event stream, and fans out enrichment work to background tasks.
“I chose Rust over Node because the hot path is small, latency-sensitive, and never sleeps.”
- Tokio + tokio-tungstenite for the WebSocket subscription.
- `solana-client` / `solana-sdk` 1.18.16 for RPC + decoding.
- Serenity for Discord posting (rustls backend, no openssl dep).
- Parses three event types: `BuyEvent`, `SellEvent`, `CreateEvent`. Only create events trigger a post.
Mint → metadata → previous mints → Discord.
On each `CreateEvent`, the binary kicks off two concurrent fetches: the token's metadata from its `uri`, and every other token the creator has minted in the past. Both run as Tokio tasks via `tokio::spawn`, joined with `try_join!`. That second lookup is the actual edge — it lets the channel see in one message whether the creator has 200 prior rug-pulls or is fresh.
Small tools are still worth making.
Not every project needs to be a platform. Sometimes the right answer is one binary, one process, one job — deployable to any Linux box with `cargo build --release` and a webhook URL. Building this taught me how much complexity I usually accept by default, and how good it feels to write something that just does its thing and never wakes anyone up.
“Not every project needs to be a platform.”
built by one person · case study written by the same person