prajjwal

prajjwal@chittori:~$ whoami

Prajjwal Chittori

_

prajjwal@chittori:~$ cat summary.txt

Crypto & payments backend engineer. ex-Stader (founding engineer → $500M+ TVL liquid staking), ex-Visa cross-border payments & stablecoins, now Senior Backend Engineer at EtherFi building card ↔ on-chain settlement. Merged open source across blockchain infra (Optimism, revm, alloy, celestia-node, ethrex) and AI inference (vLLM, SGLang, mistral.rs). Based in George Town, Cayman Islands.

prajjwal@chittori:~$ ls links/

Experience

2021 – now

Backend engineering across crypto and global payments.

EtherFi — Senior Backend Engineer, Cash 2026 – now

Crypto / liquid restaking reconciled with Visa card settlement — real-time authorization, capture & reconciliation, Borrow Mode, and an event-driven cashback pipeline on Kafka.Go · Solidity · EigenLayer · Kafka

Visa — Senior Software Engineer 2022 – 2026

Cross-border payments: Visa Direct A2A, 100+ SWIFT message types, Treasury-as-a-Service across 15 currencies. Led an 8-engineer team on a real-time platform at 2,000+ TPS, 99.98% uptime.Java · Spring · Hazelcast · K8s

Stader Labs — Founding Engineer 2021 – 2022

Rust / CosmWasm smart contracts powering liquidity pools past $500M+ in total value locked across multiple chains; validator analytics over 1M+ nodes.Rust · CosmWasm · TypeScript

Research

3 papers

Published, peer-citable work.

Cache-aware request planning for black-box LLM APIs 2026 · preprint

Cache-Aware Client-Side Request Planning for Black-Box LLM APIs. When you consume an LLM through a paid per-token API you pay for the tokens the server processes, so the only lossless lever a client has is re-ordering requests to hit the provider's prompt cache. Formalizes that design space and ships a greedy prefix-clustering scheduler that shapes request order to maximize cache hits — up to 60% billed-cost reduction on an agentic workload at zero quality loss, Pareto-dominating prompt compression and semantic caching. DOI 10.5281/zenodo.21386594 · pjdurden/cache-aware-request-planning

Executable correctness under KV-cache compression 2026 · preprint

Perplexity Holds, Programs Break: Executable Correctness as a Blind Spot of KV-Cache Compression. KV-cache compression is benchmarked almost entirely on token-overlap and retrieval metrics that never check whether generated code actually runs or a tool call is schema-valid. Introduces kv-exec-bench, an open benchmark measuring code unit-test pass@1 and tool-call JSON-Schema validity under compression, built on NVIDIA's kvpress so any press works unmodified. DOI 10.5281/zenodo.20805562 · pjdurden/kv-exec-bench

StragglerPolicy — decentralized training 2026 · paper

Straggler-Aware Elastic Membership for Decentralized Training. A zero-GPU discrete-event simulator of DiLoCo-style decentralized ML training plus a straggler-aware membership policy for slow-but-alive nodes — 4.59× faster on a persistent-straggler scenario. Published on Zenodo. DOI 10.5281/zenodo.20574905 · pjdurden/churn

Open Source

25 merged · 17 projects

Merged work on the infrastructure other people build on — blockchain & crypto infra first, plus AI inference and ML systems. Star counts are live; open a tile for the actual bug.

vLLM GitHub stars 1 merged

build-correctness fixMerged contribution to vLLM, the standard high-throughput LLM inference & serving engine: fixed a self-contradictory precompiled-flag orthogonality test in the build system. vllm-project/vllm #44942

Meilisearch GitHub stars 1 merged

ranking-rules fixMerged contribution to Meilisearch, the Rust search engine: fixed a ranking-rules ordering bug where placing attributeRank/wordPosition before the words rule silently dropped matching hits. meilisearch/meilisearch #6437

SGLang GitHub stars 1 merged

PD cache-aware routing fixMerged contribution to SGLang, the high-throughput LLM/VLM serving engine: the prefill/decode router's cache-aware routing keyed chat requests on the first message only; routing on the full conversation lifted KV-cache hits from ~69% to ~96% and output throughput from ~678 to ~1078 TPS. sgl-project/sglang #27430

candle GitHub stars 2 merged

batched-inference mask fixesTwo merged contributions to candle, Hugging Face's minimalist Rust ML framework. Qwen3 produced incorrect output for any batch size > 1: the causal mask allocated a batch-independent buffer but shaped it (b, 1, tgt, tgt + offset), and Tensor::from_slice doesn't validate element count against a fully-specified shape — so batch row 0 read the correct mask and every row after it read past the buffer. Fixed by shaping the mask (1, 1, …) and letting the existing broadcast_add apply it across the batch. The follow-up swept the same defect out of the eight sibling models that carried it — qwen3_moe, the quantized Qwen3 pair, glm4_new, quantized_glm4, SmolLM3 and its quantized twin, and Z-Image's text encoder — where it was more exposed: Qwen3's mask path was gated to CPU under the flash-attn feature, while these build the broken mask on every multi-token forward on every backend. Rather than copy the corrected builder eight more times, it centralized build_additive_causal_mask in crate::utils and moved the regression tests there, deleting 306 lines against 189 added. huggingface/candle #3586 · #3879

mcp-go GitHub stars 1 merged

OAuth error-handling fixMerged contribution to mcp-go, the leading Go implementation of the Model Context Protocol (MCP): fixed getServerMetadata returning (nil, nil) on failure instead of an error, removing a silent-failure path for OAuth discovery. mark3labs/mcp-go #904

mistral.rs GitHub stars 2 merged

scheduler & GGUF-loader fixesTwo merged contributions to mistral.rs, the Rust LLM inference & serving engine: fixed reversed FCFS priority in the PagedAttentionScheduler preemption path so the oldest request is preempted last, and validated GGUF special-token ids against the vocab to prevent an out-of-bounds panic on model load. EricLBuehler/mistral.rs #2250 · #2282

Optimism GitHub stars 1 merged

op-wheel metrics fixMerged contribution to Optimism, the OP Stack monorepo powering Ethereum L2s like Base & OP Mainnet: fixed an op-wheel metrics bug where RecordBlockStats wrote block gas twice and left the base-fee gauge unset, and corrected the pre-block status log. ethereum-optimism/optimism #21127

Mooncake GitHub stars 3 merged

startup, SSD-offload & RDMA fixesThree merged contributions to Mooncake, the KV-cache store & transfer engine behind Kimi and used as a disaggregated KV backend by vLLM and SGLang: mooncake_master bound its RPC and HTTP servers to the numeric wildcard 0.0.0.0, which the acceptors resolved through getaddrinfo() — environments that answer EAI_NONAME for numeric literals killed startup with bad address: 0.0.0.0, fixed by pinning the dependency to a revision that parses numeric IP literals directly. And under 32-concurrency SSD offload, two flows sharing a KV prefix block hit the bucket backend's deliberate single-writer-per-key OBJECT_ALREADY_EXISTS rejection, which FileStorage::OffloadObjects treated as fatal — aborting the whole offload and leaving the decode node with INVALID_KEY floods; duplicate-key rejection is now a recoverable per-bucket condition. The third fix stopped an endpoint rebuild storm: when a QP reported an mlx5 local completion fault, the slice was handed to the other bonded RNIC, which had no endpoint for that peer NIC and so ran a full handshake with fresh QP numbers — and on recurrence handed it straight back, two RNICs ping-ponging the same slices at worker-loop speed. Neither brake applied: the local-failure branch deliberately never marked the rail failed, and the context-health counter is cleared by any concurrent healthy completion. The failing local-to-peer rail is now charged an error in the existing rail monitor, so the threshold that the remote-failure path already uses pauses it after five faults and auto-recovers. kvcache-ai/Mooncake #2919 · #2967 · #3387

AIBrix GitHub stars 2 merged

KV-event decoder & eviction fixesMerged contribution to AIBrix, the vLLM project's Kubernetes-native LLM-serving control plane: the ZMQ KV-event decoder dropped group_idx/medium/lora_name from vLLM's BlockStored event, causing false prefix-cache matches on hybrid-attention models; and made the KV-event indexer purge a pod's cached prefixes on AllBlocksCleared so evicted blocks are no longer served as stale cache hits. vllm-project/aibrix #2384 · #2385

revm GitHub stars 1 merged

EVM interpreter fixMerged contribution to revm, the Rust EVM behind Foundry & reth: reworked pop_address to use IntoAddress, removing a const-eval panic path in the stack interpreter. bluealloy/revm #3735

Envoy AI Gateway GitHub stars 2 merged

MCP proxy & token-usage fixesTwo merged contributions to Envoy AI Gateway, the Envoy-based gateway for AI/LLM traffic: the MCP proxy failed initialize with a 500 when a backend's SSE response opened with a keep-alive / empty data: event before the JSON-RPC result (seen on some FastMCP backends), so the SSE parser now skips non-response events instead of treating them as a fatal parse error; and the Anthropic translator dropped the input/cache token usage reported on message_delta, leaving it out of the final usage totals, now fixed to merge it in. envoyproxy/ai-gateway #2267 · #2292

celestia-node GitHub stars 1 merged

DA layer test-infraMerged contribution to celestia-node, the Go node for the Celestia data-availability layer: unified the header TestSuite constructors behind functional options, cutting duplicated test setup. celestiaorg/celestia-node #5041

alloy GitHub stars 1 merged

