Skip to content

Solidity optimizer is enabled #17

@mgcolburn

Description

@mgcolburn

Severity: Undetermined

Description

dToken has enabled optional Solidity compiler optimizations in its Truffle config file:

 // Configure your compilers 
 compilers: { 
     solc: { 
         version: "0.5.12", // Fetch exact version from solc-bin (default: truffle's version) 
         // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false) 
         settings: { // See the solidity docs for advice about optimization and evmVersion 
             optimizer: { 
                 enabled: true, 
                 runs: 200 
             }, 
             //  evmVersion: "byzantium" 
             // } 
         } 
     } 

There have been several bugs with security implications related to optimizations. Moreover, optimizations are actively being developed. Solidity compiler optimizations are disabled by default. It is unclear how many contracts in the wild actually use them. Therefore, it is unclear how well they are being tested and exercised.

High-severity security issues due to optimization bugs have occurred in the past. A high-severity bug in the emscripten-generated solc-js compiler used by Truffle and Remix persisted until late 2018. The fix for this bug was not reported in the Solidity CHANGELOG. Another high severity optimization bug resulting in incorrect bit shift results was patched in Solidity 0.5.6.

A compiler audit of Solidity from November, 2018 concluded that the optional optimizations may not be safe. Moreover, the Common Subexpression Elimination (CSE) optimization procedure is “implemented in a very fragile manner, with manual access to indexes, multiple structures with almost identical behavior, and up to four levels of conditional nesting in the same function.” Similar code in other large projects have resulted in bugs.

There are likely latent bugs related to optimization, and/or new bugs that will be introduced due to future optimizations.

Recommendation

Short term, measure the gas savings from optimizations, and carefully weigh that against the possibility of an optimization-related bug.

Long term, monitor the development and adoption of Solidity compiler optimizations to assess its maturity.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions