  Efficiency is a fundamental property of any type of program, but it is even
more so in the context of the programs executing on the blockchain (known as
smart contracts). This is because optimizing smart contracts has direct
consequences on reducing the costs of deploying and executing the contracts, as
there are fees to pay related to their bytes-size and to their resource
consumption (called gas). Optimizing memory usage is considered a challenging
problem that, among other things, requires a precise inference of the memory
locations being accessed. This is also the case for the Ethereum Virtual
Machine (EVM) bytecode generated by the most-widely used compiler,
\texttt{solc}, whose rather unconventional and low-level memory usage
challenges automated reasoning. This paper presents a static analysis,
developed at the level of the EVM bytecode generated by \texttt{solc}, that
infers write memory accesses that are needless and thus can be safely removed.
The application of our implementation on more than 19,000 real smart contracts
has detected about 6,200 needless write accesses in less than 4 hours.
Interestingly, many of these writes were involved in memory usage patterns
generated by \texttt{solc} that can be greatly optimized by removing entire
blocks of bytecodes. To the best of our knowledge, existing optimization tools
cannot infer such needless write accesses, and hence cannot detect these
inefficiencies that affect both the deployment and the execution costs of
Ethereum smart contracts.