sol! macro derive fixMerged contribution to alloy, the Rust Ethereum-types & sol! toolkit used across Foundry, reth & the wider Rust EVM ecosystem: the sol! macro silently dropped Debug/PartialEq/Eq/Hash derives on the event/error enums it generates for contracts with overloaded events (e.g. Uniswap V3's two Swap events), because synthetic _N-suffixed variant names didn't resolve; fixed it to compute derivability from the underlying parameter types. alloy-rs/core #1118

ethrex GitHub stars 1 merged

Ethereum client startup fixMerged contribution to ethrex, the Rust Ethereum L1/L2 execution client by LambdaClass: replaced a too-broad datadir non-empty check with an actual-DB probe, so unrelated files (e.g. an EthDocker JWT secret in the same directory) no longer block a fresh node from booting. lambdaclass/ethrex #6786

llguidance GitHub stars 2 merged

constrained-decoding fixesTwo merged contributions to llguidance, the constrained-decoding engine behind structured / JSON-Schema output in vLLM, SGLang & llama.cpp: fixed JSON-Schema multipleOf rejecting negative multiples, and made max_tokens=0 rules compile to the empty string. guidance-ai/llguidance #357 · #356

outlines-core GitHub stars 2 merged

RFC3339 regex fixesTwo merged contributions to outlines-core, the Rust JSON-Schema to regex core behind Outlines' structured generation. The date format regex applied a uniform 01–31 day range regardless of month, so constrained decoding could emit dates that do not exist, such as 2022-02-31 and 2022-04-31; fixed by making the day range month-aware — 30-day months cap at 30 and February at 29 — deliberately leaving leap years unvalidated to keep the compiled regex bounded. The date-time format failed the other way: it accepted only a Z suffix, so valid RFC3339 numeric offsets such as 2021-01-01T00:00:00+05:30 were rejected outright; added the (+|-)HH:MM offset and kept it optional so offset-less strings still match. dottxt-ai/outlines-core #258 · #257

Ray GitHub stars 1 merged

autoscaler starvation fixMerged contribution to Ray, the distributed compute framework underneath much of the ML training and serving stack: Autoscaler v2 silently lost launch errors whenever one launch request spanned more than one node type. The reconciler keyed its error lookup on the launch request_id alone, but a single request carries a whole shape, and both the node-provider and KubeRay paths fan that shape out into one LaunchNodeError per node type sharing that id. The sibling errors overwrote each other in the dict and only the last one survived, so every other node type never reached ALLOCATION_FAILED. Those instances sat in REQUESTED until the request timeout fired, holding max_concurrent_launches capacity, and stayed eligible for allocation in later reconcile passes, letting a stale instance claim a Pod that was launched for a different request. Fixed by keying on the pair that actually identifies a launch error, (request_id, node_type), which also folds away the now-redundant node-type guard at the call site. ray-project/ray #65299

Earlier on-chain work

CoinSwap — CosmWasm + Terraswap DEX 2022

DEX swap contract for LUNA/UST/CW20 tokens, with a gas-fee analysis tool for the Terra blockchain. pjdurden/CoinSwap

Gas-Fee Benchmark — Terra/CosmWasm 2022

Benchmarking contract measuring the gas cost of storage patterns on Terra/CosmWasm — the analysis behind Stader's on-chain gas optimization. pjdurden/Gas_analysis

Companies Founded

2 ventures

Things I started from zero and shipped to real customers.

KuruX Enterprises 2025

A sustainable-cleaning consumer brand (NAMELESS / WipeZilla), built solo end to end — manufacturing, compliance, listings. ₹2L revenue in month one; now run by family. wipezilla.in

Bizpedia 2024

A free, open-source wiki for the world of business — structured, contributor-driven reference. bizpedia.org

Creator

22K+ following · 20M+ views

Short-form philosophy and long-form takes — an audience built on one consistent format.

Series What I Think About the Top 50 Fintech Companies of All Time Vision over financials — 50 companies, what each got right and wrong, and the founders behind them. →
@prajjwalsinghchittori — philosophy, short-form active

An English quote, explained in Hindi. 22K+ followers and 20M+ views across Instagram & YouTube — one format, run with relentless consistency. Instagram · YouTube

Side Projects

3 builds

Smaller things built to learn or to prove a point.

nanoserve — LLM inference engine 2026

A from-scratch LLM inference engine, built in public over 100 days. Paged KV cache, continuous batching, and a hand-written Triton paged-attention kernel — the core ideas behind vLLM in ~2k readable lines.PyTorch · Triton · CUDA pjdurden/nanoserve

Veri5 2024 – 25

Real-time identity & account-verification API for EU cross-border payments — distributed caching at 1,000+ req/sec, full observability.Spring · Redis · Hazelcast pjdurden/veri5-mvp

KuruX — trading simulator 2023

A private-equity trading simulator with a hand-built order book, featured by Y Combinator Startup School.

Competitive

Competitive programming

Codeforces Expert; ~8,000 problems solved across Codeforces, CodeChef, LeetCode, UVa and more. codeforces/pjdurden

Chess

FIDE-registered player, 1600+ rating.

Writing