Split validator setup

This page describes a split validator setup that minimizes missed checkpoints (and thus maximize staking rewards) and makes running mev-bor virtually risk-free to the point where it might be a good idea to use this setup regardless of Marlin.

A validator node consists of two components, Heimdall and Bor working in tandem. While a validator usually has both of them set up to sign, it is important to note that they are independent layers and can work even when only one of them is signing.

Anatomy of checkpoints



On receiving a checkpoint, Heimdall communicates with Bor to verify the blocks in the checkpoint and signs it if everything is verified. Note that this process only needs Bor to be receiving blocks, not producing them.

Anatomy of block production


Bor continuously communicates with Heimdall to fetch details of the next span and events to commit on-chain. With this data, it can figure out when its turn is going to come and produce valid blocks. Note that this process only needs Heimdall to be reading stake data from Ethereum, not signing/writing checkpoints.

Split setup

The above facts lead naturally to a split validator setup to run mev-bor while not running the risk of missing checkpoints:


The first node runs vanilla bor + heimdall in the existing validator setup except, the bor is not creating any blocks. This is sufficient to make Heimdall sign checkpoints and earn staking rewards. The second node runs Heimdall in non-signing mode and mev-bor. This isolates mev-bor from the checkpoint signing node and gives freedom to customize bor without affecting staking rewards.