Adding Concurrency to Smart Contracts

Thomas Dickerson, Paul Gazzillo, Maurice Herlihy, Eric Koskinen, The Distributed Computing Column by Stefan Schmid


Modern cryptocurrency systems, such as the Ethereum project, permit
complex financial transactions through scripts called smart contracts. These
smart contracts are executed many, many times, always without real concurrency.
First, all smart contracts are serially executed by miners before
appending them to the blockchain. Later, those contracts are serially reexecuted
by validators to verify that the smart contracts were executed correctly
by miners.
Serial execution limits system throughput and fails to exploit today’s
concurrent multicore and cluster architectures. Nevertheless, serial execution
appears to be required: contracts share state, and contract programming
languages have a serial semantics.
This paper presents a novel way to permit miners and validators to execute
smart contracts in parallel, based on techniques adapted from software
transactional memory. Miners execute smart contracts speculatively in parallel,
allowing non-conflicting contracts to proceed concurrently, and “discovering”
a serializable concurrent schedule for a block’s transactions. This
schedule is captured and encoded as a deterministic fork-join program used
by validators to re-execute the miner’s parallel schedule deterministically
but concurrently.

Full Text:



  • There are currently no refbacks.