Skip to content

protocol rust engineer

Poulav
Bhowmick

I work on core blockchain protocols. Mostly the parts that have to be right every few seconds: consensus, preconfirmations, and the p2p layer holding it together.

01

About

I started programming in 7th grade with Visual Basic, then Java a couple of years later. My first two years of university went into full-stack JavaScript, two startup internships, four hackathons, and grants from Solana and Starknet.

Then I got curious about what actually happens after you submit a transaction, and that question is what pulled me down into the protocol itself. A friend pointed me at the Ethereum Protocol Fellowship. I studied through the EPF study group, didn't get selected the first time, kept contributing permissionlessly anyway, and got in on the next round.

Since then I've spent a year and a half in protocol teams: Lighthouse through the fellowship, Nethermind on Taiko's preconfirmation sidecar and Obol's DVT, then the BSV Association on their Rust SDK. I graduated in June 2026, so right now I'm looking for the next team to build with. If you work on consensus, p2p or anything close to the metal, I'd like to hear from you.

I wrote my first Rust in August 2024 for a Solana hackathon and it stuck, especially after two years of JavaScript. Contributing to Reth is where it really clicked (huge shoutout to Matthias Seitz). After that it was the Rust book, a steady stream of open source contributions across client teams, and projects of my own.

Outside of that: chess, photography and video editing, long walks in places I haven't been before, and FC Barcelona.

02

Experience

May – Jun 2026

Rust Dev Intern

BSV Association

  • Worked on the BSV Rust SDK, the SPV wallet and the BRC-100 standard.
  • Built the transaction building and signing modules for the Rust SDK, cutting memory overhead and tightening up the cryptographic paths.

Jan – Apr 2026

Protocol Developer Intern

Nethermind

  • Catalyst, the preconfirmation sidecar behind Taiko Alethia. Core protocol functionality in Rust: validator registration, lookahead disputes, building L2 blocks out of the mempool, and the p2p layer that carries preconfirmations.
  • Pluto, the Rust implementation of Obol's distributed validator protocol, on reliability and coordination.
  • Implemented DKG flows, and wrote the validator and MEV integration test suites to harden the client before the mainnet rollout.

Jun – Nov 2025

Ethereum Protocol Fellow

Ethereum Foundation × Lighthouse

  • Selected as 1 of 20 fellows out of 1,200+ applicants.
  • Implemented a memory-aware state cache to replace Lighthouse's count-based LRU, so a node degrades gracefully instead of running out of memory during non-finality. Validated with tracing, criterion benchmarks and property tests (PR #7803).
  • Added slot-aware dynamic delay for block reconstruction, so it adapts to conditions on mainnet and testnets.
  • Hardened libp2p Identify and Ping behaviour and peer lifecycle logging, and wrote repros for flaky tests.
  • Worked on SSZ serialization and consensus-critical paths, and wrote attestation-handling benchmarks to find the hotspots.

Jun 2024 – Aug 2025

OnlyDust Fellow

Open source program

  • Selected as 1 of 40 out of around 500 participants.
  • Rust backends with Actix and SQLx, integration tests, Docker, Nginx load balancing. This is where I learned to write production Rust instead of hobby Rust.

2024

Grant recipient

Starknet Foundation & Solana

  • Seed grant from the Starknet Foundation and a place in the Argent Telegram Accelerator, for StarkFinder.
  • Solana × CoinDCX InstaGrants via Superteam, for MidoFinance.

Aug – Oct 2024

Backend Developer

Invisible Studios

  • Production APIs with real-time data sync. Cut p95 API latency by around 30% by tuning query plans and adding the indexes that were missing.
03

Selected work

01

Erebus

Shielded settlement infrastructure for AI agents.

2026, ongoing

