A Smart-Contract Decompiler - Gigahorse
This is the Gigahorse: Thorough, Declarative Decompilation of Smart Contracts paper which implements a SmartContract decompiler in Soufflé. The co-authors are Grech, Neville, Brent, Lexi, Scholz, Bernhard, and Smaragdakis, Yannis. It was published in the 41st ACM/IEEE International Conference on Software Engineering (ICSE’19).
The rise of smart contracts - autonomous applications running on blockchains - has led to a growing number of threats, necessitating sophisticated analysis. However, smart contracts, which transact valuable tokens and cryptocurrencies, are compiled to very low-level bytecode. It is estimated that high-level source code is publicly available for under 1% of contracts on Ethereum (the most popular smart-contract blockchain).
In this paper, we present the Gigahorse toolchain. At its core is a reverse compiler (i.e., a decompiler). The decompiler transforms smart contracts from Ethereum bytecode into a high-level 3-address code representation, which can be analyzed further in a uniform way. Decompilation obviates the need for a contract’s source, allowing the analysis of both new and deployed contracts. Gigahorse advances the state of the art on several fronts. It gives the highest analysis precision and completeness among decompilers for Ethereum smart contracts - e.g., Gigahorse can decompile over 99.98% of deployed contracts, compared to 88% for the recently-published Vandal decompiler and under 50% for the state-of-the-practice Porosity decompiler. Importantly, Gigahorse offers a full-featured toolchain for further analyses (and a “batteries included” approach, with multiple clients already implemented), together with the highest performance and scalability. Key to these improvements is Gigahorse’s use of a declarative, logic-based specification, which allows high-level insights to inform low-level decompilation.
The artifact can be found on Zenodo.