  Block-STM is a parallel execution engine for smart contracts, built around
the principles of Software Transactional Memory. Transactions are grouped in
blocks, and every execution of the block must yield the same deterministic
outcome. Block-STM further enforces that the outcome is consistent with
executing transactions according to a preset order, leveraging this order to
dynamically detect dependencies and avoid conflicts during speculative
transaction execution. At the core of Block-STM is a novel, low-overhead
collaborative scheduler of execution and validation tasks.
  Block-STM is implemented on the main branch of the Diem Blockchain code-base
and runs in production at Aptos. Our evaluation demonstrates that Block-STM is
adaptive to workloads with different conflict rates and utilizes the inherent
parallelism therein. Block-STM achieves up to $110k$ tps in the Diem benchmarks
and up to $170k$ tps in the Aptos Benchmarks, which is a $20$x and $17$x
improvement over the sequential baseline with $32$ threads, respectively. The
throughput on a contended workload is up to $50k$ tps and $80k$ tps in Diem and
Aptos benchmarks, respectively.
