Skip to content
View pjdurden's full-sized avatar
🤒
softmax is all you need
🤒
softmax is all you need

Block or report pjdurden

Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
pjdurden/readme.md

Prajjwal Chittori

Crypto & Payments Backend Engineer - DeFi & Liquid Restaking · On-chain Settlement · Card & Payment Rails

Liquid staking & restaking  ·  On-chain ⇄ card settlement  ·  Cross-border payments  ·  Stablecoins  ·  Smart contracts (EVM / Solana / CosmWasm)

Website LinkedIn Codeforces Expert Email

$ 25 merged upstream PRs · 17 projects · 3 papers · $500M+ TVL shipped


Summary

Backend engineer specializing in the intersection of crypto infrastructure and traditional payments - systems where on-chain state must reconcile with real-world money movement to the cent.

My work spans both sides of that seam: founding-team engineer at a liquid-staking protocol that scaled past $500M+ in staked assets, four years on cross-border payments and the stablecoin initiative at Visa, and now card and vault products at ether.fi - a non-custodial Visa crypto card built on liquid-restaking infrastructure.

  • Currently: Senior Backend Engineer at ether.fi - Cash (card) & Vault products
  • Core stack: Go, Rust, Solidity, TypeScript, Java/Spring, Ethereum/EVM, EigenLayer, Kafka, PostgreSQL, Redis
  • Education: B.Tech, Computer Science - Delhi College of Engineering (now Delhi Technological University)
  • Focus areas: liquid staking & restaking, on-chain/off-chain settlement, card & payment rails, cross-border payments, stablecoins, smart contracts (EVM / Solana / CosmWasm) - plus AI inference infrastructure (vLLM) on the open-source side

Experience  2021 - now

Backend engineering across crypto and global payments.

ether.fi - Senior Backend Engineer, Card & Vault Products  2026 - Present

Building ether.fi Cash, a non-custodial Visa crypto card on liquid-restaking infrastructure where users spend ETH/USDC while their assets continue earning restaking yield.

  • Own real-time settlement bridging Visa rails and on-chain vaults (authorization, capture, reconciliation).
  • Built the Borrow Mode backend - USDC borrowing against eETH collateral via lending-pool integration.
  • Designed an event-driven cashback pipeline (wETH rewards) on Kafka.
  • Hardened KYC/AML and risk monitoring with chain-analytics providers; extended multi-chain support across Ethereum L1 and L2s.

$ Go · Solidity · Ethereum · EigenLayer · Kafka · PostgreSQL · Redis

Visa - Senior Software Engineer, Payments & Crypto Initiative  2022 - 2026

Worked across traditional cross-border payments and Visa's stablecoin / crypto initiative - the bridge between card networks and digital assets.

  • Led an 8-engineer team on a real-time payments platform (monolith plus eight microservices) sustaining 2,000+ TPS at 99.98% uptime.
  • Delivered Treasury as a Service for the APAC hub - 15 currencies, clients in 60+ countries, powering roughly 80% of APAC liquidity flows through Visa Direct A2A.
  • Built the Network Validations Framework - configurable payer/beneficiary identity checks across 100+ SWIFT message types.
  • Prototyped on-chain payment settlement in Solidity and Solana as part of the crypto/stablecoin track.

$ Java · Spring Boot · Solidity · Rust · RabbitMQ · Hazelcast · Docker · Kubernetes

Stader Labs - Software Engineer, Founding Team  2021 - 2022

Joined as an intern during the final years of my degree at Delhi College of Engineering and grew into a founding member of a ~7-person team building a multi-chain liquid-staking protocol.

  • Built Rust / CosmWasm smart contracts powering liquidity pools that scaled past $500M+ in staked assets across multiple chains.
  • Led gas-fee analysis and optimization - benchmarking storage and swap costs on Terra/CosmWasm to keep contract execution economical at scale.
  • Built a validator analytics platform monitoring 1M+ nodes (React, MongoDB, Ethereum APIs) and APR dashboards.
  • Designed cross-chain architecture and on-chain/off-chain synchronization pipelines.

$ Rust · CosmWasm · TypeScript · Python · React · MongoDB


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 - straggler-aware 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 that existing decentralized-training stacks don't handle. 4.59x faster than the baseline on a persistent-straggler scenario, validated against a torch.distributed/gloo DiLoCo loop.

DOI · pjdurden/churn


Open Source  25 merged · 17 projects

Merged work on the infrastructure other people build on. Star counts are live; expand a project for the actual bug.