Coordination and shielded settlement infrastructure for AI agents. Two agents open an encrypted channel carried in privacy-pool note salts, exchange structured offers over it, and settle atomically through Starknet's STRK20 shielded pool. The accepted offer and the payment are a single proven state transition, so there's no gap where one side has agreed but never paid. Wire v3 scopes disclosure to one deal and one named recipient instead of handing over a whole channel key.

  • Wire v3 encrypts authenticated deal records under AES-256-GCM-SIV, which removes v2's fixed salt-shape classifier. Measured against live Sepolia transactions that classifier now scores 0.5000 balanced accuracy, which is chance.
  • Selective disclosure is scoped to one deal and one named recipient with an explicit expiry. It exports no parent channel key and grants no spending authority, unlike the v1 and v2 grants it replaces.
  • Verified end to end in two bounded mainnet canaries: shield, MCP negotiation, atomic settlement, reconciliation, an observer test and scoped disclosure, across 0.8/0.2 and 0.6/0.4 payment/change splits.
  • v0.1.0 ships as an installable binary exposing ten MCP tools, with Rust, Python and TypeScript SDKs over Cairo contracts.

Unaudited and experimental, with no external security review. An observer holding no key recovers nothing from a settlement, which is demonstrated rather than asserted, but the fact that a channel was opened and with whom is still public.

  • Rust
  • Python
  • Cairo
  • Starknet
  • MCP
02

Gossimini

Gossipsub, small enough to read.

2025

A CLI pub/sub node on libp2p for stress-testing gossip. It walks the topic mesh, backoff and ack paths, simulates N peers under chaos (drops and partitions), and reports rebroadcast and fanout metrics. Multiple nodes publish to topics and the network gossips them between themselves.

  • Rust
  • libp2p
  • async
03

merkle-rs

Proofs from first principles.

2025

A Merkle tree in Rust with SSZ-style hashing: inclusion and consistency proofs, property and fuzz tests, and a CLI with fixtures so you can verify something quickly.

  • Rust
  • Cryptography
  • SSZ
04

Operating system in Rust

Systems programming from the metal up.

Work in progress

A minimal x86-64 kernel: bootloader setup, paging, interrupt handling, custom memory management and basic task scheduling. Written to understand kernel-level concurrency, not to ship anything.

Private repository
  • Rust
  • x86-64
  • Kernel
05

ethvm

Version management for clients.

Work in progress

A Rust CLI for managing Ethereum client versions, built around Lighthouse, for anyone who runs more than one client at a time.

  • Rust
  • CLI
04

Open source

