I. Introduction
Blockchains are the underlying technology for making online secure transactions using cryptocurrencies such as Bitcoins and Ethers. Executing, verifying and enforcing credible transactions on blockchains is done using smart contracts, which is code written by the buyer and seller using Turing-complete languages [1]. Solidity is a popular object-oriented and high-level language for writing smart contracts [2], [3] and can be compiled to bytecode for execution on the blockchain network. With the increased use of smart contracts across application domains, there is a crucial need for a unified framework that supports and facilitates Solidity code analysis, understanding, transformation, and development of tools for verification and testing that provide strong security guarantees.