vLLM
vLLM

stars
1 merged
Meilisearch
Meilisearch

stars
1 merged
SGLang
SGLang

stars
1 merged
candle
candle

stars
2 merged
mcp-go
mcp-go

stars
1 merged
mistral.rs
mistral.rs

stars
2 merged
Optimism
Optimism

stars
1 merged
Mooncake
Mooncake

stars
3 merged
AIBrix
AIBrix

stars
2 merged
revm
revm

stars
1 merged
Envoy AI Gateway
Envoy AI Gateway

stars
2 merged
celestia-node
celestia-node

stars
1 merged
alloy
alloy

stars
1 merged
ethrex
ethrex

stars
1 merged
llguidance
llguidance

stars
2 merged
outlines-core
outlines-core

stars
2 merged
Ray
Ray

stars
1 merged
vLLM  vllm-project/vllm

The standard high-throughput LLM inference & serving engine - build-correctness fix in the precompiled-flag test suite (#44942).

Meilisearch  meilisearch/meilisearch

Rust search engine - fixed a ranking-rules ordering bug that silently dropped matching hits (#6437).

SGLang  sgl-project/sglang

High-throughput LLM/VLM serving engine - fixed the prefill/decode router's cache-aware routing keying 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 (#27430).

candle  huggingface/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 claimed a (b, 1, tgt, tgt + offset) 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 (#3586). 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, since Qwen3's mask path was gated to CPU under flash-attn while these build the broken mask on every multi-token forward on every backend; centralized as utils::build_additive_causal_mask rather than copied eight more times, deleting 306 lines against 189 added (#3879).

mcp-go  mark3labs/mcp-go

The leading Go implementation of the Model Context Protocol (MCP) - fixed getServerMetadata returning (nil, nil) instead of an error, closing a silent-failure path in OAuth discovery (#904).

mistral.rs  EricLBuehler/mistral.rs

The Rust LLM inference & serving engine: fixed reversed FCFS priority in the PagedAttentionScheduler preemption path so the oldest request is preempted last (#2250), and validated GGUF special-token ids against the vocab to prevent an out-of-bounds panic on model load (#2282).

Optimism  ethereum-optimism/optimism

The OP Stack monorepo powering Ethereum L2s (Base, OP Mainnet) - fixed an op-wheel metrics bug that wrote block gas twice and left the base-fee gauge unset (#21127).

Mooncake  kvcache-ai/Mooncake

The KV-cache store & transfer engine behind Kimi, 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(), so 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 (#2919), and fixed an SSD-offload duplicate-key storm under concurrency: when two offload flows shared a KV prefix block, the bucket backend's intentional single-writer-per-key OBJECT_ALREADY_EXISTS rejection was treated as fatal by FileStorage::OffloadObjects, aborting the whole offload and leaving the decode node with INVALID_KEY floods; made duplicate-key rejection a recoverable per-bucket condition (#2967). The third fix stopped an RDMA 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, then handed it straight back when the fault recurred - two RNICs ping-ponging the same slices at worker-loop speed, with neither brake applying, since 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 the remote-failure path already uses pauses that path after five faults and auto-recovers it (#3387).

AIBrix  vllm-project/aibrix

The vLLM project's Kubernetes-native LLM-serving control plane - fixed the ZMQ KV-event decoder dropping group_idx/medium/lora_name from vLLM's BlockStored event, which caused false prefix-cache matches on hybrid-attention models (#2384), 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 (#2385).

revm  bluealloy/revm

The Rust EVM behind Foundry & reth - removed a const-eval panic path in the stack interpreter (#3735).

Envoy AI Gateway  envoyproxy/ai-gateway

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

celestia-node  celestiaorg/celestia-node

The Go node for the Celestia data-availability layer - unified the header TestSuite constructors behind functional options (#5041).

alloy  alloy-rs/core

The Rust Ethereum-types & sol! toolkit used across Foundry, reth and 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 (#1118).

ethrex  lambdaclass/ethrex

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

llguidance  guidance-ai/llguidance

The constrained-decoding engine behind structured / JSON-Schema output in vLLM, SGLang and llama.cpp - fixed multipleOf rejecting negative multiples (#357) and made max_tokens=0 rules compile to the empty string (#356).

outlines-core  dottxt-ai/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 impossible dates such as 2022-02-31 and 2022-04-31; made the day range month-aware, deliberately leaving leap years unvalidated to keep the compiled regex bounded (#258). The date-time format had the mirror problem in the other direction: it accepted only a Z suffix, so RFC3339 numeric offsets such as 2021-01-01T00:00:00+05:30 were rejected outright; added the (+|-)HH:MM offset while keeping it optional so offset-less strings still match (#257).

Ray  ray-project/ray

The distributed compute framework underneath much of the ML training and serving stack - Autoscaler v2 silently lost launch errors whenever a single launch request spanned more than one node type. The reconciler keyed its error lookup on the launch request_id alone, but one 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 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 staying eligible for allocation in later reconcile passes, which let a stale instance claim a Pod launched for a different request. Fixed by keying on the pair that actually identifies a launch error, (request_id, node_type) (#65299).


Personal Projects  8 builds

Smaller things built to learn or to prove a point.

kv-canary  KV-cache compression

A canary for silent KV-cache-compression failures - functional accuracy (code execution / tool-calls) vs perplexity under quantization & token eviction, scored by a Silent Degradation Score. pjdurden/kv-canary

churn - StragglerPolicy  decentralized training

Deterministic discrete-event simulator of elastic-membership decentralized ML training, plus the straggler-aware membership policy behind the paper above. pjdurden/churn

friendly-neighbourhood-6502  bare-metal systems

Cycle-accurate 6502 CPU emulator down to bus/processor pins, addressing modes, and internal functions, with an OpenGL / Pixel Game Engine graphics frontend. pjdurden/friendly-neighbourhood-6502

CoinSwap  CosmWasm + Terraswap

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

Gas-Fee Benchmark  cw-storage-plus / Terraswap

Benchmarking contract measuring gas costs of storage patterns on Terra/CosmWasm. pjdurden/Gas_analysis

Solana Payment System  Rust on Solana

Rust payment-settlement program deployed on Solana. pjdurden/Solana-PaymentSystem-Visa

Stader APR Dashboard  React

React dashboard surfacing staking APR and validator analytics. pjdurden/Stader-Apr-Dashboard-

Veri5  payments identity API

Real-time identity and account verification API for cross-border payments. pjdurden/veri5-mvp


Technical Skills  stack

Languages, chains, infra and ML stack

Languages

Go Rust Solidity TypeScript Java Python C++

Blockchain & Web3

Ethereum EigenLayer CosmWasm Solana Foundry

Backend & Infrastructure

Spring Boot Kafka PostgreSQL MongoDB Redis Docker Kubernetes AWS

AI / ML Systems

vLLM PyTorch torch.distributed DiLoCo Decentralized Training


Competitive Programming  Codeforces Expert

Ratings, contests and mentoring

Achieved Codeforces Expert during university (pre-2022, before AI coding assistants) - a credential earned through unassisted algorithmic problem-solving under contest conditions.

  • Codeforces - Expert · pjdurden
  • CodeChef - peak rating 1890 · pjdurden
  • LeetCode - peak rating 1679 · Pjdope
  • Code-A-Thon - Rank 5 (College Rank 1)
  • Cleared the Facebook Hacker Cup Qualification Round (2020); Google Kick Start Round B (2021).
  • Mentored 300+ students in algorithms and software engineering through GirlScript.

Pinned Loading

  1. nanoserve nanoserve Public

    An AI inference engine from scratch. Like nanoGPT, but for serving.

    Python 4

  2. vllm-project/vllm vllm-project/vllm Public

    A high-throughput and memory-efficient inference and serving engine for LLMs

    Python 90.7k 21.5k

  3. A-Comparative-Analysis-of-YOLOv5-RCNN-and-R-FCN-with-Sparsification-of-YOLOv5-Final-Year-Project A-Comparative-Analysis-of-YOLOv5-RCNN-and-R-FCN-with-Sparsification-of-YOLOv5-Final-Year-Project Public

    Final Year Project based on A Comparative Analysis of YOLOv5, RCNN, and R-FCN with Sparsification of YOLOv5

    Jupyter Notebook

  4. friendly-neighbourhood-6502 friendly-neighbourhood-6502 Public

    Computer Architechture emulator for 6502 processor. It emulates all the bus and processor pins and also the internal adressing modes and functions. Implements OPEN GL , Universal CRT , GLUT, Pixel …

    C++ 3

  5. kv-canary kv-canary Public

    A canary for silent KV-cache-compression failures: functional accuracy (code/tool-calls) vs perplexity under quantization & token eviction, scored by a Silent Degradation Score.

    Python 1

  6. kv-exec-bench kv-exec-bench Public

    Python 1