Where I've spent my time in other people's codebases. Numbers are pull requests; each repo links to the full list of mine.

  • stellar-private-payments

    Nethermind

    Shielded payments on Stellar

    • spp disclosure generate and spp disclosure verify. Selective disclosure already worked in the SDK and the web app, but on the native prover, prove_disclosure and verify_disclosure_proof were stubs that bailed out with 'disclosure proving is not configured for this prover'. The wasm worker in sdk/web was the only real implementation. I filled in the native path and put the CLI on top of it, so a payment can be proven to a third party from a terminal without opening up the rest of the history. Also fixed the stale docs around DisclosurePublicInputs and DisclosureVerificationReport (#479).
    • spp notes, which lists the notes the local wallet owns: commitment, pool, asset, amount, leaf index and the ledger each note was created in, with explorer links, filterable by pool and by --spent or --unspent (#524).
    • Chased undefined behaviour under Miri: broke a UB timeout down into groups to find it (#297), fixed the follow-ups (#309), and skipped an ethnum Stacked Borrows false positive in the pool tests (#262).
    • Fixed onboarding so old releases point at the current config, and gave the CLI a default bootnode URL (#447, #448).
  • lighthouse

    Sigma Prime

    Ethereum consensus client in Rust

    • Made the maximum column reconstruction delay a function of slot time instead of a fixed one-second bound, so it adapts to networks with different slot lengths (#8067, #7702).
    • Added SSZ responses to the HTTP API endpoints (#8907).
    • Fixed custody backfill sync reporting wrong time estimates (#8291).
    • Memory-aware state caching to replace the count-based LRU, so a node degrades under memory pressure instead of being OOM killed during non-finality. This was my fellowship project and it isn't merged; measuring BeaconState size accurately turned out to cost more than the cache saved (#7803).
    • Smaller things along the way: a real error message on the light client bootstrap endpoint (#7597), slots-per-epoch in the Deneb time calculation (#7458), stray fields in logs (#8009).
  • reth

    Paradigm

    Modular execution layer in Rust

    • Networking: an option for dispatching range updates to a remote peer (#16776), the socket address attached to discovery errors so failures are traceable (#16659), and TransactionsManagerConfig construction pulled out into its own function (#14645).
    • Trie: inverted provider access in the sparse trie (#14662), moved HashedPostState down into trie-common (#14230), and chunked the incremental root stage into a range loop (#16178).
    • Made MultiConsumerLruCache track in-memory usage rather than entry count, the same idea I later took to Lighthouse (#14034).
    • Plumbing that made the node easier to extend: EventSender on FullNode (#14268), BeaconConsensusEngineHandle on RpcHandle (#14348), typed L1BlockInfoError helpers (#14326), simplified sequencer forwarding (#14386).
  • kona

    OP Labs

    OP Stack components in Rust

    • Replaced the unbounded channels in the kona-service actors with bounded ones, so backpressure exists instead of memory growing until something falls over (#2045).
    • Made failures visible: errors raised during NodeActor::start are propagated rather than swallowed (#2322), and the RPC actor returns an error instead of panicking when it can't build (#1709).
    • Supervisor: a method to fetch the super head in a single transaction (#2140), and a chain_id field on ExecutingDescriptor (#2173).
    • p2p: tracked how long peers stay connected to the libp2p swarm (#1944), and restored the publish channel in the NetworkActor after it went missing (#1910).
  • catalyst

    Nethermind

    Preconfirmation sidecar for the Taiko based rollup

    • Published preconfirmation commitments, and wired that publish path into the permissionless node (#868, #873).
    • Sent Shasta proposals to the permissionless node, and made NodeConfig dynamic for Shasta (#883, #815).
    • Checked the epoch boundary for the operator cache and for slot timestamps, which is where the lookahead goes wrong if you get it lazy (#890).
    • Bounded blob size and returned a proper error rather than failing later in the pipeline (#906).
  • pluto

    Nethermind × Obol

    Obol's distributed validator protocol in Rust

    • Implemented the DKG flows for distributed key generation between operators.
    • Wrote the validator and MEV integration test suites to harden the client ahead of the mainnet rollout (#286, #300).
    • Replaced string-typed file handling with real paths (#287), and routed the p2p relay log level through the tracing filter (#555).
  • rust-libp2p

    libp2p

    The p2p networking stack most of these clients are built on

    • Fixed a leak in the stream module: deregistered streams are now garbage-collected in Shared::accept instead of accumulating (#5999).
    • Removed async-std from the uds transport and moved the multistream-select tests to tokio, part of dropping async-std across the crate (#6060, #6057).
  • revm

    bluealloy

    Rust implementation of the EVM

    • Added CallInput::bytes(ctx), and replaced the raw input Bytes at the call sites that needed it (#2507, #2453).
    • Swapped the SpecId enumn derive for num_enum (#2420).
  • anchor

    Sigma Prime

    Rust implementation of the SSV protocol

    • Validate SignedSSVMessage on SSZ-decoded network messages, so a malformed message from a peer is rejected at the boundary rather than deeper in (#853).
  • alloy

    alloy-rs

    Rust toolkit for the EVM

    • Removed the payload error type and cleaned up what depended on it (#2084).
  • helix

    Gattaca

    MEV-boost relay

    • Removed the Electra code path once it was no longer needed (#391).
05

Writing

06

Contact

I'm looking for my next role right now, so if you're hiring for protocol or systems work in Rust, I'd love to talk. Otherwise I'm always up for a conversation about consensus clients, preconfirmations, or why based rollups are worth the trouble. Email gets to me fastest.

bpoulav@gmail.com

Elsewhere

Based in

Kolkata, India