CASE STUDY: PROTOCOL LEAD
Movement Labs logo

Movement Labs

Second hire at Movement Labs. Designed and led the M2 rollup (including a zero-knowledge fraud-proof path verified on the Risc0 VM), took AptosBFT consensus from unit tests to live mainnet validators, and built the USDCx bridge, while managing three engineering teams.

February 2024 – February 2026RustGolangMoveRisc0 zkVM

Building the rollup from the second hire

I joined Movement Labs as its second hire, which meant the M2 rollup didn't have an existing architecture to extend: it had a blank page. I designed and architected the rollup's settlement, verification, and fraud-prevention model, which supports several different flavours of finality depending on the guarantee a given path needs. We went from that blank page to a live testnet in 3 months.

The one I built out in most depth is ZKFP (zero-knowledge fraud proofs): when a state transition on the rollup is disputed, we generate a proof of the Aptos Move execution that produced it, and verify that proof using the Risc0 zkVM rather than trusting the sequencer's claim or forcing a full replay. That keeps the fraud-proof window meaningful without requiring every node to re-execute every transaction.

AptosBFT consensus, unit tests to live validators

In parallel, I implemented, tested, and rolled out AptosBFT consensus in production, a Byzantine fault-tolerant protocol where a validator set has to agree on the same ordering of transactions even if some validators are faulty or offline. That's not a system you get right by staring at a spec: it involved rehearsing validator ceremonies (the coordinated process of bringing a new validator set online) and debugging live consensus problems in production, the same code path carried from its first unit test through to real validator operators running it on mainnet infrastructure.

Testnet peaked at 3 million transactions a day before we launched mainnet. After launch, I built and implemented the USDCx bridge (the asset bridge moving USDC between layers) and moved into managing the team.

Running the team

I used Golang extensively to drive our testing effort: internal tools for replaying client transactions and running soak and load tests, catching the failure modes that only show up under sustained, realistic traffic rather than a quick smoke test.

Day to day, I managed three teams (Engineers, Infrastructure, and Research), running monthly 1:1s, performance reviews, coaching for mid-level and junior engineers, and hiring.

BUSINESS IMPACT
Testnet peak
3,000,000 tx/day
≈ sustained throughput
~35 tx/sec average
Blank page to testnet
3 months
From blank page to mainnet
~2 years

Chains don't win integrations on a whitepaper. They win them on proof they can hold real throughput. 3 million transactions a day works out to roughly 35 transactions a second sustained, before accounting for the bursts that actually define a peak day; that's the number every partner conversation came back to, because it's the difference between "we think this will scale" and a load test they can point to. Hitting it on testnet, ahead of mainnet, is what turned architecture decisions into a chain other teams were willing to build on.

M2 rollup: ZKFP settlement path
Aptos Move execution
→
Fraud proof generated
→
Risc0 zkVM verification
→
Settlement finalised
OUTCOME
→Testnet ran at a peak of 3M transactions/day ahead of mainnet launch.
→AptosBFT consensus went from unit tests to production validator ceremonies with no rewrite in between.
→USDCx bridge shipped and the engineering, infra, and research teams scaled under direct management.
© 2026 Entropy Tech Ltd. · Company No. 14946444 · UK Registered Company