  Pilotfish is the first scale-out blockchain execution engine able to harness
any degree of parallelizability existing in its workload. Pilotfish allows each
validator to employ multiple machines, named ExecutionWorkers, under its
control to scale its execution layer. Given a sufficiently parallelizable and
compute-intensive load, the number of transactions that the validator can
execute increases linearly with the number of ExecutionWorkers at its disposal.
In addition, Pilotfish maintains the consistency of the state, even when many
validators experience simultaneous machine failures. This is possible due to
the meticulous co-design of our crash-recovery protocol which leverages the
existing fault tolerance in the blockchain's consensus mechanism. Finally,
Pilotfish can also be seen as the first distributed deterministic execution
engine that provides support for dynamic reads as transactions are not required
to provide a fully accurate read and write set. This loosening of requirements
would normally reduce the parallelizability available by blocking
write-after-write conflicts, but our novel versioned-queues scheduling
algorithm circumvents this by exploiting the lazy recovery property of
Pilotfish, which only persists consistent state and re-executes any optimistic
steps taken before the crash. In order to prove our claims we implemented the
common path of Pilotfish with support for the MoveVM and evaluated it against
the parallel execution MoveVM of Sui. Our results show that Pilotfish provides
good scalability up to 8 ExecutionWorkers for a variety of workloads. In
computationally-heavy workloads, Pilotfish's scalability is linear.
