<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="review-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Blockchain</journal-id>
<journal-title>Frontiers in Blockchain</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Blockchain</abbrev-journal-title>
<issn pub-type="epub">2624-7852</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">814977</article-id>
<article-id pub-id-type="doi">10.3389/fbloc.2022.814977</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Blockchain</subject>
<subj-group>
<subject>Review</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Review of Automated Vulnerability Analysis of Smart Contracts on Ethereum</article-title>
<alt-title alt-title-type="left-running-head">Rameder et&#x20;al.</alt-title>
<alt-title alt-title-type="right-running-head">Automated Vulnerability Analysis</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Rameder</surname>
<given-names>Heidelinde</given-names>
</name>
<uri xlink:href="https://loop.frontiersin.org/people/1617607/overview"/>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>di Angelo</surname>
<given-names>Monika</given-names>
</name>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1399641/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Salzer</surname>
<given-names>Gernot</given-names>
</name>
<uri xlink:href="https://loop.frontiersin.org/people/1407521/overview"/>
</contrib>
</contrib-group>
<aff>
<institution>Faculty of Informatics</institution>, <institution>TU Wien</institution>, <addr-line>Vienna</addr-line>, <country>Austria</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1077423/overview">Giovanni Meroni</ext-link>, Politecnico di Milano, Italy</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1230950/overview">Raimundas Matulevicius</ext-link>, University of Tartu, Estonia</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1235737/overview">Claudio Di Ciccio</ext-link>, Sapienza University of Rome, Italy</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Monika di Angelo, <email>monika.di.angelo@tuwien.ac.at</email>
</corresp>
<fn fn-type="other">
<p>This article was submitted to Smart Contracts, a section of the journal Frontiers in Blockchain</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>24</day>
<month>03</month>
<year>2022</year>
</pub-date>
<pub-date pub-type="collection">
<year>2022</year>
</pub-date>
<volume>5</volume>
<elocation-id>814977</elocation-id>
<history>
<date date-type="received">
<day>14</day>
<month>11</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>24</day>
<month>01</month>
<year>2022</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2022 Rameder, di Angelo and Salzer.</copyright-statement>
<copyright-year>2022</copyright-year>
<copyright-holder>Rameder, di Angelo and Salzer</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these&#x20;terms.</p>
</license>
</permissions>
<abstract>
<p>Programs on public blockchains often handle valuable assets, making them attractive targets for attack. At the same time, it is challenging to design correct blockchain applications. Checking code for potential vulnerabilities is a viable option to increase trust. Therefore, numerous methods and tools have been proposed with the intention to support developers and analysts in detecting code vulnerabilities. Moreover, publications keep emerging with different focus, scope, and quality, making it difficult to keep up with the field and to identify relevant trends. Thus, regular reviews are essential to keep pace with the varied developments in a structured manner. Regarding blockchain programs, Ethereum is the platform most widely used and best documented. Moreover, applications based on Ethereum are entrusted with billions of USD. Like on similar blockchains, they are subject to numerous attacks and losses due to vulnerabilities that exist at all levels of the ecosystem. Countermeasures are in great demand. In this work, we perform a systematic literature review (SLR) to assess the state of the art regarding automated vulnerability analysis of smart contracts on Ethereum with a focus on classifications of vulnerabilities, detection methods, security analysis tools, and benchmarks for the assessment of tools. Our initial search of the major on-line libraries yields more than 1,300 publications. For the review, we apply a clear strategy and protocol to assure consequent, comprehensive, and reproducible documentation and results. After collecting the initial results, cleaning up references, removing duplicates and applying the inclusion and exclusion criteria, we retain 303 publications that include 214 primary studies, 70 surveys and 19 SLRs. For quality appraisal, we assess their intrinsic quality (derived from the reputation of the publication venue) as well as their contextual quality (determined by rating predefined criteria). For about 200 publications with at least a medium score, we extract the vulnerabilities, methods, and tools addressed, among other data. In a second step, we synthesize and structure the data into a classification of both the smart contract weaknesses and the analysis methods. Furthermore, we give an overview of tools and benchmarks used to evaluate tools. Finally, we provide a detailed discussion.</p>
</abstract>
<kwd-group>
<kwd>systematic literature review</kwd>
<kwd>taxonomy</kwd>
<kwd>security</kwd>
<kwd>tools</kwd>
<kwd>vulnerability</kwd>
<kwd>analysis</kwd>
<kwd>benchmark</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Smart contracts, as blockchain programs are called, extend blockchains from a platform for financial transactions to an all-purpose utility. With their distinguishing features observability, tamper evidence, and automatic enforcement, they are the protagonists of trustless computation. As such, they promise to advance application domains like supply chain management, medical services, and especially (decentralized) finance. However, <xref ref-type="bibr" rid="B74">Wang Z. et&#x20;al. (2020)</xref> warn that &#x201c;any successful breach, particularly those that are highly publicized, can impact the community&#x2019;s belief in smart contracts, and hence its usage.&#x201d;</p>
<p>
<xref ref-type="bibr" rid="B66">Tolmach et&#x20;al. (2021)</xref> observe that &#x201c;the adoption of blockchains and smart contracts is also accompanied by severe attacks, often due to domain-specific security pitfalls in the smart contract implementations.&#x201d; As one of the reasons for vulnerabilities, <xref ref-type="bibr" rid="B59">Singh et&#x20;al. (2020)</xref> state that &#x201c;writing secure and safe smart contracts can be extremely difficult due to various business logics, as well as platform vulnerabilities and limitations&#x201d;. Furthermore, <xref ref-type="bibr" rid="B69">Vacca et&#x20;al. (2020)</xref> point out that &#x201c;smart contracts and blockchain applications are developed through non-standard software life-cycles, in which, for instance, delivered applications can hardly be updated or bugs resolved by releasing a new version of the software.&#x201d;</p>
<p>Currently, Ethereum is the major platform for decentralized applications (dApps) and decentralized finance (DeFi). Its ecosystem consists of the underlying blockchain, a large variety of smart contracts deployed on it, a wide range of valuable assets (most notably fungible and non-fungible tokens managed by smart contracts), and the Ethereum Foundation, which coordinates the efforts of an enthusiastic community and of supporting companies like ConsenSys. While developers go to great lengths to avoid security issues, even experts introduce or overlook major vulnerabilities. Not surprisingly, Ethereum is confronted with high-stake attacks and losses, thus actual and potential vulnerabilities are a major concern.</p>
<p>This situation motivates researchers and practitioners to devise methods and tools for the development of secure smart contracts to avoid pitfalls from the outset, and for screening smart contracts for vulnerabilities. These efforts include the documentation of vulnerabilities, the collection of best practices, and the automated detection of issues. To date, more than 100 tools have been presented that either support the development of blockchain programs or help to analyze them once created. The number of publications detailing the methods and comparing the approaches seems overwhelming. Therefore, surveys aim at systematizing the contributions and summarizing the state of the&#x20;art.</p>
<p>Among the many aspects of smart contract, our systematic literature review focuses on studies related to vulnerabilities and their automated detection. We assess the publications with respect to the following questions:<list list-type="simple">
<list-item>
<p>&#x2022; Which vulnerabilities are mentioned? How are vulnerabilities classified?</p>
</list-item>
<list-item>
<p>&#x2022; Which methods do automated tools use to detect vulnerabilities?</p>
</list-item>
<list-item>
<p>&#x2022; Which vulnerabilities are addressed by the tools?</p>
</list-item>
<list-item>
<p>&#x2022; How are the tools evaluated?</p>
</list-item>
<list-item>
<p>&#x2022; What are the open challenges of automated detection?</p>
</list-item>
</list>
</p>
<p>Starting from an initial list of 1300&#x2b; related publications, we apply a carefully documented process to select and evaluate 303 studies of immediate relevance, and to distill current trends and open challenges. Our contributions are<list list-type="simple">
<list-item>
<p>&#x2022; a list of high quality publications, with the selection based on clear criteria,</p>
</list-item>
<list-item>
<p>&#x2022; an overview and taxonomy of vulnerabilities, methods and tools,</p>
</list-item>
<list-item>
<p>&#x2022; a discussion of the state of the art with respect to automated analysis,&#x20;and</p>
</list-item>
<list-item>
<p>&#x2022; the identification of gaps and challenges.</p>
</list-item>
</list>
</p>
<p>The paper is structured as follows. <xref ref-type="sec" rid="s2">Section 2</xref> describes the search for and the selection of 303 publications, the criteria for quality appraisal, and the structure of the publications found. In <xref ref-type="sec" rid="s7">Sections 3&#x2013;7</xref>, we give a synthesis of the extracted data. <xref ref-type="sec" rid="s3">Section 3</xref> summarizes eight related systematic literature reviews, while <xref ref-type="sec" rid="s4">Section 4</xref> classifies the vulnerabilities we found. <xref ref-type="sec" rid="s5">Section 5</xref> gives an overview of the methods used in the automated analysis of smart contracts, whereas <xref ref-type="sec" rid="s6">Section 6</xref> concentrates on the tools implementing them. Test sets and benchmarks, required for the evaluation of tools, are summarized in <xref ref-type="sec" rid="s7">Section 7</xref>. <xref ref-type="sec" rid="s8">Section 8</xref> is devoted to the discussion of our findings, before we conclude with <xref ref-type="sec" rid="s9">Section&#x20;9</xref>.</p>
<p>The extensive <xref ref-type="sec" rid="s13">Supplementary Material</xref> contains a description of all vulnerabilities, organized in a consolidated taxonomy, an overview of the 140 tools we found, and the quality appraisal or surveys and primary studies.</p>
</sec>
<sec id="s2">
<title>2 Systematic Review</title>
<p>For the literature review, we apply a rigorous protocol to ensure comprehensive and reproducible results as suggested in several guidelines (<xref ref-type="bibr" rid="B8">Brereton et&#x20;al., 2007</xref>; <xref ref-type="bibr" rid="B34">Kitchenham and Charters, 2007</xref>; <xref ref-type="bibr" rid="B48">Okoli, 2015</xref>; <xref ref-type="bibr" rid="B60">Snyder, 2019</xref>). This section documents the initial search, the first selection and classification, as well as the quality appraisal. In subsequent sections, we discuss the extracted data in form of a synthesis, focusing on the aspects: related work (<xref ref-type="sec" rid="s3">Section 3</xref>), vulnerability taxonomies (<xref ref-type="sec" rid="s4">Section 4</xref>), analysis methods (<xref ref-type="sec" rid="s5">Section 5</xref>), tools (<xref ref-type="sec" rid="s6">Section 6</xref>), and benchmark sets (<xref ref-type="sec" rid="s7">Section&#x20;7</xref>).</p>
<sec id="s2-1">
<title>2.1 Search and Selection</title>
<sec id="s2-1-1">
<title>2.1.1 Initial Search</title>
<p>In accordance with our research questions, we choose the primary search term <italic>smart contract</italic> and a disjunction of the terms <italic>security</italic>, <italic>vulnerability</italic>, <italic>bug</italic>, <italic>analysis</italic>, <italic>detection</italic>, <italic>verification</italic> and <italic>tool</italic>. One of the lessons learned in (<xref ref-type="bibr" rid="B8">Brereton et&#x20;al., 2007</xref>) is the necessity to query several databases, as in the domain of information systems, there is not a single source containing all relevant papers. The initial search was conducted at the end of January 2021 and yielded a total of 1326 results, with 546 contributed by Google Scholar, 229 by IEEE Xplore, 199 by ScienceDirect, 178 by TU Wien CatalogPlus, and 174 by ACM Digital Library.</p>
<p>
<xref ref-type="table" rid="T1">Table&#x20;1</xref> lists the database queries. Using <italic>blockchain code/program</italic> as synonyms for <italic>smart contract</italic> does not increase the number of results. In general, we search the titles of publications as well as their meta-information, including keywords and abstracts. For Google Scholar, we have to limit the search to titles, as an unrestricted search yields more than 50&#x2009;000 hits, most unrelated to smart contracts. To make up for the brevity of titles, we add <italic>Ethereum</italic> as an alternative to <italic>smart contract</italic> in this&#x20;case.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Query strings on different search engines.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Database</th>
<th align="center">Query</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">ACM DL</td>
<td align="left">Title: (&#x201c;smart contract&#x201d; OR &#x201c;smart contracts&#x201d;) AND AllField: (vulnerability OR vulnerabilities OR bug OR bugs OR tool OR security OR analysis OR detection OR verification)</td>
</tr>
<tr>
<td align="left">Google Scholar</td>
<td align="left">allintitle: (&#x201c;smart contract&#x201d; OR &#x201c;smart contracts&#x201d; OR Ethereum) AND (vulnerability OR vulnerabilities OR bug OR bugs OR security OR analysis OR detection OR tool OR verification)</td>
</tr>
<tr>
<td align="left">IEEE Xplore</td>
<td align="left">&#x201c;All Metadata&#x201d;: (&#x201c;smart contract&#x201d; OR &#x201c;smart contracts&#x201d;) AND (vulnerability OR vulnerabilities OR bug OR bugs OR tool) AND (security OR analysis OR detection OR verification)</td>
</tr>
<tr>
<td align="left">Science Direct</td>
<td align="left">Title, abstract, keywords: &#x201c;smart contract&#x201d; AND (vulnerability OR vulnerabilities OR bug OR tool OR security OR analysis OR detection OR verification)</td>
</tr>
<tr>
<td align="left">TU Wien CatalogPlus</td>
<td align="left">title contains (&#x201c;smart contract&#x201d; OR &#x201c;smart contracts&#x201d;) AND Subject contains (security OR vulnerability OR vulnerabilities OR bug OR bugs Or analysis OR detection OR tool OR verification)</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s2-1-2">
<title>2.1.2 Exclusion and Inclusion Criteria</title>
<p>
<italic>Exclusion Criteria</italic>: We exclude search results if the work is 1) not written in English, 2) a patent, blog entry or other grey literature, 3) not accessible on-line via the library network of TU Wien, 4) published before 2014, and 5) unrelated to Ethereum.</p>
<p>The last exclusion criterion is debatable for an academic review, as it restricts our attention to a specific technology. However, within the area of smart contracts, Ethereum clearly dominates the public blockchains with respect to the diversity of applications, the market cap, and the size of its community. An increasing number of entrepreneurs and visionaries propose new business models, which prompts developers to design languages and to implement tool chains for this platform. The financial values involved make Ethereum an attractive target for attackers, leading in turn to research on vulnerabilities and counter-measures. This self-reinforcing spiral lead to a situation where the amount of literature on Ethereum smart contracts vastly exceeds the one on other platforms, which seems to justify our&#x20;focus.</p>
<p>
<italic>Inclusion Criteria</italic>: We include search results if it is clear from title and abstract that the work is related to 1) smart contract security bugs or vulnerabilities, 2) smart contract vulnerability detection, analysis or security verification tools, or 3) automated detection or verification methods.</p>
</sec>
<sec id="s2-1-3">
<title>2.1.3 Selection and Classification</title>
<p>After removing 299 duplicates and excluding 724 articles according to the criteria above, we group the remaining 303 studies into three classes:<list list-type="simple">
<list-item>
<p>&#x2022; <italic>Systematic Literature Reviews (SLRs)</italic>,</p>
</list-item>
<list-item>
<p>&#x2022; <italic>Surveys</italic> including surveys or review studies of smart contract security analysis tools, methods, approaches or vulnerabilities,&#x20;and</p>
</list-item>
<list-item>
<p>&#x2022; <italic>Primary Studies</italic> including research on the development of smart contract security analysis and vulnerability detection tools, methods or approaches.</p>
</list-item>
</list>
</p>
<p>
<xref ref-type="fig" rid="F1">Figure&#x20;1</xref> breaks down the publications by class and&#x20;venue.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Distribution of publication venues per publication&#x20;class.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g001.tif"/>
</fig>
</sec>
</sec>
<sec id="s2-2">
<title>2.2 Quality Appraisal</title>
<p>In the next step, we read the selected literature in detail. Besides extracting various data, we assess the quality of the papers. If a work does not meet minimum standards, it is excluded from the subsequent literature review (<xref ref-type="bibr" rid="B48">Okoli, 2015</xref>). Similarly to <xref ref-type="bibr" rid="B70">Varela-Vaca and Quintero (2021)</xref>, we apply the intrinsic and contextual data quality metrics described in <xref ref-type="bibr" rid="B62">Strong et&#x20;al. (1997)</xref>.</p>
<sec id="s2-2-1">
<title>2.2.1 Intrinsic Data Quality</title>
<p>Intrinsic data quality (IDQ) assesses the accuracy, objectivity, credibility, and reputation of the publication venue. We map the <italic>SCImago Journal Ranking</italic> (<xref ref-type="bibr" rid="B57">SCImago, 2021</xref>), the <italic>CORE Journal or Conference Ranking</italic> (<xref ref-type="bibr" rid="B13">CORE, 2021</xref>), and the <italic>Scopus CiteScore</italic> percentile ranking (<xref ref-type="bibr" rid="B58">Scopus, 2021</xref>) to a score between 0 and 1 (<xref ref-type="table" rid="T2">Table&#x20;2</xref>). In the case of multiple rankings we take the highest score as IDQ. If a journal or conference has not (yet) been ranked for the year under consideration, we consider the most recent ranking.</p>
<table-wrap id="T2" position="float">
<label>TABLE 2</label>
<caption>
<p>Mapping from popular venue rankings to our unified intrinsic data quality (IDQ).</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">SCImago</th>
<th align="left">CORE</th>
<th align="left">Scopus CiteScore</th>
<th align="left">IDQ score</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">Q1</td>
<td align="center">A&#x2a;, A</td>
<td align="left">
<inline-formula id="inf1">
<mml:math id="m1">
<mml:mo>&#x3e;</mml:mo>
</mml:math>
</inline-formula> 75 percentile</td>
<td align="char" char=".">1.0</td>
</tr>
<tr>
<td align="center">Q2</td>
<td align="center">B</td>
<td align="left">
<inline-formula id="inf2">
<mml:math id="m2">
<mml:mo>&#x3e;</mml:mo>
</mml:math>
</inline-formula> 50 percentile</td>
<td align="char" char=".">0.8</td>
</tr>
<tr>
<td align="center">Q3, Q4</td>
<td align="center">C</td>
<td align="left">&#x2265; 25 percentile</td>
<td align="char" char=".">0.5</td>
</tr>
<tr>
<td colspan="3" align="left">not indexed, but pub. by IEEE, ACM, Springer</td>
<td align="char" char=".">0.4</td>
</tr>
<tr>
<td align="left"/>
<td align="left"/>
<td align="left">
<inline-formula id="inf3">
<mml:math id="m3">
<mml:mo>&#x3c;</mml:mo>
</mml:math>
</inline-formula> 25 percentile</td>
<td align="char" char=".">0.2</td>
</tr>
<tr>
<td colspan="3" align="left">otherwise, e.g. arXiv, preprints, theses, reports</td>
<td align="char" char=".">0.2</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>
<xref ref-type="fig" rid="F2">Figure&#x20;2</xref> breaks down the IDQ score of the 303 initially selected publications per publication class. A total of 126 publications (41.6%) is rated at the highest IDQ score of 1.0, while 44 publications (14.5%) are rated at 0.8 and 27 (8.9%) at 0.5. At the lower end, we find 56 publications (18.5%) with a score of 0.4 and 50 (16.5%) with a score of&#x20;0.2.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Number of publications per IDQ score, by publication&#x20;venue.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g002.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F3">Figure&#x20;3</xref> shows the IDQ scores within the three publication classes. Most SLRs (15 out of 19, 78.9%) have been published in highly reputable venues, compared to only 17 of 70 (24.3%) surveys scoring at 1.0. Overall, the quality of surveys is the lowest, with 36 (51.4%) scoring 0.4 or 0.2. Of the selected primary studies, 126 of 214, almost 60% score 0.8 or&#x20;1.0.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Distribution of IDQ scores per publication&#x20;class.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g003.tif"/>
</fig>
</sec>
<sec id="s2-2-2">
<title>2.2.2 Contextual and Final Data Quality</title>
<p>Contextual data quality (CDQ) assesses the relevance, added value, timeliness, completeness and amount of data, and thus depends on the context of the evaluation, like the purpose of the systematic review, the research questions, and the data to extract and analyze. We devise two questionnaires, <xref ref-type="table" rid="T3">Tables 3</xref>, <xref ref-type="table" rid="T4">4</xref>, to evaluate the CDQ of primary and secondary studies. The CDQ score is the arithmetic mean of the answers to the questions, each answer being a number between 0 and 1.<disp-formula id="equ1">
<mml:math id="m4">
<mml:mtext>CDQ</mml:mtext>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mtext>sum&#x2009;of&#x2009;answers</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mtext>number&#x2009;of&#x2009;questions&#x2009;answered</mml:mtext>
</mml:mrow>
</mml:mfrac>
</mml:math>
</disp-formula>
</p>
<table-wrap id="T3" position="float">
<label>TABLE 3</label>
<caption>
<p>Criteria for assessing the contextual data quality (CDQ) of SLRs and surveys.</p>
</caption>
<table>
<tbody valign="top">
<tr>
<td align="left">
<bold>Q1:</bold> Is the methodology and literature search of the review systematic and documented? Are all relevant studies at the time likely to be covered?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; Yes, in comprehensive detail, systematic and good quality. To be (re)classified as SLR.</td>
</tr>
<tr>
<td align="left">Not Graded &#x3d; No, to be (re)classified as survey</td>
</tr>
<tr>
<td align="left">
<bold>Q2:</bold> Does the study focus on work about smart contact vulnerabilities, detection tools, or approaches to automated detection or verification?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; Yes, the research topic closely related and covers major parts of this work</td>
</tr>
<tr>
<td align="left">0.6 &#x3d; It covers related topics, but important areas differ or are missing</td>
</tr>
<tr>
<td align="left">0.3 &#x3d; Some similar areas are covered</td>
</tr>
<tr>
<td align="left">0.0 &#x3d; The review focuses on different research topics, only a very small part is related</td>
</tr>
<tr>
<td align="left">
<bold>Q3:</bold> Does the study cover the evaluation of smart contract vulnerabilities?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; Yes, the work includes a survey, evaluation and detailed description of vulnerabilities including classifications</td>
</tr>
<tr>
<td align="left">0.6 &#x3d; Descriptions or classifications of certain vulnerabilities are given, but it is not a major focus of the work</td>
</tr>
<tr>
<td align="left">0.3 &#x3d; Some vulnerabilities are superficially listed or mentioned</td>
</tr>
<tr>
<td align="left">0.0 &#x3d; No, the focus is not on the survey of vulnerabilities</td>
</tr>
<tr>
<td align="left">
<bold>Q4:</bold> How many tools or analysis/verification methods does the review identify, classify, compare or evaluate?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; more than 12, 0.6 &#x3d; 8 to 12, 0.3 &#x3d; 4 to 7, 0.0 &#x3d; less than 4</td>
</tr>
<tr>
<td align="left">
<bold>Q5:</bold> Did the author(s) assess and compare the quality/validity of tools or automated detection/verification approaches in detail?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; Yes, in detail and high quality, including practical experiments or comprehensive/in-depth coverage and classification</td>
</tr>
<tr>
<td align="left">0.6 &#x3d; Yes, compared/evaluated in some detail, but only theoretically</td>
</tr>
<tr>
<td align="left">0.3 &#x3d; Only superficial description</td>
</tr>
<tr>
<td align="left">0.0 &#x3d; No</td>
</tr>
<tr>
<td align="left">
<bold>Q6:</bold> Is a set of smart contract benchmarks provided?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; Yes, Not Graded &#x3d; No</td>
</tr>
<tr>
<td align="left">
<bold>Q7:</bold> How current is the review?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; 2020/21, 0.6 &#x3d; 2019, 0.3 &#x3d; 2018, 0.0 &#x3d; 2017 and older</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="T4" position="float">
<label>TABLE 4</label>
<caption>
<p>Criteria for assessing the contextual data quality (CDQ) of primary studies.</p>
</caption>
<table>
<tbody valign="top">
<tr>
<td align="left">
<bold>Q1:</bold> Is the primary study referenced in a selected SLR or survey? How often is it cited according to Google Scholar?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; referenced in selected SLR or Survey, or cited more than 12&#x20;times according to Google Scholar</td>
</tr>
<tr>
<td align="left">0.6 &#x3d; 8 to 12 citations, 0.3 &#x3d; 4 to 7 citations, 0.0 &#x3d; less than 4 citations</td>
</tr>
<tr>
<td align="left">
<bold>Q2:</bold> Is the primary study related to an executable tool or to a framework for verifying security properties or identifying vulnerabilities of Ethereum smart contracts?</td>
</tr>
<tr>
<td align="left">1.0 &#x3d; Yes, 0.0 &#x3d; No</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>The final data quality (FDQ) is a combination of IDQ and FDQ. We compute the FDQ score as the arithmetic mean of the other two scores. It is thus also a number between 0 and 1.<disp-formula id="equ2">
<mml:math id="m5">
<mml:mtext>FDQ</mml:mtext>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mtext>IDQ</mml:mtext>
<mml:mo>&#x2b;</mml:mo>
<mml:mtext>CDQ</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:math>
</disp-formula>
</p>
<p>For the sake of readability, and ease of classification, we map CDQ and FDQ to a three point Likert scale, by calling a score low if it is below 0.5, high if it is at least 0.8, and medium otherwise. We exclude a study from the survey if its CDQ or FDQ is low. The rationale for considering CDQ twice, once explicitly and once as part of the FDQ score, is to retain work of medium CDQ that has not been published yet but is available from public repositories (resulting in a low IDQ and FDQ score). We could achieve a similar effect by weighting CDQ in the computation of the FDQ&#x20;score.</p>
</sec>
<sec id="s2-2-3">
<title>2.2.3 Quality Appraisal of Systematic Literature Reviews</title>
<p>The questionnaire for measuring CDQ (<xref ref-type="table" rid="T3">Table&#x20;3</xref>) is based on the DARE criteria suggested in (<xref ref-type="bibr" rid="B34">Kitchenham and Charters, 2007</xref>). The quality appraisal for the systematic literature reviews (19 initially and one subsequently identified) is presented in <xref ref-type="table" rid="T5">Table&#x20;5</xref>. The table includes the IDQ score, the answers of the CDQ questionnaire, CDQ and FDQ score, and the corresponding CDQ and FDQ values. Of the 20 reviews, we reject nine due to low CDQ or FDQ and reclassify three as surveys. Eight reviews, summarized in <xref ref-type="sec" rid="s3">Section 3</xref>, remain for data extraction.</p>
<table-wrap id="T5" position="float">
<label>TABLE 5</label>
<caption>
<p>Quality appraisal of systematic literature reviews. Q6 does not apply to this type of publications.</p>
</caption>
<table>
<thead valign="top">
<tr>
<td colspan="1" align="left">systematic literature review</td>
<th align="center">IDQ</th>
<th colspan="8" align="center">CDQ</th>
<th colspan="2" align="center">FDQ</th>
<th rowspan="2" align="left">Selected</th>
</tr>
<tr>
<th align="left"/>
<td align="center">score</td>
<td align="center">Q1</td>
<td align="center">Q2</td>
<td align="center">Q3</td>
<td align="center">Q4</td>
<td align="center">Q5</td>
<td align="center">Q7</td>
<td align="center">score</td>
<td align="center">value</td>
<td align="left">score</td>
<td align="left">value</td>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">
<xref ref-type="bibr" rid="B5">Ante (2021)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.3</td>
<td align="center">0.0</td>
<td align="center">0.3</td>
<td align="center">0.0</td>
<td align="center">1.0</td>
<td align="center">0.43</td>
<td align="left">low</td>
<td align="left">0.72</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B9">Chen et&#x20;al. (2020a)</xref>
</td>
<td align="center">1.0</td>
<td colspan="8" align="center">reclassified as survey</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B12">Coblenz et&#x20;al. (2019)</xref>
</td>
<td align="center">1.0</td>
<td align="left"/>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.6</td>
<td align="center">0.12</td>
<td align="left">low</td>
<td align="left">0.56</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B24">Guo et&#x20;al. (2021)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">1.0</td>
<td align="center">0.33</td>
<td align="left">low</td>
<td align="left">0.67</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B26">Gupta et&#x20;al. (2020)</xref>
</td>
<td align="center">0.8</td>
<td colspan="8" align="center">reclassified as survey</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B30">Hu et&#x20;al. (2021)</xref> <xref ref-type="table-fn" rid="Tfn1">
<sup>a</sup>
</xref>
</td>
<td align="center">0.2</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.3</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">1.0</td>
<td align="center">0.82</td>
<td align="left">high</td>
<td align="left">0.51</td>
<td align="left">med</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B33">Kim and Ryu (2020)</xref>
</td>
<td align="center">0.4</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">0.6</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">1.0</td>
<td align="center">0.80</td>
<td align="left">high</td>
<td align="left">0.60</td>
<td align="left">med</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B36">Leka et&#x20;al. (2019)</xref>
</td>
<td align="center">0.4</td>
<td align="left"/>
<td align="center">0.3</td>
<td align="center">0.3</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.6</td>
<td align="center">0.24</td>
<td align="left">low</td>
<td align="left">0.32</td>
<td align="left">low</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B39">Liu and Liu (2019)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">0.0</td>
<td align="center">0.6</td>
<td align="center">0.3</td>
<td align="center">0.6</td>
<td align="center">0.52</td>
<td align="left">med</td>
<td align="left">0.76</td>
<td align="left">med</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B43">Macrinici et&#x20;al. (2018)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.3</td>
<td align="center">0.6</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.3</td>
<td align="center">0.37</td>
<td align="left">low</td>
<td align="left">0.68</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B53">Rouhani and Deters (2019)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.3</td>
<td align="center">0.3</td>
<td align="center">0.6</td>
<td align="center">0.3</td>
<td align="center">0.6</td>
<td align="center">0.52</td>
<td align="left">med</td>
<td align="left">0.76</td>
<td align="left">med</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B59">Singh et&#x20;al. (2020)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.0</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">1.0</td>
<td align="center">0.77</td>
<td align="left">med</td>
<td align="left">0.88</td>
<td align="left">high</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B55">Sanchez-G&#xf3;mez et&#x20;al. (2020)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.3</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">1.0</td>
<td align="center">0.38</td>
<td align="left">low</td>
<td align="left">0.69</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B64">Taylor et&#x20;al. (2020)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.3</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">1.0</td>
<td align="center">0.38</td>
<td align="left">low</td>
<td align="left">0.69</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B65">Tolmach et&#x20;al. (2020)</xref>
</td>
<td align="center">0.2</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">0.6</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">1.0</td>
<td align="center">0.80</td>
<td align="left">high</td>
<td align="left">0.50</td>
<td align="left">med</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B67">Tovanich et&#x20;al. (2019)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.6</td>
<td align="center">0.27</td>
<td align="left">low</td>
<td align="left">0.63</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B69">Vacca et&#x20;al. (2020)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">0.0</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">1.0</td>
<td align="center">0.70</td>
<td align="left">med</td>
<td align="left">0.85</td>
<td align="left">high</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B70">Varela-Vaca and Quintero (2021)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.3</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">0.0</td>
<td align="center">1.0</td>
<td align="center">0.38</td>
<td align="left">low</td>
<td align="left">0.69</td>
<td align="left">med</td>
<td align="left">&#x2718;</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B74">Zeli Wang et&#x20;al. (2020)</xref>
</td>
<td align="center">1.0</td>
<td align="center">1.0</td>
<td align="center">0.6</td>
<td align="center">0.6</td>
<td align="center">0.6</td>
<td align="center">0.3</td>
<td align="center">1.0</td>
<td align="center">0.68</td>
<td align="left">med</td>
<td align="left">0.84</td>
<td align="left">high</td>
<td align="left">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B78">Zhang et&#x20;al. (2020)</xref>
</td>
<td align="center">1.0</td>
<td colspan="8" align="center">reclassified as survey</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn id="Tfn1">
<label>a</label>
<p>Identified subsequently.</p>
</fn>
</table-wrap-foot>
</table-wrap>
</sec>
<sec id="s2-2-4">
<title>2.2.4 Quality Appraisal of Surveys</title>
<p>The <xref ref-type="sec" rid="s13">Supplementary Material</xref> of this article contains a table similar to <xref ref-type="table" rid="T5">Table&#x20;5</xref> that assesses the quality of 70 initially selected surveys, four additional surveys subsequently identified, and three publications reclassified from SLR to survey. <xref ref-type="fig" rid="F4">Figure&#x20;4</xref> gives an overview. Of the 77 publications, we reclassify six as primary study and remove two duplicates. We reject 31 surveys due to low CDQ or FDQ and retain 38 for data extraction.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Quality appraisal of surveys.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g004.tif"/>
</fig>
</sec>
<sec id="s2-2-5">
<title>2.2.5 Quality Appraisal of Primary Studies</title>
<p>The assessment of primary studies focuses on the identification of tools for the automated analysis of security issues (see the questionnaire in <xref ref-type="table" rid="T4">Table&#x20;4</xref>). We consider 224 primary studies, including six studies initially classified as survey and four studies identified only subsequently. Based on the quality appraisal in the <xref ref-type="sec" rid="s13">Supplementary Material</xref>, we reject 75 publications because of low CDQ or FDQ, and retain 149 for further data extraction (<xref ref-type="fig" rid="F5">Figure&#x20;5</xref>).</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Quality appraisal of primary studies.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g005.tif"/>
</fig>
</sec>
</sec>
<sec id="s2-3">
<title>2.3 Data Extraction</title>
<p>After quality appraisal and reclassification, we are left with 8 systematic literature reviews, 38 surveys and 149 primary studies for data extraction. <xref ref-type="fig" rid="F6">Figure&#x20;6</xref> aggregates the number of studies by the year of publication. Apparently, the research in the field grows rapidly, with the primary studies jumping from 3 in 2017 to 40 in 2018 and the number of SLRs and surveys nearly tripling from 2019 to 2020. Next, in <xref ref-type="sec" rid="s7">Sections 3&#x2013;7</xref>, we give a synthesis of the extracted&#x20;data.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>Publication trend per year for SLRs and surveys as well as primary studies.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g006.tif"/>
</fig>
</sec>
</sec>
<sec id="s3">
<title>3 Related Work</title>
<p>In this section, we summarize the eight SLRs of high contextual or final data quality that we identified in our initial search. We list them in chronological order and discuss their relation to our&#x20;work.</p>
<sec id="s3-1">
<title>3.1 Summary of SLRs With High Quality</title>
<p>
<xref ref-type="bibr" rid="B39">Liu and Liu (2019)</xref> focus on smart contract verification and select 53 publications, with 20 addressing security assurance and 33 correctness verification. For security assurance, the authors identify the three categories environment security, vulnerability scanning and performance impacts, whereas correctness verification is subdivided into program correctness and formal verification. The paper mentions various tools in each category, but does not compare them directly. The authors conclude that methods for formally verifying correctness are an effective way to ensure smart contract credibility and accuracy.</p>
<p>
<xref ref-type="bibr" rid="B53">Rouhani and Deters (2019)</xref> conduct a systematic review regarding the security, performance and applications of smart contracts, finally considering 90 papers. They describe the security issues and present methods and tools to analyze them. The authors identify four major security problems, namely transaction order dependence, timestamp dependence, mishandled exceptions, and reentrancy. They evaluate nine vulnerability analysis tools and summarize methods for formal verification as well as for the detection of effective callback free objects.</p>
<p>
<xref ref-type="bibr" rid="B74">Zeli Wang et&#x20;al. (2020)</xref> systematically survey the literature on the security of Ethereum smart contracts, published between July 2015 and July 2019. The main contributions relevant to our work are a systematic mapping and a taxonomy of security problems including counter-measures, with the three major categories &#x201c;abnormal contract&#x201d;, &#x201c;program vulnerability&#x201d; and &#x201c;exploitable habitat&#x201d;. The methods for detecting vulnerabilities are described at a high level, divided into static analysis (including symbolic execution and formal verification), dynamic analysis and code similarity. The authors describe individual tools, but neither perform a comprehensive evaluation nor map vulnerabilities to the detection methods.</p>
<p>
<xref ref-type="bibr" rid="B59">Singh et&#x20;al. (2020)</xref> analyze work published between 2015 and July 2019, synthesizing a final set of 35 research papers on formal approaches to avoid vulnerabilities in smart contracts. The most common approach is the verification of security properties by theorem proving, whereas symbolic execution and model checking are frequently used to establish functional correctness. Further formal techniques comprise formal modeling, finite state machines, logic based approaches, behavioral modeling, formal reasoning and formal specification languages. The authors provide a mapping between formal techniques and the addressed issues in smart contracts. Moreover, they identify 15 formal tools and frameworks and relate them to the formal methods&#x20;used.</p>
<p>
<xref ref-type="bibr" rid="B65">Tolmach et&#x20;al. (2020)</xref> give a comprehensive survey of the methods for formally specifying and verifying smart contracts, based on 202 papers published from September 2014 to June 2020. They present a taxonomy of formal approaches, with the main categories being modeling formalisms, specification formalisms, and verification techniques. Modeling formalisms are contract-level models, such as process algebras, state-transition systems and set-based methods, as well as program-level models, like abstract syntax tree analysis, control-flow automata and program logics. Specification formalisms are divided into formal specifications such as contract and program-level specifications, as well as properties by domain, like security, privacy, finance, social games and asset tracking. The verification techniques comprise model checking, theorem proving, program verification, symbolic and concolic execution, runtime verification, and testing. In total, the survey describes 34 verification tools and frameworks and associates them with the respective formalism. In their conclusion, the authors state that there is still a lack in clear approaches and standards with respect to secure development and analysis techniques. Furthermore, they argue that different blockchains and smart contract platforms often require different approaches to security analysis. Recently, this survey has been published as (<xref ref-type="bibr" rid="B66">Tolmach et&#x20;al., 2021</xref>).</p>
<p>
<xref ref-type="bibr" rid="B33">Kim and Ryu (2020)</xref> give a survey of the analysis of smart contract for various blockchains, based on 67 out of 391 initial papers. Of these, 24 papers use static analysis for vulnerability detection, 24 static analysis for program correctness, and 19 use dynamic analysis. The approaches are further subdivided according to specific methods like symbolic execution, abstract interpretation, machine learning, fuzzing, runtime verification, and concolic testing. The authors evaluate 27 tools regarding the ability to detect one or more of 19 vulnerabilities. They point out unsolved challenges such as program behavior and language ambiguities, and highlight promising research directions such as the design of new languages and type systems, and the use of machine learning.</p>
<p>
<xref ref-type="bibr" rid="B30">Hu et&#x20;al. (2021)</xref> review papers from the period 2008&#x2013;2020 that focus on design paradigms, tools for developing secure smart contracts, and systems to improve privacy or efficiency, selecting finally 159 studies and twelve related surveys. The parts most relevant to our work are the evaluation and classification of analysis methods and tools. The authors identify, describe, and classify 40 tools that are able to detect and analyze vulnerabilities. Of these, 15 focus on the detection of specific vulnerabilities, while the others have a broader scope like identifying multiple vulnerabilities, verifying custom properties, or alerting to potential security risks. Additionally, the review presents 20 auxiliary tools, including frameworks and high level languages. In their conclusion, the authors state that many tools are inefficient and require specific knowledge for defining security properties. They also notice a trade-off between accuracy and the coverage of multiple vulnerabilities.</p>
<p>
<xref ref-type="bibr" rid="B69">Vacca et&#x20;al. (2020)</xref> focus on current challenges, techniques and tools for smart contract development. The survey is based on 96 articles, published between 2016 and 2020, on the analysis and the testing of smart contracts, on metrics for and security of smart contracts, on Dapp performance and on blockchain applications. The work summarizes the properties and application areas of 26 tools for the automated analysis of smart contracts. Moreover, the review describes experimental datasets and 18 empirical validations. The authors emphasize the need for guidelines and further research regarding the development and testing of smart contracts.</p>
</sec>
<sec id="s3-2">
<title>3.2 Relation to Our Work</title>
<p>The SLRs above focus on the development of smart contracts, on analysis methods, on formal methods, and on security issues. Automated analysis is covered in varying degrees, but is not at the center. Vulnerabilities are described in one review, a taxonomy is suggested by two. Most SLRs include a description of the methods found, but usually without indicating the vulnerabilities that can be tackled by the methods. Tool descriptions are more often included than not, while comparisons of tool properties are less frequent. The conclusions of the SLRs portray an immature field, in particular with respect to standards and guidelines, program behavior, tool efficiency, and testing. This situation and the marked increase in publications warrants regular reviews of the state of the&#x20;art.</p>
<p>Naturally, our review includes more recent research, up to January 2021, as it was conducted later than the other SLRs. What sets our work apart is its specific scope, its breadth, and rigor. Our main focus is automated vulnerability detection, including tools, taxonomies and benchmarks. Starting from 1300&#x2b; initial search results, we assessed the relevance and quality of 303 publications in detail, applying clearly defined criteria (cf. <xref ref-type="sec" rid="s2">Section 2</xref>). For the chosen scope, our review with a <xref ref-type="sec" rid="s13">Supplementary Material</xref> of 70&#x2b; pages can be regarded as a comprehensive overview of the state-of-the-art at the beginning of&#x20;2021.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Classifications of Vulnerabilities</title>
<p>In this section, we give an overview of classification schemes. We start with our consolidated taxonomy of the vulnerabilities identified in the body of literature. Then we summarize classifications by scholars and present two community taxonomies. Finally, we present a mapping of our consolidated taxonomy to the community classifications.</p>
<p>In the reviewed literature, the term <italic>vulnerability</italic> is used in a broader sense than is common in computer security. It refers to a weakness or limitation of a smart contract that may result in security problems. A vulnerability allows for the execution of a smart contract in unintended ways. This includes locked or stolen resources, breaches of confidentiality or data integrity, and state changes in the environment of smart contracts that were not anticipated by developers or users and that put some involved party at an advantage or disadvantage.</p>
<sec id="s4-1">
<title>4.1 Consolidated Taxonomy</title>
<p>In total, we extracted 54 vulnerabilities from the collected papers. The <xref ref-type="sec" rid="s13">Supplementary Material</xref> contains a short description for each, including references. Our consolidated classification in <xref ref-type="table" rid="T6">Table&#x20;6</xref> consists of 10 classes of vulnerabilities. It is based on 17 systematically selected surveys (as documented in the supplement) and two popular community classifications presented&#x20;below.</p>
<table-wrap id="T6" position="float">
<label>TABLE 6</label>
<caption>
<p>Consolidated taxonomy of vulnerabilities of smart contracts on Ethereum.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Code</th>
<th align="center">Vulnerability</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">1</td>
<td align="left">
<bold>Malicious Environment, Transactions or Input</bold>
</td>
</tr>
<tr>
<td align="left">1A</td>
<td align="left">Reentrancy</td>
</tr>
<tr>
<td align="left">1B</td>
<td align="left">Call to the unknown</td>
</tr>
<tr>
<td align="left">1C</td>
<td align="left">Exact balance dependency</td>
</tr>
<tr>
<td align="left">1D</td>
<td align="left">Improper data validation</td>
</tr>
<tr>
<td align="left">1E</td>
<td align="left">Vulnerable <sc>delegatecall</sc>
</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">
<bold>Blockchain/Environment Dependency</bold>
</td>
</tr>
<tr>
<td align="left">2A</td>
<td align="left">Timestamp dependency</td>
</tr>
<tr>
<td align="left">2B</td>
<td align="left">Transaction-ordering dependency (TOD)</td>
</tr>
<tr>
<td align="left">2C</td>
<td align="left">Bad random number generation</td>
</tr>
<tr>
<td align="left">2D</td>
<td align="left">Leakage of confidential information</td>
</tr>
<tr>
<td align="left">2E</td>
<td align="left">Unpredictable state (dynamic libraries)</td>
</tr>
<tr>
<td align="left">2F</td>
<td align="left">Blockhash dependency</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">
<bold>Exception &#x26; Error Handling Disorders</bold>
</td>
</tr>
<tr>
<td align="left">3A</td>
<td align="left">Unchecked low level call/send return values</td>
</tr>
<tr>
<td align="left">3B</td>
<td align="left">Unexpected throw or revert</td>
</tr>
<tr>
<td align="left">3C</td>
<td align="left">Mishandled out-of-gas exception</td>
</tr>
<tr>
<td align="left">3D</td>
<td align="left">Assert, require or revert violation</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">
<bold>Denial of Service</bold>
</td>
</tr>
<tr>
<td align="left">4A</td>
<td align="left">Frozen Ether</td>
</tr>
<tr>
<td align="left">4B</td>
<td align="left">Ether lost in transfer</td>
</tr>
<tr>
<td align="left">4C</td>
<td align="left">DoS with block gas limit reached</td>
</tr>
<tr>
<td align="left">4D</td>
<td align="left">DoS by exception inside loop</td>
</tr>
<tr>
<td align="left">4E</td>
<td align="left">Insufficient gas griefing</td>
</tr>
<tr>
<td align="left">5</td>
<td align="left">
<bold>Resource Consumption &#x26; Gas Issues</bold>
</td>
</tr>
<tr>
<td align="left">5A</td>
<td align="left">Gas costly loops</td>
</tr>
<tr>
<td align="left">5B</td>
<td align="left">Gas costly pattern</td>
</tr>
<tr>
<td align="left">5C</td>
<td align="left">High gas consumption of variable data type or declaration</td>
</tr>
<tr>
<td align="left">5D</td>
<td align="left">High gas consumption function type</td>
</tr>
<tr>
<td align="left">5E</td>
<td align="left">Under-priced opcodes</td>
</tr>
<tr>
<td align="left">6</td>
<td align="left">
<bold>Authentication &#x26; Access Control Vulnerabilities</bold>
</td>
</tr>
<tr>
<td align="left">6A</td>
<td align="left">Authorization via transaction origin</td>
</tr>
<tr>
<td align="left">6B</td>
<td align="left">Unauthorized accessibility due to wrong function or state variable visibility</td>
</tr>
<tr>
<td align="left">6C</td>
<td align="left">Unprotected self-destruction</td>
</tr>
<tr>
<td align="left">6D</td>
<td align="left">Unauthorized Ether withdrawal</td>
</tr>
<tr>
<td align="left">6E</td>
<td align="left">Signature based vulnerabilities</td>
</tr>
<tr>
<td align="left">7</td>
<td align="left">
<bold>Arithmetic Bugs</bold>
</td>
</tr>
<tr>
<td align="left">7A</td>
<td align="left">Integer over- or underflow</td>
</tr>
<tr>
<td align="left">7B</td>
<td align="left">Integer division</td>
</tr>
<tr>
<td align="left">7C</td>
<td align="left">Integer bugs or arithmetic issues</td>
</tr>
<tr>
<td align="left">8</td>
<td align="left">
<bold>Bad Coding and Language Specifics</bold>
</td>
</tr>
<tr>
<td align="left">8A</td>
<td align="left">Type cast</td>
</tr>
<tr>
<td align="left">8B</td>
<td align="left">Coding error</td>
</tr>
<tr>
<td align="left">8C</td>
<td align="left">Bad coding pattern</td>
</tr>
<tr>
<td align="left">8D</td>
<td align="left">Deprecated source language features</td>
</tr>
<tr>
<td align="left">8E</td>
<td align="left">Write to arbitrary storage location</td>
</tr>
<tr>
<td align="left">8F</td>
<td align="left">Use of assembly</td>
</tr>
<tr>
<td align="left">8G</td>
<td align="left">Incorrect inheritance order</td>
</tr>
<tr>
<td align="left">8H</td>
<td align="left">Variable shadowing</td>
</tr>
<tr>
<td align="left">8I</td>
<td align="left">Misleading source code</td>
</tr>
<tr>
<td align="left">8J</td>
<td align="left">Missing logic, logical errors or dead code</td>
</tr>
<tr>
<td align="left">8K</td>
<td align="left">Insecure contract upgrading</td>
</tr>
<tr>
<td align="left">8L</td>
<td align="left">Inadequate or incorrect logging or documentation</td>
</tr>
<tr>
<td align="left">9</td>
<td align="left">
<bold>Environment Configuration Issues</bold>
</td>
</tr>
<tr>
<td align="left">9A</td>
<td align="left">Short address</td>
</tr>
<tr>
<td align="left">9B</td>
<td align="left">Outdated compiler version</td>
</tr>
<tr>
<td align="left">9C</td>
<td align="left">Floating or no pragma</td>
</tr>
<tr>
<td align="left">9D</td>
<td align="left">Token API violation</td>
</tr>
<tr>
<td align="left">9E</td>
<td align="left">Ethereum update incompatibility</td>
</tr>
<tr>
<td align="left">9F</td>
<td align="left">Configuration error</td>
</tr>
<tr>
<td align="left">10</td>
<td align="left">
<bold>Eliminated/Deprecated Vulnerabilities</bold>
</td>
</tr>
<tr>
<td align="left">10A</td>
<td align="left">Callstack depth limit</td>
</tr>
<tr>
<td align="left">10B</td>
<td align="left">Uninitialized storage pointer</td>
</tr>
<tr>
<td align="left">10C</td>
<td align="left">Erroneous constructor name</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s4-2">
<title>4.2 Academic Classifications</title>
<p>Of the early, frequently cited papers on smart contract vulnerabilities, only some present a novel classification scheme or refine an existing&#x20;one.</p>
<p>
<xref ref-type="bibr" rid="B42">Luu et&#x20;al. (2016)</xref> describe Ethereum smart contract vulnerabilities, such as transaction-ordering dependence (TOD), timestamp dependence and mishandled exceptions and reentrancy, without additional grouping. They define the vulnerabilities and present code snippets, examples of attacks, and affected real live smart contracts. To fix some problems, they propose improvements to the operational semantics of Ethereum, namely guarded transactions (countering TOD), deterministic timestamps and enhanced exception handling.</p>
<p>
<xref ref-type="bibr" rid="B6">Atzei et&#x20;al. (2017)</xref> create one of the first taxonomies for vulnerabilities. At the top, vulnerabilities are classified according to where they appear: in the source code (usually Solidity), at machine level (in the bytecode or related to instruction semantics), or at blockchain level. A mapping to actual examples of attacks and vulnerable smart contracts completes the taxonomy. Although this work is referenced in several other papers, we have found some issues and inconsistencies regarding the classification of concrete vulnerabilities. For example, the vulnerability type called <italic>unpredictable state</italic> is illustrated by an example that is viewed in most other work as an instance of <italic>transaction order dependency</italic>. At the same time another example for problems associated with <italic>dynamic libraries</italic> is assigned to the same class. It can be argued that these two examples exhibit different vulnerabilities, as the underlying causes are inherently different. <xref ref-type="bibr" rid="B16">Dika (2017)</xref> extends the taxonomy of <xref ref-type="bibr" rid="B6">Atzei et&#x20;al. (2017)</xref> by adding further vulnerabilities and assessing the level of criticality.</p>
<p>
<xref ref-type="bibr" rid="B22">Grishchenko et&#x20;al. (2018)</xref> present a formal definition of the semantics of the EVM as well as of the security properties <italic>call integrity</italic>, <italic>atomicity</italic>, <italic>independence of the transaction environment</italic> and <italic>independence of a mutable account state</italic>. If a bytecode satisfies such a property, it is provably free of the corresponding vulnerabilities. As the properties usually are too complex to be established automatically, the authors consider simpler criteria that imply the properties. E.g., the safety property <italic>Single Entrancy</italic> implies call integrity and precludes that a contract suffers from the reentrancy vulnerability (<xref ref-type="bibr" rid="B56">Schneidewind et&#x20;al., 2020</xref>).</p>
</sec>
<sec id="s4-3">
<title>4.3 Classifications by Community Based Projects</title>
<sec id="s4-3-1">
<title>4.3.1 DASP Top 10</title>
<p>The Decentralized Application Security Project (DASP), initiated by the private organization <xref ref-type="bibr" rid="B82">NCC Group (2018)</xref>, identifies ten groups of smart contract vulnerabilities. The project neither defines the listed vulnerabilities nor explains how the vulnerabilities were selected and ranked. Several studies like <xref ref-type="bibr" rid="B17">Durieux et&#x20;al. (2020)</xref> use DASP Top 10 as basis, but note that the ten categories are not sufficient.</p>
</sec>
<sec id="s4-3-2">
<title>4.3.2 SWC Registry</title>
<p>The Smart Contract Weakness Classification Registry (<xref ref-type="bibr" rid="B63">SWC Registry, 2018</xref>) relates smart contract vulnerabilities to the Common Weakness Enumeration (CWE) typology (<xref ref-type="bibr" rid="B46">MITRE Corp, 2006</xref>) and collects test cases. Currently, the registry holds 36 vulnerabilities, with descriptions, references, suggestions for remediation and sample Solidity contracts.</p>
</sec>
</sec>
<sec id="s4-4">
<title>4.4 Mapping of Vulnerability Classifications</title>
<p>Different taxonomies are difficult to map to each other when based on complementary aspects. While several taxonomies build on the early classification of <xref ref-type="bibr" rid="B6">Atzei et&#x20;al. (2017)</xref>, the extensions diverge with respect to the dimensions they consider, like the level where vulnerabilities occur (protocol layer vs. EVM vs. Solidity) or cause vs. effect of vulnerabilities. So far, none of the taxonomies has seen wide adoption. Tools without a vulnerability classification of their own usually refer to DASP or the SWC registry.</p>
<p>Our consolidated taxonomy is compatible with the ones of DASP and SWC. <xref ref-type="table" rid="T7">Table&#x20;7</xref> maps our ten classes, omitting vulnerabilities that have no counterpart in the other taxonomies. We find a correspondence for 34 vulnerabilities, while 20 vulnerabilities documented in literature remain uncovered.</p>
<table-wrap id="T7" position="float">
<label>TABLE 7</label>
<caption>
<p>Mapping of classifications for vulnerabilities.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Class</th>
<th align="center">Vulnerabilty</th>
<th align="center">DASP</th>
<th align="left">SWC</th>
<th align="center">Consolidated</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">1</td>
<td align="left">Reentrancy</td>
<td align="center">1</td>
<td align="left">107</td>
<td align="center">1A</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Call to the unknown</td>
<td align="center">1</td>
<td align="left"/>
<td align="center">1B</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Strict balance equality</td>
<td align="left"/>
<td align="left">132</td>
<td align="center">1C</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Untrusted delegatecall</td>
<td align="center">2</td>
<td align="left">112</td>
<td align="center">1E</td>
</tr>
<tr>
<td align="left">2</td>
<td align="left">Timestamp dependence</td>
<td align="center">8</td>
<td align="left">116</td>
<td align="center">2A</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Transaction order dependence</td>
<td align="center">7</td>
<td align="left">114</td>
<td align="center">2B</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Bad random number gen</td>
<td align="center">6</td>
<td align="left">120</td>
<td align="center">2C</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Confidential info leak</td>
<td align="left"/>
<td align="left">136</td>
<td align="center">2D</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Block hash dependency</td>
<td align="left"/>
<td align="left">120</td>
<td align="center">2F</td>
</tr>
<tr>
<td align="left">3</td>
<td align="left">Unchecked return value</td>
<td align="center">4</td>
<td align="left">104</td>
<td align="center">3A</td>
</tr>
<tr>
<td align="left"/>
<td align="left">DOS with failed call</td>
<td align="center">5</td>
<td align="left">113</td>
<td align="center">3B</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Gasless send</td>
<td align="left"/>
<td align="left">134</td>
<td align="center">3C</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Assert/require violation</td>
<td align="left"/>
<td align="left">110, 123</td>
<td align="center">3D</td>
</tr>
<tr>
<td align="left">4</td>
<td align="left">DOS block gas limit</td>
<td align="center">5</td>
<td align="left">128</td>
<td align="center">4C</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Insufficient gas griefing</td>
<td align="center">5</td>
<td align="left">126</td>
<td align="center">4E</td>
</tr>
<tr>
<td align="left">6</td>
<td align="left">Auth. with tx.origin</td>
<td align="center">2</td>
<td align="left">115</td>
<td align="center">6A</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Wrong visibility</td>
<td align="center">2</td>
<td align="left">100, 108</td>
<td align="center">6B</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Unprotected selfdestruct</td>
<td align="center">5</td>
<td align="left">106</td>
<td align="center">6C</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Unprotected send/withdraw</td>
<td align="left"/>
<td align="left">105</td>
<td align="center">6D</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Signature issues</td>
<td align="left"/>
<td align="left">117, 121, 122, 133</td>
<td align="center">6E</td>
</tr>
<tr>
<td align="left">7</td>
<td align="left">Over/underflow</td>
<td align="center">3</td>
<td align="left">101</td>
<td align="center">7A</td>
</tr>
<tr>
<td align="left">8</td>
<td align="left">Coding error</td>
<td align="left"/>
<td align="left">129</td>
<td align="center">8B</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Deprecated Solidity</td>
<td align="left"/>
<td align="left">111</td>
<td align="center">8D</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Arbitrary storage write</td>
<td align="left"/>
<td align="left">124</td>
<td align="center">8E</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Arbitrary jump</td>
<td align="left"/>
<td align="left">127</td>
<td align="center">8F</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Incorrect inheritance order</td>
<td align="left"/>
<td align="left">125</td>
<td align="center">8G</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Variable shadowing</td>
<td align="left"/>
<td align="left">119</td>
<td align="center">8H</td>
</tr>
<tr>
<td align="left"/>
<td align="left">malicious code</td>
<td align="left"/>
<td align="left">130</td>
<td align="center">8I</td>
</tr>
<tr>
<td align="left"/>
<td align="left">logical error or dead code</td>
<td align="left"/>
<td align="left">131</td>
<td align="center">8J</td>
</tr>
<tr>
<td align="left">9</td>
<td align="left">Short address</td>
<td align="center">9</td>
<td align="left"/>
<td align="center">9A</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Outdated compiler version</td>
<td align="left"/>
<td align="left">102</td>
<td align="center">9B</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Floating pragma</td>
<td align="left"/>
<td align="left">103</td>
<td align="center">9C</td>
</tr>
<tr>
<td align="left">10</td>
<td align="left">Uninit. memory, storage</td>
<td align="left"/>
<td align="left">109</td>
<td align="center">10B</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Constructor</td>
<td align="left"/>
<td align="left">118</td>
<td align="center">10C</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>The mapping is not exact in the sense that categories in the same line of the table may overlap only partially. For example, DASP 1 covers both &#x201c;reentrancy&#x201d; and &#x201c;call to the unknown&#x201d;, while SWC only mentions &#x201c;reentrancy&#x201d; in 107 but not &#x201c;call to the unknown&#x201d;, and our taxonomy lists them separately. Moreover, some categories in our taxonomy list several SWC entries or split up categories from&#x20;DASP.</p>
<p>With only nine genuine categories and one &#x201c;catch-all&#x201d;, DASP is comparatively coarse. SWC covers a range of 36 vulnerabilities, but 22 of our categories are missing. Both community classifications seem inactive: SWC was last updated in March 2020, and the DASP 10 website with the first iteration of the project is dated&#x20;2018.</p>
</sec>
</sec>
<sec id="s5">
<title>5 Methods Used in Automated Analysis</title>
<p>In this section, we give an overview of the methods used to detect vulnerabilities in smart contracts. For other summaries, differing in breadth and depth, see the surveys (<xref ref-type="bibr" rid="B4">Almakhour et&#x20;al., 2020</xref>; <xref ref-type="bibr" rid="B9">Huasan Chen et&#x20;al., 2020</xref>; <xref ref-type="bibr" rid="B15">di Angelo and Salzer, 2019</xref>; <xref ref-type="bibr" rid="B20">Garfatta et&#x20;al., 2021</xref>; <xref ref-type="bibr" rid="B30">Hu et&#x20;al., 2021</xref>; <xref ref-type="bibr" rid="B33">Kim and Ryu, 2020</xref>; <xref ref-type="bibr" rid="B41">L&#xf3;pez Vivar et&#x20;al., 2020</xref>; <xref ref-type="bibr" rid="B51">Praitheeshan et&#x20;al., 2020b</xref>; <xref ref-type="bibr" rid="B54">Samreen and Alalfi, 2020</xref>; <xref ref-type="bibr" rid="B59">Singh et&#x20;al., 2020</xref>; <xref ref-type="bibr" rid="B66">Tolmach et&#x20;al., 2021</xref>).</p>
<p>We discuss four groups of methods: static code analysis, dynamic code analysis, formal specification and verification, and miscellany. The distinction between static analysis and formal methods is to some extent arbitrary, as the latter are mostly used in a static context. Moreover, methods like symbolic execution regularly use formal methods as a black box. A key difference is the aspiration of formal methods to be rigorous, requiring correctness and striving for completeness. In this sense abstract interpretation should be rather considered a formal method, but it resembles symbolic execution and therefore is presented&#x20;there.</p>
<sec id="s5-1">
<title>5.1 Static Code Analysis</title>
<p>Static code analysis inspects code without executing it in its regular environment. The analysis starts either from the source or the machine code of the contract. In most cases, the aim is to identify code patterns that indicate vulnerabilities. Some tools also compute input data to trigger the suspected vulnerability and check whether the attack has been effective, thereby eliminating false positives.</p>
<p>To put the various methods into perspective, we take a closer look at the process of compiling a program from a high-level language like Solidity to machine code (<xref ref-type="bibr" rid="B1">Aho et&#x20;al., 2007</xref>; <xref ref-type="bibr" rid="B23">Grune et&#x20;al., 2012</xref>). The sequence of characters first becomes a stream of lexical <italic>tokens</italic> (comprising e.g. the letters of an identifier). The parser transforms the linear stream of tokens into an <italic>abstract syntax tree (AST)</italic> and performs semantic checks. The subsequent phases receive the AST in the form of an <italic>intermediate representation (IR)</italic>. Now several rounds of code analysis, code optimization, and code instrumentation may take place, with the output in each round again in IR. In the final phase, the IR is transformed into code for the target machine, like the EVM in the case of Ethereum. This last step linearizes any hierarchical structures left, by arranging code fragments into a sequence and by converting control flow dependencies to jump instructions.</p>
<sec id="s5-1-1">
<title>5.1.1 Control Flow Graphs</title>
<p>For code analysis, a graph representation of the code is preferable, as it provides access to the program structure and the control flow, and eliminates irrelevant details like variable naming or register allocation. Such representations are readily available when starting from source code, as AST and IR are by-products of compilation. E.g., some tools search the AST for <italic>syntactic patterns</italic> characteristic of vulnerable contracts. This approach is fast, but lacks accuracy if a vulnerability cannot be adequately characterized by such patterns.</p>
<p>Recovering a <italic>control flow graph (CFG)</italic> from machine code is inherently more complex. Its nodes correspond to the <italic>basic blocks</italic> of a program. A basic block is a sequence of instructions executed linearly one after the other, ending with the first instruction that potentially alters the flow of control, must notably conditional and unconditional jumps. Nodes are connected by a directed edge if the corresponding basic blocks may be executed one after the other. The reachability of code is difficult to determine, as indirect jumps retrieve the target address from a register or the stack, where it has been stored by an earlier computation. Backward slicing resolves many situations by tracking down the origins of the jump targets. If this fails, the analysis has the choice between over- and under-approximation, by either treating all blocks as potential successors or by ignoring the undetectable successors.</p>
<p>Some tools go on by transforming the CFG (and a specification of the vulnerability) to a restricted form of Horn Logic called <italic>DataLog</italic>, which is not computationally universal, but admits efficient reasoning algorithms (see e.g. (<xref ref-type="bibr" rid="B61">Soufle, 2016</xref>)).</p>
<p>Starting from the CFG, <italic>decompilation</italic> attempts to reverse also the other phases of the compilation process, with the aim to obtain source from machine code. The result is intended for manual inspection by humans, as it usually is not fully functional and does not compile.</p>
</sec>
<sec id="s5-1-2">
<title>5.1.2 Symbolic Execution</title>
<p>
<italic>Symbolic execution</italic> is a method that executes the bytecode like a regular machine would do, but with symbols as placeholders for arbitrary input and environment data. Any operation on such symbols results in a symbolic expression that is passed to the next operation. In the case of a fork, all branches are explored, but they are annotated with complementary symbolic conditions that restrict the symbols to those values that will lead to the execution of the particular branch. At intervals, an <italic>SMT (Satisfiability Modulo Theory) solver</italic> is invoked to check whether the constraints on the current path are still simultaneously satisfiable. If they are contradictory, the path does not correspond to an actual execution trace and can be skipped. Otherwise, exploration continues. When symbolic execution reaches code that matches a vulnerability pattern, a potential vulnerability is reported. If, in addition, the SMT solver succeeds in computing a satisfying assignment for the constraints on the path, it can be used to devise an exploit that verifies the existence of the vulnerability.</p>
<p>The effectiveness of symbolic execution is limited by several factors. First, the number of paths grows exponentially with depth, so the analysis has to stop at a certain point. Second, some aspects of the machine are difficult to model precisely, like the relationship between storage and memory cells, or complex operations like hash functions. Third, SMT solvers are limited to certain types of constraints, and even for these, the evaluation may time out instead of detecting (un)satisfiability.</p>
<p>
<italic>Concolic execution</italic> interleaves symbolic execution with phases where the program is run with concrete input (<italic>concolic</italic> &#x3d; <italic>conc</italic>rete &#x2b; symb<italic>olic</italic>). Symbolic execution of the same path then yields formal constraints characterizing the path. After negating some constraint, the SMT solver searches for a satisfying assignment. Using it as the input for the next cycle leads, by construction, to the exploration of a new path. This way, concolic execution achieves a better coverage of the&#x20;code.</p>
<p>
<italic>Taint analysis</italic> marks values from the input, the environment or from storage with tags (&#x201c;taints&#x201d;). Propagation rules define how tags are transformed by the instructions. Some vulnerabilities can be identified by inspecting the tags arriving at specific code locations. Taint analysis is often used in combination with other methods, like symbolic execution.</p>
</sec>
<sec id="s5-1-3">
<title>5.1.3 Abstract Interpretation</title>
<p>Most static methods for vulnerability detection are neither sound nor complete. They may report vulnerabilities where there are none (false positives, unsoundness), and may fail to detect vulnerabilities present in the code (false negatives, incompleteness). The first limitation arises from the inability to specify necessary conditions for the presence of vulnerabilities that can be effectively checked. The second one is a consequence of the infeasibly large number of computation paths to explore, and the difficulty to come up with sufficient conditions that can be checked.</p>
<p>
<italic>Abstract interpretation</italic> (<xref ref-type="bibr" rid="B14">Cousot and Cousot, 2004</xref>) aims at completeness by focusing on properties that can be evaluated for all execution traces. As an example, abstract interpretation may split the integer range into the three groups zero, positive, and negative values. Instead of using symbolic expressions to capture the precise result of instructions, abstract interpretation reasons about how the property of belonging to one of the three groups propagates with each instruction. This way it may be possible to show that the divisors in the code always belong to the positive group, ruling out division by zero, for any input. The challenge is to come up with a property that is strong enough to entail the absence of a particular vulnerability, but weak enough to allow for the exploration of the search space. Contrary to symbolic execution and most other methods, this approach does not indicate the presence of a vulnerability, but proves that a contract is definitely free from a certain vulnerability (safety guarantee).</p>
</sec>
</sec>
<sec id="s5-2">
<title>5.2 Dynamic Code Analysis</title>
<p>Dynamic code analysis checks the behavior of code, while it processes data in its &#x201c;natural&#x201d; environment. The most common method is testing, where the code is run with selected inputs and its output is compared to the expected result.</p>
<p>
<italic>Fuzzing</italic> is a technique that runs a program with a large number of randomized inputs, in order to provoke crashes or otherwise unexpected behavior.</p>
<p>
<italic>Code instrumentation</italic> augments the program with additional instructions that check for abnormal behavior or monitor performance during runtime. An attempt to exploit a vulnerability then may trigger an exception and terminate execution. As an example, a program could be systematically extended by assertions ensuring that arithmetic operations do not cause an overflow.</p>
<p>
<italic>Machine instrumentation</italic> is similar to code instrumentation, but adds the additional checks on machine level, enforcing them for all contracts. E.g., an extended EVM might check for overflows at every arithmetic operation. Some authors go even further by proposing changes to the transaction semantics or the Ethereum protocol, in order to prevent vulnerabilities. While interesting from a conceptual point of view, such proposals are difficult to realize, as they require a hard fork affecting also the contracts already deployed.</p>
<p>
<italic>Mutation testing</italic> is a technique that evaluates the quality of test suites. The source code of a program is subjected to small syntactic changes, known as mutations, which mimic common errors in software development. For example, a mutation might change a mathematical operator or negate a logical condition. If a test suite is able to detect such artificial mistakes, it is more likely that it also finds real programming errors.</p>
</sec>
<sec id="s5-3">
<title>5.3 Formal Specification and Verification</title>
<p>Programmers prefer high level programming languages over assembly, as it allows them to express the program logic in a more abstract way, reducing the rate of errors and speeding up development. Modeling smart contracts on an even higher level of abstraction offers additional benefits, like formal proofs of contract properties. The core logic of many blockchain applications can be modeled as <italic>finite state machines (FSMs)</italic>, with constraints guarding the transitions. As FSMs are simple formal objects, techniques like <italic>model checking</italic> can be used to verify properties specified in variants of computation tree logic. Once the model is finished, tools translate the FSM to conventional source code, where additional functionality can be&#x20;added.</p>
<p>The high cost of errors and the small size of blockchain programs makes them a promising target for formal verification approaches. Unlike testing, which detects the presence of bugs, formal verification aims at proving the absence of bugs and vulnerabilities. As a necessary prerequisite, the execution environment and the semantics of the programming language or the machine need to be formalized. Then functional and security properties can be added, expressed in some <italic>specification language</italic>. Finally, automated theorem provers or semi-automatic proof assistants can be used to show that the given program satisfies the properties.</p>
<p>
<italic>F&#x2a;</italic> is a functional programming language with a proof assistant for program verification. <xref ref-type="bibr" rid="B7">Bhargavan et&#x20;al. (2016)</xref> develop a F&#x2a; framework that translates both, Solidity source code and EVM bytecode, to F&#x2a; in order to verify high- and low-level properties. <xref ref-type="bibr" rid="B22">Grishchenko et&#x20;al. (2018)</xref> use F&#x2a; to specify the small-step semantics of the&#x20;EVM.</p>
<p>
<italic>KEVM</italic> is a formal specification of the EVM in the specification language K (<xref ref-type="bibr" rid="B29">Hildenbrandt et&#x20;al., 2018</xref>). From the specification, the K framework is able to generate tools like interpreters and model-checkers, but also deductive program verifiers.</p>
<p>
<italic>Horn logic</italic> is a restricted form of first-order logic, but still computationally universal. It forms the basis of logic-oriented programming and is attractive as a specification language, as Horn formulas can be read as if-then&#x20;rules.</p>
</sec>
<sec id="s5-4">
<title>5.4 Miscellany</title>
<p>Like in many other areas, methods from <italic>machine learning</italic> gain popularity also in smart contract analysis. Techniques like long-short term memory (LSTM) modeling, convolution neural networks or N-gram language models may achieve high test accuracy. A common challenge is to obtain a labeled training set that is large enough and of sufficient quality.</p>
</sec>
<sec id="s5-5">
<title>5.5 Usage of Methods in Tools</title>
<p>
<xref ref-type="fig" rid="F7">Figure&#x20;7</xref> shows the number of tools using one of the methods above. Formal reasoning and constraint solving is most frequently employed, due to the many tools integrating formal methods as a black box, like constraint solvers to prune the search space or Datalog reasoners to check intermediate representations. Proper formal verification, automated or via proof assistants, is rare, even though smart contracts, due to their limited size and the value at stake, seem to be a promising application domain. This may be due to the specific knowledge required for this approach.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>Number of analysis tools employing a particular method.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g007.tif"/>
</fig>
<p>Next in popularity are the construction of control flow graphs (46, 32.9%), symbolic execution (44, 31.4%), and the use of intermediate representations and specification languages (37, 26.4%).</p>
</sec>
</sec>
<sec id="s6">
<title>6 Tools for Automated Security Analysis</title>
<p>The 24 SLRs and surveys as well as the 149 primary studies we finally selected describe a total of 140 tools for analyzing the security of Ethereum smart contracts, with 83 published open source. In the <xref ref-type="sec" rid="s13">Supplementary Material</xref>, we describe the tools and list their functionalities and methods.</p>
<sec id="s6-1">
<title>6.1 Functionalities</title>
<p>
<xref ref-type="fig" rid="F8">Figure&#x20;8</xref> shows the prevalence of the functionalities provided by the&#x20;tools.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Number of analysis tools providing a particular functionality.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g008.tif"/>
</fig>
<p>
<italic>Code level.</italic> More than half of the tools analyze Solidity code (86, 61.4%) or bytecode (73, 52.1%), while a few (19, 13.6%) work at both levels.</p>
<p>
<italic>Aim.</italic> Next to the detection of vulnerabilities, security analysis comprises the verification of correctness of code, gas/resource analysis, decompilation and disassembly, and correct-by-design approaches. More than half of the tools (79, 56.4%) aim at detecting vulnerabilities, almost a third (42, 30.0%) is concerned with proving the absence of vulnerabilities, and 17 (12.1%) analyze resources.</p>
<p>
<italic>Interaction.</italic> Some tools go the extra length of verifying the vulnerabilities they found by providing exploits or suggesting remedies. Almost a third (41, 29.2%) allows for full automation or bulk analysis, while 27 (19.2%) are aimed at manual analysis or development support.</p>
<p>
<italic>Analysis Type.</italic> The vast majority of tools (113, 80.7%) employs static methods, about a third (43, 30.7%) uses dynamic methods, and several (16, 11.4%) use&#x20;both.</p>
</sec>
<sec id="s6-2">
<title>6.2 Publication Trends</title>
<p>
<xref ref-type="fig" rid="F9">Figure&#x20;9</xref> shows a break-down of the tools by the year of publication. The development of new tools has increased rapidly since 2018, with more than half of them published open source. Over a third of the open source tools (25) received updates in 2020, while 19 tools were updated within the first 7&#xa0;months of&#x20;2021.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>Publication and maintenance of tools. The numbers for 2021 include the first 7&#xa0;months&#x20;only.</p>
</caption>
<graphic xlink:href="fbloc-05-814977-g009.tif"/>
</fig>
</sec>
<sec id="s6-3">
<title>6.3 Maintenance of Tools</title>
<p>Tools that are not open source are difficult to assess, hence we only consider open source tools when taking a closer look at their maintenance status.</p>
<p>Many tools were developed as a proof-of-concept for a method described in a scientific publication, and have not been maintained since their release. While this is common practice in academia, potential users prefer tools that are maintained and where reported issues are addressed in a timely manner.</p>
<p>
<xref ref-type="table" rid="T8">Table&#x20;8</xref> lists twenty tools that have been around for some time, are maintained, and are apparently used. More precisely, we include a tool if it was released in 2019 or earlier, shows continuous update activities, and has some filed issues that were addressed by the authors of the tool. We exclude newer tools, since they have not yet a substantial maintenance history.</p>
<table-wrap id="T8" position="float">
<label>TABLE 8</label>
<caption>
<p>Tools published in or before 2019 that are maintained and in&#x20;use.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Tool</th>
<th align="center">Published</th>
<th align="center">Public repository at <ext-link ext-link-type="uri" xlink:href="http://github.com">github.com</ext-link>
</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">ContractLarva</td>
<td align="left">2019&#x2013;08</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/gordonpace/contractLarva">gordonpace/contractLarva</ext-link>
</td>
</tr>
<tr>
<td align="left">Ethersplay</td>
<td align="left">2018&#x2013;05</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/crytic/ethersplay">crytic/ethersplay</ext-link>
</td>
</tr>
<tr>
<td align="left">Gigahorse</td>
<td align="left">2019&#x2013;01</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/nevillegrech/gigahorse-toolchain">nevillegrech/gigahorse-toolchain</ext-link>
</td>
</tr>
<tr>
<td align="left">ILF</td>
<td align="left">2019&#x2013;11</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/eth-sri/ilf">eth-sri/ilf</ext-link>
</td>
</tr>
<tr>
<td align="left">KEVM</td>
<td align="left">2019&#x2013;07</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/kframework/evm-semantics">kframework/evm-semantics</ext-link>
</td>
</tr>
<tr>
<td align="left">
<italic>KEVM Verifier</italic>
</td>
<td align="left">2018&#x2013;10</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/runtimeverification/verified-smart-contracts">runtimeverification/verified-smart-contracts</ext-link>
</td>
</tr>
<tr>
<td align="left">MadMax</td>
<td align="left">2018&#x2013;09</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/nevillegrech/MadMax">nevillegrech/MadMax</ext-link>
</td>
</tr>
<tr>
<td align="left">Manticore</td>
<td align="left">2017&#x2013;02</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/trailofbits/manticore">trailofbits/manticore</ext-link>
</td>
</tr>
<tr>
<td align="left">Mythril</td>
<td align="left">2017&#x2013;10</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/ConsenSys/mythril">ConsenSys/mythril</ext-link>
</td>
</tr>
<tr>
<td align="left">Oyente</td>
<td align="left">2016&#x2013;01</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/enzymefinance/oyente">enzymefinance/oyente</ext-link>
</td>
</tr>
<tr>
<td align="left">PASO</td>
<td align="left">2019&#x2013;09</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/aphd/paso">aphd/paso</ext-link>
</td>
</tr>
<tr>
<td align="left">Remix-IDE</td>
<td align="left">2014&#x2013;11</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/ethereum/remix-project">ethereum/remix-project</ext-link>
</td>
</tr>
<tr>
<td align="left">Securify</td>
<td align="left">2018&#x2013;09</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/eth-sri/securify2">eth-sri/securify2</ext-link>
</td>
</tr>
<tr>
<td align="left">Slither</td>
<td align="left">2018&#x2013;10</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/crytic/slither">crytic/slither</ext-link>
</td>
</tr>
<tr>
<td align="left">SmartBugs</td>
<td align="left">2019&#x2013;10</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/smartbugs/smartbugs">smartbugs/smartbugs</ext-link>
</td>
</tr>
<tr>
<td align="left">SmartCheck</td>
<td align="left">2018&#x2013;05</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/smartdec/smartcheck">smartdec/smartcheck</ext-link>
</td>
</tr>
<tr>
<td align="left">
<sc>solc-verify</sc>
</td>
<td align="left">2019&#x2013;07</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/SRI-CSL/solidity/blob/0.7/SOLC-VERIFY-README.md">SRI-CSL/solidity/blob/0.7/SOLC-VERIFY-README.md</ext-link>
</td>
</tr>
<tr>
<td align="left">Solhint</td>
<td align="left">2017&#x2013;10</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/protofire/solhint">protofire/solhint</ext-link>
</td>
</tr>
<tr>
<td align="left">teEther</td>
<td align="left">2019&#x2013;02</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/nescio007/teether">nescio007/teether</ext-link>
</td>
</tr>
<tr>
<td align="left">Vertigo</td>
<td align="left">2019&#x2013;08</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/JoranHonig/vertigo">JoranHonig/vertigo</ext-link>
</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
</sec>
<sec id="s7">
<title>7 Benchmarks and Test Sets</title>
<p>In this section, we give an overview of the benchmarks and test sets for smart contract analysis that we identified in SLRs, surveys and primary studies. For each of them, <xref ref-type="table" rid="T9">Table&#x20;9</xref> lists the publication, the project name and a link to a repository (if available). The number of contracts per test set (fourth column) varies between 6 and 47&#x2009;541. More than half of the projects also include contracts that were manually verified to be true or false positives with respect to some property, in order to serve as a ground truth. Their number is given in the fifth column. Flags indicate the availability of analysis results, source code, bytecode, and deployment addresses on Ethereum&#x2019;s main chain. Three collections additionally provide exploits, marked in the last column.</p>
<table-wrap id="T9" position="float">
<label>TABLE 9</label>
<caption>
<p>Benchmarks/test sets for smart contracts without accompanying&#x20;tool.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Publication</th>
<th align="center">Project/tool</th>
<th align="center">Repository</th>
<th align="center">no. contracts</th>
<th align="center">Ground truth</th>
<th align="center">Analysis results</th>
<th align="center">Solidity</th>
<th align="center">Bytecode</th>
<th align="center">Addresses</th>
<th align="center">Exploits</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">
<xref ref-type="bibr" rid="B68">Trail of Bits (2020)</xref>
</td>
<td align="left">(Not So) Smart Contracts</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/crytic/not-so-smart-contracts">url</ext-link>
</td>
<td align="center">25</td>
<td align="center">25</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B63">SWC Registry (2018)</xref>
</td>
<td align="left">SWC Registry</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://swcregistry.io/">url</ext-link>
</td>
<td align="center">122</td>
<td align="center">122</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">&#x2013;</td>
<td align="left">EVM Analyzer</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/ConsenSys/evm-analyzer-benchmark-suite">url</ext-link>
</td>
<td align="center">38</td>
<td align="center">38</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">&#x2013;</td>
<td align="left">Ethernaut</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://ethernaut.openzeppelin.com/">url</ext-link>
</td>
<td align="center">21</td>
<td align="center">(&#x2713;)</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">&#x2013;</td>
<td align="left">Capture the Ether</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://capturetheether.com/challenges/">url</ext-link>
</td>
<td align="center">17</td>
<td align="center">(&#x2713;)</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B11">Jiachi Chen et&#x20;al. (2020)</xref>
</td>
<td align="left">&#x2013;</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/Jiachi-Chen/TSE-ContractDefects">url</ext-link>
</td>
<td align="center">587</td>
<td align="center">587</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B25">Gupta (2019)</xref>, <xref ref-type="bibr" rid="B26">Gupta et&#x20;al. (2020)</xref>
</td>
<td align="left">&#x2013;</td>
<td align="left">&#x2013;</td>
<td align="center">40</td>
<td align="center">40</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B50">Praitheeshan et&#x20;al. (2020a)</xref>
</td>
<td align="left">&#x2013;</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/ppraithe/on-chain-wallet-contracts">url</ext-link>
</td>
<td align="center">49</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B76">Ye et&#x20;al. (2019a)</xref>,<xref ref-type="bibr" rid="B77">Ye et&#x20;al. (2019b)</xref>
</td>
<td align="left">&#x2013;</td>
<td align="left">&#x2013;</td>
<td align="center">3&#x2009;884</td>
<td align="center">(&#x2713;)</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B78">Zhang et&#x20;al. (2020)</xref>
</td>
<td align="left">JiuZhou</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/xf97/JiuZhou/">url</ext-link>
</td>
<td align="center">146</td>
<td align="center">146</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B80">Zhou et&#x20;al. (2020)</xref>
</td>
<td align="left">&#x2013;</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://drive.google.com/file/d/1xLssDxYWyKFCwS5HUrQaSex0uwJRSvDi/view">url</ext-link>
</td>
<td align="center">2&#x2009;949</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B31">Jiang et&#x20;al. (2018)</xref>; <xref ref-type="bibr" rid="B45">Mei et&#x20;al. (2019)</xref>
</td>
<td align="left">ContractFuzzer</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/gongbell/ContractFuzzer/tree/master/examples">url</ext-link>
</td>
<td align="center">416</td>
<td align="center">416</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B27">Hartel and van Staalduinen (2019)</xref>
</td>
<td align="left">ContractVis</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/pieterhartel/Truffle-tests-for-free">url</ext-link>
</td>
<td align="center">1&#x2009;112</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B71">Haijun Wang et&#x20;al. (2019)</xref>, <xref ref-type="bibr" rid="B72">Haijun Wang et&#x20;al. (2020)</xref>
</td>
<td align="left">ContraMaster/Vultron</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/ntu-SRSLab/vultron">url</ext-link>
</td>
<td align="center">21</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B10">Chen et&#x20;al. (2021)</xref>
</td>
<td align="left">DefectChecker</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/Jiachi-Chen/DefectChecker/">url</ext-link>
</td>
<td align="center">581</td>
<td align="center">581</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B38">Liu et&#x20;al. (2018)</xref>
</td>
<td align="left">Ether&#x2a; (S-gram)</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/njaliu/sgram-artifact">url</ext-link>
</td>
<td align="center">1&#x2009;500</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B35">Kolluri et&#x20;al. (2019)</xref>
</td>
<td align="left">
<sc>EthRacer</sc>
</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://drive.google.com/file/d/1190VXwu502M-vgT8yyuFp0lFUVlxnMhO">url</ext-link>
</td>
<td align="center">8&#x2009;139</td>
<td align="center">82</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B40">Liu et&#x20;al. (2020)</xref>
</td>
<td align="left">
<sc>FairCon</sc>
</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1145/3410249">url</ext-link>
</td>
<td align="center">17</td>
<td align="center">17</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B75">Yang et&#x20;al. (2020)</xref>
</td>
<td align="left">
<italic>MSgram analysis</italic>
</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/yz1019117968/MSgramDataset">url</ext-link>
</td>
<td align="center">7&#x2009;124</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B73">Shuai Wang et&#x20;al. (2019)</xref>
</td>
<td align="left">
<sc>NPChecker</sc>
</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://www.dropbox.com/sh/90tm5drmeep9bqy/AAB0jKxkIevNct2eIvsYb7Oqa">url</ext-link>
</td>
<td align="center">50</td>
<td align="center">50</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B42">Luu et&#x20;al. (2016)</xref>
</td>
<td align="left">
<sc>Oyente</sc>
</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/oyente/benchmarks">url</ext-link>
</td>
<td align="center">17&#x2009;554</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B3">Albert et&#x20;al. (2019)</xref>
</td>
<td align="left">
<sc>Safevm</sc>
</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/costa-group/EthIR/tree/master/ethir/test/safevm">url</ext-link>
</td>
<td align="center">&#x223c;&#x2009;10&#x2009;000</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B52">Rodler et&#x20;al. (2018)</xref>
</td>
<td align="left">Sereum</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/uni-due-syssec/eth-reentrancy-attack-patterns">url</ext-link>
</td>
<td align="center">6</td>
<td align="center">6</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B47">Nguyen et&#x20;al. (2020)</xref>
</td>
<td align="left">sFuzz</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/renardbebe/Smart-Contract-Benchmark-Suites">url</ext-link>
</td>
<td align="center">46&#x2009;186</td>
<td align="center">350<xref ref-type="table-fn" rid="Tfn2">
<sup>a</sup>
</xref>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B17">Durieux et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B18">Ferreira et&#x20;al. (2020a)</xref>,<xref ref-type="bibr" rid="B19">Ferreira et&#x20;al. (2020a)</xref>
</td>
<td align="left">SmartBugs</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/smartbugs/smartbugs/">url</ext-link>
</td>
<td align="center">47&#x2009;541</td>
<td align="center">143</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B2">Akca et&#x20;al. (2019)</xref>
</td>
<td align="left">SolAnalyser</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/sefaakca/Dataset">url</ext-link>
</td>
<td align="center">1&#x2009;839</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B37">Liao et&#x20;al. (2019)</xref>
</td>
<td align="left">SoliAudit</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://goo.gl/UAUpK5/">url</ext-link>
</td>
<td align="center">17&#x2009;980</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B44">Marescotti et&#x20;al. (2020)</xref>
</td>
<td align="left">Solicitous</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://scm.ti-edu.ch/repogit/verify-solidity-contracts.git">url</ext-link>
</td>
<td align="center">28&#x2009;590</td>
<td align="left"/>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B21">Ghaleb and Pattabiraman (2020)</xref>
</td>
<td align="left">SolidiFI</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/smartbugs/SolidiFI-benchmark">url</ext-link>
</td>
<td align="center">350</td>
<td align="center">350</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B79">Zhang et&#x20;al. (2019)</xref>
</td>
<td align="left">SolidityCheck</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/xf97/SolidityCheck/blob/master/test%20data%20set.zip">url</ext-link>
</td>
<td align="center">1&#x2009;363</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B28">Hegedus (2018)</xref>
</td>
<td align="left">SolMet</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/chicxurug/wetseb-2018-data">url</ext-link>
</td>
<td align="center">10&#x2009;206</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B49">Permenev et&#x20;al. (2020)</xref>
</td>
<td align="left">VerX</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://github.com/eth-sri/verx-benchmarks">url</ext-link>
</td>
<td align="center">13</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">
<xref ref-type="bibr" rid="B32">Kalra et&#x20;al. (2018)</xref>
</td>
<td align="left">
<sc>Zeus</sc>
</td>
<td align="left">
<ext-link ext-link-type="uri" xlink:href="https://docs.google.com/spreadsheets/d/12_g-pKsCtp3lUmT2AXngsqkBGSEoE6xNH51e-of_Za8/edit&#x23;gid&#x3d;1894239238">url</ext-link>
</td>
<td align="center">1&#x2009;524</td>
<td align="left"/>
<td align="center">
<italic>&#x2713;</italic>
</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn id="Tfn2">
<label>a</label>
<p>ground truth taken from project SolidiFi.</p>
</fn>
<fn>
<p>(&#x2713;) size of ground truth unclear</p>
</fn>
</table-wrap-foot>
</table-wrap>
<p>The first group in the table refers to collections of vulnerable contracts written in Solidity. They are not associated with any tool and provide neither analysis results, nor corresponding bytecodes, nor deployment addresses for Ethereum&#x2019;s main&#x20;chain.</p>
<p>The second group in this table comprises projects aimed at the analysis of vulnerabilities, but without accompanying tool. They partially provide Ethereum addresses, Solidity sources, and analysis results.</p>
<p>The third and largest group consists of tools that provide test data. Most provide Solidity sources and/or Ethereum addresses, four of them also bytecode. Two tools, VerX and Zeus, offer only analysis results, but neither the bytecode, the source code nor the deployment address of the contracts analyzed, which makes it hard to verify the results.</p>
</sec>
<sec id="s8">
<title>8 Discussion</title>
<p>In this section, we present our observations regarding the vulnerabilities, methods, tools, and benchmarks we found in the literature.</p>
<sec id="s8-1">
<title>8.1 Vulnerabilities</title>
<sec id="s8-1-1">
<title>8.1.1 Coverage</title>
<p>We collected 54 vulnerabilities documented in literature. While reentrancy is an early and well analyzed vulnerability, most others have received significantly less attention. This uneven coverage is also reflected in the tools, which address vulnerabilities in diverse combinations, with reentrancy being the most prominent&#x20;one.</p>
</sec>
<sec id="s8-1-2">
<title>8.1.2 Taxonomies</title>
<p>The Ethereum ecosystem still lacks a coordinated process for collecting and structuring vulnerabilities. Collaborative efforts like the SWC registry are valuable resources, but as plain collections lack structural information and usability. We find several proposals from the community and from scholars regarding Ethereum-specific taxonomies, none of which can be considered established. Despite the narrow scope, blockchain and Ethereum, we do not perceive a convergence of taxonomies. In fact, the proposed taxonomies often are complementary rather than extensions or refinements. This makes it difficult to map the different taxonomies to each other and leaves room for discussion.</p>
<p>One reason may be the continued rapid development on all levels, including blockchain protocols and blockchain programming. Another one are the different angles for categorizing vulnerabilities. For detection, it is natural to consider the causes of vulnerabilities, as this is what tools can search for, like storage locations accessible to anyone. A second dimension are the effects of vulnerabilities, like denial of service or unauthorized withdrawal. Different causes can result in the same effect, while a technical cause may contribute to various effects. A third perspective looks at the motives of a potential attacker, like economic incentives or the demonstration of skill and power, relevant e.g. when trying to assess the severity of vulnerabilities. Authors of tools have their own perspective; the employed methods determine how vulnerabilities are defined and related.</p>
<p>Taxonomies mixing cause, effect and attacker intentions may be comprehensive, but are difficult to use when the aim is, for instance, to compare tools or to match suitable test sets with tools, as the vulnerabilities cannot be clearly assigned. A hierarchical, multi-level classification without overlaps, on the other hand, may be too strict to cater for multi-faceted vulnerabilities. Altogether, we see the need for more work on differentiating and systematizing vulnerabilities as well as on assessing their severity.</p>
</sec>
</sec>
<sec id="s8-2">
<title>8.2 Methods</title>
<p>Searching for vulnerabilities, in source code or on machine level, is not limited to blockchains. Static and dynamic program analysis are as old as programming, and most methods we found are well-established in program analysis at large. Early on, researchers on program analysis demonstrated that methods like symbolic execution are able to detect vulnerabilities of smart contracts and to generate exploits. What makes blockchain programs a particularly attractive domain, is their limited size and the drastic consequences bugs may have. The former results in search spaces that are small compared e.g. to those of desktop programs, which makes approaches feasible that rely on the exploration of the entire search space. Thus, the application of known methods within the specific context of Ethereum may also lead to new insights and refinements outside.</p>
<p>Researchers from the blockchain community, on the other hand, occasionally present prototypes for their approaches that disregard the state of the art in program analysis. This is not always apparent from the publication, where the authors may state in a side note that their algorithm works on control flow graphs or extracts the entry points of the contract as starting point. Only when checking the code it becomes apparent whether the tool is a proof-of-concept with heuristics tied e.g. to a particular version of the Solidity compiler, or whether the tool performs thorough code analysis.</p>
<p>Publications surveying the methods used by the tools, classify them along familiar lines, like static vs. dynamic analysis, probabilistic/heuristic vs. deductive analysis, but hardly go beyond. A technical in-depth comparison of detection approaches is still lacking, as it is beyond the scope of pure surveys. It would be desirable 1) to scrutinize which methods are suited to which extent for detecting particular vulnerabilities, or inversely, 2) to determine for each vulnerability, which methods can detect it to which degree or under which conditions.</p>
</sec>
<sec id="s8-3">
<title>8.3 Tools</title>
<p>With 140 tools released until January 2021, it is difficult to decide, which tools to consider for a particular purpose.</p>
<sec id="s8-3-1">
<title>8.3.1 Vulnerabilities Addressed</title>
<p>The tools address differing subsets of the 54 vulnerabilities, with most tools tackling fewer than ten. There are some frameworks that combine several tools with a unified interface to harness the power of&#x20;many.</p>
<p>
<italic>Claim vs. achievement.</italic> Each tool advertises a list of vulnerabilities that it purportedly detects. Due to the variety of methods employed, different tools may classify contracts differently, even when they seemingly address the same vulnerability. Moreover, tools may refer to incompatible taxonomies of vulnerabilities or introduce their own definition, which makes it difficult to compare the&#x20;tools.</p>
<p>
<italic>Warnings vs. confirmed vulnerabilities vs. security guarantees.</italic> Many vulnerabilities are &#x2018;detected&#x2019; by rather simple heuristics. As an example, contracts are commonly reported as depending on block data, if they contain any of the instructions accessing such information. While this warning is not wrong <italic>per se</italic>, it does not imply that the flagged contract is actually vulnerable, as there are safe uses of block data. Consequently, most tools are neither correct nor complete: They may report contracts as vulnerable, even though they are not, and vice versa. Since large numbers of false positives diminish trust, some tools verify their findings by constructing exploits and checking that these indeed work. Single tools choose a complementary approach by showing that the contract under consideration satisfies a security property that provably precludes a specific vulnerability.</p>
</sec>
<sec id="s8-3-2">
<title>8.3.2 Comparison and Evaluation</title>
<p>Apart from vulnerabilities addressed and detection methods employed, the tools differ regarding maturity and maintenance. For open source tools, the latter can be assessed by checking information on last updates and number of contributors in the respective repositories (see the <xref ref-type="sec" rid="s13">Supplementary Material</xref> for an overview). An evaluation of tools, however, requires to install and run them on some samples, at a minimum. To our knowledge, there is no comprehensive evaluation of this type. This leads to the unsatisfactory situation that surveys and related work sections include tools that actually do not exist or are otherwise of poor quality. As an example, students envisioned <italic>DappGuard</italic> as part of an assignment, but did not implement it; the repository contains just a script for collecting some data from the chain. Apparently the students did an excellent job, as their technical report, accessible on the webpage of the course, is taken by many researchers as sufficient proof for the existence of the&#x20;tool.</p>
<p>Regarding the proper evaluation of tools, we see a wide spectrum. On the one end, we find tool descriptions with a few test runs, where neither tool nor test data are accessible. Most evaluations compare the new tool to some previously published ones on selected smart contracts. The validity of such evaluations is limited, though, as the presence or absence of vulnerabilities is determined by other tools that have not been fully validated either. There are some laudable exceptions, where the authors first compile a ground truth that consists of smart contracts manually checked by one or more persons, before using it to evaluate&#x20;tools.</p>
</sec>
</sec>
<sec id="s8-4">
<title>8.4 Benchmarks</title>
<p>Regarding benchmarks and test sets, we find three types in literature.<list list-type="simple">
<list-item>
<p>&#x2022; Smart contracts actually deployed, also referred to as <italic>in the wild</italic>, that have been obtained 1) from Ethereum&#x2019;s main chain (and possibly have a verified source code at Etherscan<xref ref-type="fn" rid="FN1">
<sup>1</sup>
</xref>), or 2) from one of the test chains.</p>
</list-item>
<list-item>
<p>&#x2022; Contracts <italic>generated</italic> 1) for challenges like Ethernaut, 2) as illustration of mishaps, or 3) from a source code by introducing vulnerabilities systematically by code transformations.</p>
</list-item>
<list-item>
<p>&#x2022; Contracts that do not possess a known vulnerability (any more). These include 1) contracts obtained from vulnerable ones by fixing the issue and that are considered touchstones, and 2) contracts appearing vulnerable to attackers, but being actually safe (honeypots).</p>
</list-item>
</list>
</p>
<p>Several test sets try to establish a ground truth for selected vulnerabilities, by confirming their existence either informally or by providing an exploit.</p>
</sec>
</sec>
<sec id="s9">
<title>9 Conclusion</title>
<p>In this work, we conducted a systematic literature review regarding the automated analysis of vulnerabilities in Ethereum smart contracts. We consolidated relevant vulnerability classifications by structuring 54 vulnerabilities into ten major groups. Additionally, we compiled the properties and methods characterizing the analysis tools. We identified a total of 140 tools addressing the security of smart contracts, with 83 published open source. Finally, we gave an overview of publicly available collections of Ethereum smart contracts that may serve as benchmarks and tests sets for tool evaluations.</p>
<sec id="s9-1">
<title>9.1 New Vulnerabilities and Tools</title>
<p>The body of literature in the field of security analysis of smart contracts has been extensive in recent years, with a clearly increasing tendency. The sheer number of publications underpins the fact that Ethereum currently is the <italic>de facto</italic> standard with respect to the research on and the development of smart contracts. Likewise, new smart contract attacks and vulnerabilities keep emerging. With some delay, they are addressed by new or extended tools, with new approaches to vulnerability detection. At the same time, there is not a single tool that covers all documented vulnerabilities. The growing number of tools and related publications substantiates the need for surveys and reviews at regular intervals to guide the interested audience.</p>
</sec>
<sec id="s9-2">
<title>9.2 Open Challenges</title>
<p>We identified challenges in all areas discussed in <xref ref-type="sec" rid="s8">Section 8</xref>. Regarding <italic>vulnerabilities</italic>, there is still room for improvement in terms of their clear delineation, their arrangement in coherent taxonomies and the classification of their severity. As for the <italic>methods</italic>, the field would benefit from an in-depth discussion on the suitability of detection approaches with respect to specific vulnerabilities. Concerning <italic>tools</italic>, the quality assessment is impeded by a lack of established vulnerability taxonomies and benchmarks. Regarding <italic>benchmark sets</italic>, the ground truth is still sparse, and the available test sets often lack validation in the form of exploits.</p>
</sec>
<sec id="s9-3">
<title>9.3 Limitations of Our Review</title>
<p>
<italic>Threats to the validity of the SLR.</italic> The restricted timespan of the study excludes relevant studies recently published, which poses a threat to construct and external validity (<xref ref-type="bibr" rid="B81">Zhou et&#x20;al., 2016</xref>). Data collection and extraction as well as most of the consolidation of the extracted data were carried out in the course of a master&#x2019;s thesis with a tight time budget of six person months. Therefore we did not include a structured snowballing process, which poses threats to both the internal and conclusion validity. This might affect the impartiality of the quality evaluation and the validity of the publication classifications.</p>
<p>
<italic>Depth.</italic> Many naturally arising questions have to remain unanswered in such an endeavor, as they go beyond a pure literature review and would require original research. As an example, the characteristics of a tool, like the vulnerabilities addressed or the methods used, often cannot be determined conclusively from the accompanying publication alone, but would require reading further documentation or the source code. Likewise, assessing the quality of results, the efficiency of detection, the actual practicality, or the maturity of a tool requires additional effort beyond a review. Finally, we did not check the referenced benchmark sets for quality or duplicates.</p>
<p>
<italic>Platform selection.</italic> We deliberately restricted the review to publications on Ethereum smart contracts. We selected this platform for its wealth of documentation, publications, discussions, use cases, handled assets, and overall market value. Some aspects are specific to the predominant programming language Solidity, or to the underlying mechanics of Ethereum and its virtual machine (EVM). However, many aspects of taxonomies, methods and tools are also relevant for other programming languages, virtual machines (like WASM) or even other smart contract platforms influenced by Ethereum.</p>
</sec>
</sec>
</body>
<back>
<sec id="s10">
<title>Author Contributions</title>
<p>HR has elaborated the data collection and extraction as well as most of the consolidation as a master thesis supervised by MA who provided critical feedback. MA used parts of the thesis to draft the manuscript. MA and GS revised all sections, especially the methods in automated analysis, and added further consolidations as well as the sections introduction, discussion and conclusion.</p>
</sec>
<sec sec-type="COI-statement" id="s11">
<title>Conflict of Interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s12">
<title>Publisher&#x2019;s Note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<sec id="s13">
<title>Supplementary Material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/fbloc.2022.814977/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/fbloc.2022.814977/full&#x23;supplementary-material</ext-link>
</p>
<supplementary-material xlink:href="DataSheet1.pdf" id="SM1" mimetype="application/pdf" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<fn-group>
<fn id="FN1">
<label>1</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://etherscan.io/">Etherscan.io</ext-link>.</p>
</fn>
</fn-group>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Aho</surname>
<given-names>A. V.</given-names>
</name>
<name>
<surname>Lam</surname>
<given-names>M. S.</given-names>
</name>
<name>
<surname>Sethi</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Ullman</surname>
<given-names>J.&#x20;D.</given-names>
</name>
</person-group> (<year>2007</year>). <source>Compilers: Principles, Techniques, &#x26; Tools</source> <edition>2nd Edn</edition>. <publisher-loc>Boston, MA</publisher-loc>: <publisher-name>Pearson Education</publisher-name>. </citation>
</ref>
<ref id="B2">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Akca</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Rajan</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Peng</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Solanalyser: A Framework for Analysing and Testing Smart Contracts</article-title>,&#x201d; in <source>26th Asia-Pacific Software Engineering Conference (APSEC)</source> (<publisher-name>IEEE</publisher-name>), <fpage>482</fpage>&#x2013;<lpage>489</lpage>. <comment>APSEC 19</comment>. <pub-id pub-id-type="doi">10.1109/APSEC48747.2019.00071</pub-id> </citation>
</ref>
<ref id="B3">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Albert</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Correas</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Gordillo</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Rom&#xe1;n-D&#xed;ez</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Rubio</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Safevm: A Safety Verifier for Ethereum Smart Contracts</article-title>,&#x201d; in <source>Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>386</fpage>&#x2013;<lpage>389</lpage>. <comment>ISSTA 2019</comment>. <pub-id pub-id-type="doi">10.1145/3293882.3338999</pub-id> </citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Almakhour</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Sliman</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Samhat</surname>
<given-names>A. E.</given-names>
</name>
<name>
<surname>Mellouk</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Verification of Smart Contracts: A Survey</article-title>. <source>Pervasive Mobile Comput.</source> <volume>67</volume>, <fpage>101227</fpage>. <pub-id pub-id-type="doi">10.1016/j.pmcj.2020.101227</pub-id> </citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ante</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Smart Contracts on the Blockchain - A Bibliometric Analysis and Review</article-title>. <source>Telematics Inform.</source> <volume>57</volume>, <fpage>101519</fpage>. <pub-id pub-id-type="doi">10.1016/j.tele.2020.101519</pub-id> </citation>
</ref>
<ref id="B6">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Atzei</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Bartoletti</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Cimoli</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2017</year>). &#x201c;<article-title>A Survey of Attacks on Ethereum Smart Contracts (Sok)</article-title>,&#x201d; in <source>International Conference on Principles of Security and Trus</source> (<publisher-loc>Berlin Heidelberg</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>164</fpage>&#x2013;<lpage>186</lpage>. <comment>vol. 10204 of POST 2017, Lecture Notes in Computer Science (LNCS)</comment>. <pub-id pub-id-type="doi">10.1007/978-3-662-54455-6_8</pub-id>
<source>t</source> </citation>
</ref>
<ref id="B7">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Bhargavan</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Delignat-Lavaud</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Fournet</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Gollamudi</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Gonthier</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Kobeissi</surname>
<given-names>N.</given-names>
</name>
<etal/>
</person-group> (<year>2016</year>). &#x201c;<article-title>Formal Verification of Smart Contracts</article-title>,&#x201d; in <source>Proceedings of the 2016 ACM Workshop on Programming Languages and Analysis for Security</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>91</fpage>&#x2013;<lpage>96</lpage>. <comment>PLAS 16</comment>. <pub-id pub-id-type="doi">10.1145/2993600.2993611</pub-id> </citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Brereton</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Kitchenham</surname>
<given-names>B. A.</given-names>
</name>
<name>
<surname>Budgen</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Turner</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Khalil</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2007</year>). <article-title>Lessons from Applying the Systematic Literature Review Process within the Software Engineering Domain</article-title>. <source>J.&#x20;Syst. Softw.</source> <volume>80</volume>, <fpage>571</fpage>&#x2013;<lpage>583</lpage>. <pub-id pub-id-type="doi">10.1016/j.jss.2006.07.009</pub-id> </citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chen</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Pendleton</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Njilla</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Xu</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>A Survey on Ethereum Systems Security</article-title>. <source>ACM Comput. Surv.</source> <volume>53</volume>, <fpage>1</fpage>&#x2013;<lpage>43</lpage>. <pub-id pub-id-type="doi">10.1145/3391195</pub-id> </citation>
</ref>
<ref id="B10">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Chen</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Xia</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Lo</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Grundy</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Luo</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>Defectchecker: Automated Smart Contract Defect Detection by Analyzing Evm Bytecode</article-title>,&#x201d; in <source>IEEE Transactions on Software Engineering</source>, <fpage>1</fpage>. <pub-id pub-id-type="doi">10.1109/tse.2021.3054928</pub-id> </citation>
</ref>
<ref id="B11">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Chen</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Xia</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Lo</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Grundy</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Luo</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Defining Smart Contract Defects on Ethereum</article-title>,&#x201d; in <source>IEEE Transactions on Software Engineering</source>, <volume>48</volume>, <fpage>327</fpage>&#x2013;<lpage>345</lpage>. <pub-id pub-id-type="doi">10.1109/TSE.2020.2989002</pub-id> </citation>
</ref>
<ref id="B12">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Coblenz</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Sunshine</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Aldrich</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Myers</surname>
<given-names>B. A.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Smarter Smart Contract Development Tools</article-title>,&#x201d; in <source>Proceedings of the 2nd International Workshop on Emerging Trends in Software Engineering for Blockchain, WETSEB@ICSE 2019</source> (<publisher-name>IEEE</publisher-name>), <fpage>48</fpage>&#x2013;<lpage>51</lpage>. <pub-id pub-id-type="doi">10.1109/WETSEB.2019.00013</pub-id> </citation>
</ref>
<ref id="B13">
<citation citation-type="web">
<collab>CORE</collab> (<year>2021</year>). <article-title>CORE Rankings Portal</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://www.core.edu.au/conference-portal">https://www.core.edu.au/conference-portal</ext-link> (Accessed August 8, 2021)</comment>. </citation>
</ref>
<ref id="B14">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Cousot</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Cousot</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2004</year>). &#x201c;<article-title>Basic Concepts of Abstract Interpretation</article-title>,&#x201d; in <source>Building the Information Society</source> (<publisher-loc>Boston, MA, USA</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>359</fpage>&#x2013;<lpage>366</lpage>. <pub-id pub-id-type="doi">10.1007/978-1-4020-8157-6_27</pub-id> </citation>
</ref>
<ref id="B15">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>di Angelo</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Salzer</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>A Survey of Tools for Analyzing Ethereum Smart Contracts</article-title>,&#x201d; in <source>IEEE International Conference on Decentralized Applications and Infrastructures (DAPPCON)</source> (<publisher-name>IEEE</publisher-name>), <fpage>69</fpage>&#x2013;<lpage>78</lpage>. <comment>DAPPCON 2019</comment>. <pub-id pub-id-type="doi">10.1109/DAPPCON.2019.00018</pub-id> </citation>
</ref>
<ref id="B16">
<citation citation-type="thesis">
<person-group person-group-type="author">
<name>
<surname>Dika</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2017</year>). <source>Ethereum Smart Contracts: Security Vulnerabilities and Security Tools</source> (<publisher-loc>Trondheim, Norway</publisher-loc>: <publisher-name>Norwegian University of Science and Technology, Department of Computer Science</publisher-name>). <comment>Thesis</comment>.</citation>
</ref>
<ref id="B17">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Durieux</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Ferreira</surname>
<given-names>J.&#x20;F.</given-names>
</name>
<name>
<surname>Abreu</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Cruz</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Empirical Review of Automated Analysis Tools on 47,587 Ethereum Smart Contracts</article-title>,&#x201d; in <source>Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering</source>. (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>530</fpage>&#x2013;<lpage>541</lpage>. <comment>ICSE 20</comment>. <pub-id pub-id-type="doi">10.1145/3377811.3380364</pub-id> </citation>
</ref>
<ref id="B18">
<citation citation-type="web">
<person-group person-group-type="author">
<name>
<surname>Ferreira</surname>
<given-names>J.&#x20;F.</given-names>
</name>
<name>
<surname>Cruz</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Durieux</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Abreu</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2020a</year>). <article-title>Smartbugs</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://github.com/smartbugs/smartbugs">https://github.com/smartbugs/smartbugs</ext-link> (Accessed August4, 2021)</comment>.<pub-id pub-id-type="doi">10.1145/3324884.3415298</pub-id> </citation>
</ref>
<ref id="B19">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ferreira</surname>
<given-names>J.&#x20;F.</given-names>
</name>
<name>
<surname>Cruz</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Durieux</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Abreu</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2020b</year>). &#x201c;<article-title>SmartBugs</article-title>,&#x201d; in <source>35th IEEE/ACM International Conference on Automated Software Engineering (ASE)</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>1349</fpage>&#x2013;<lpage>1352</lpage>. <comment>ASE 20</comment>. <pub-id pub-id-type="doi">10.1145/3324884.3415298</pub-id> </citation>
</ref>
<ref id="B20">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Garfatta</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Klai</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Gaaloul</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Graiet</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>A Survey on Formal Verification for Solidity Smart Contracts</article-title>,&#x201d; in <source>Australasian Computer Science Week Multiconference</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>10</lpage>. <comment>ACSW 21</comment>. <pub-id pub-id-type="doi">10.1145/3437378.3437879</pub-id> </citation>
</ref>
<ref id="B21">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ghaleb</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Pattabiraman</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>How Effective Are Smart Contract Analysis Tools? Evaluating Smart Contract Static Analysis Tools Using Bug Injection</article-title>,&#x201d; in <source>Proceedings of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>415</fpage>&#x2013;<lpage>427</lpage>. <comment>ISSTA 2020</comment>. <pub-id pub-id-type="doi">10.1145/3395363.3397385</pub-id> </citation>
</ref>
<ref id="B22">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Grishchenko</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Maffei</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Schneidewind</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>A Semantic Framework for the Security Analysis of Ethereum Smart Contracts</article-title>,&#x201d; in <source>International Conference on Principles of Security and Trust</source>. Editors <person-group person-group-type="editor">
<name>
<surname>Bauer</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>K&#xfc;sters</surname>
<given-names>R.</given-names>
</name>
</person-group> <comment>Lecture Notes in Computer Science</comment> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer International Publishing</publisher-name>) <volume>vol 10804</volume>, <fpage>243</fpage>&#x2013;<lpage>269</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-319-89722-6_10</pub-id> </citation>
</ref>
<ref id="B23">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Grune</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>van Reeuwijk</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Bal</surname>
<given-names>H. E.</given-names>
</name>
<name>
<surname>Jacobs</surname>
<given-names>C. J.</given-names>
</name>
<name>
<surname>Langendoen</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2012</year>). <source>Modern Compiler Design</source>. <publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Springer</publisher-name>. </citation>
</ref>
<ref id="B24">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Guo</surname>
<given-names>Y.-M.</given-names>
</name>
<name>
<surname>Huang</surname>
<given-names>Z.-L.</given-names>
</name>
<name>
<surname>Guo</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Guo</surname>
<given-names>X.-R.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>M.-Y.</given-names>
</name>
<etal/>
</person-group> (<year>2021</year>). <article-title>A Bibliometric Analysis and Visualization of Blockchain</article-title>. <source>Future Generation Comput. Syst.</source> <volume>116</volume>, <fpage>316</fpage>&#x2013;<lpage>332</lpage>. <pub-id pub-id-type="doi">10.1016/j.future.2020.10.023</pub-id> </citation>
</ref>
<ref id="B25">
<citation citation-type="thesis">
<person-group person-group-type="author">
<name>
<surname>Gupta</surname>
<given-names>B. C.</given-names>
</name>
</person-group> (<year>2019</year>). <source>Analysis of Ethereum Smart Contracts - A Security Perspective</source> (<publisher-loc>Kanpur</publisher-loc>: <publisher-name>Department of Computer Science and Engineering, Indian Institute of Technology</publisher-name>). <comment>Master&#x2019;s thesis</comment>.</citation>
</ref>
<ref id="B26">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Gupta</surname>
<given-names>B. C.</given-names>
</name>
<name>
<surname>Kumar</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Handa</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Shukla</surname>
<given-names>S. K.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>An Insecurity Study of Ethereum Smart Contracts</article-title>,&#x201d; in <source>International Conference on Security, Privacy, and Applied Cryptography Engineering (SPACE)</source> <comment>Lecture Notes in Computer Science</comment> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>) <volume>vol. 12586</volume>, <fpage>188</fpage>&#x2013;<lpage>207</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-030-66626-2_10</pub-id> </citation>
</ref>
<ref id="B27">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Hartel</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>van Staalduinen</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2019</year>). <source>Truffle Tests for Free &#x2013; Replaying Ethereum Smart Contracts for Transparency</source>. <comment>arXiv preprint arXiv:1907.09208</comment>. </citation>
</ref>
<ref id="B28">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Heged&#x171;s</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Towards Analyzing the Complexity Landscape of Solidity Based Ethereum Smart Contracts</article-title>,&#x201d; in <source>1st IEEE/ACM International Workshop on Emerging Trends in Software Engineering for Blockchain, WETSEB@ICSE 2018</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>35</fpage>&#x2013;<lpage>39</lpage>. <comment>WETSEB 18</comment>. <pub-id pub-id-type="doi">10.1145/3194113.3194119</pub-id> </citation>
</ref>
<ref id="B29">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Hildenbrandt</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Saxena</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Rodrigues</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Zhu</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Daian</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Guth</surname>
<given-names>D.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). &#x201c;<article-title>Kevm: A Complete Formal Semantics of the Ethereum Virtual Machine</article-title>,&#x201d; in <source>IEEE 31st Computer Security Foundations Symposium</source> (<publisher-name>IEEE</publisher-name>), <fpage>204</fpage>&#x2013;<lpage>217</lpage>. <comment>CSF 2018</comment>. <pub-id pub-id-type="doi">10.1109/CSF.2018.00022</pub-id> </citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hu</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Yin</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Lu</surname>
<given-names>R.</given-names>
</name>
<etal/>
</person-group> (<year>2021</year>). <article-title>A Comprehensive Survey on Smart Contract Construction and Execution: Paradigms, Tools, and Systems</article-title>. <source>Patterns</source> <volume>2</volume>, <fpage>100179</fpage>. <pub-id pub-id-type="doi">10.1016/j.patter.2020.100179</pub-id> </citation>
</ref>
<ref id="B31">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Jiang</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Chan</surname>
<given-names>W. K.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Contractfuzzer: Fuzzing Smart Contracts for Vulnerability Detection</article-title>,&#x201d; in <source>Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>259</fpage>&#x2013;<lpage>269</lpage>. <comment>ASE 2018</comment>. <pub-id pub-id-type="doi">10.1145/3238147.3238177</pub-id> </citation>
</ref>
<ref id="B32">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Kalra</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Goel</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Dhawan</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Sharma</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Zeus: Analyzing Safety of Smart Contracts</article-title>,&#x201d; in <source>Network and Distributed Systems Security Symposium</source> <publisher-name>The Internet Society</publisher-name>, <fpage>1</fpage>&#x2013;<lpage>15</lpage>. <comment>NDSS 2018</comment>. <pub-id pub-id-type="doi">10.14722/ndss.2018.23082</pub-id> </citation>
</ref>
<ref id="B33">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Kim</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Ryu</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Analysis of Blockchain Smart Contracts: Techniques and Insights</article-title>,&#x201d; in <source>IEEE Secure Development (SecDev)</source> (<publisher-name>IEEE</publisher-name>), <fpage>65</fpage>&#x2013;<lpage>73</lpage>. <comment>SecDev 2020</comment>. <pub-id pub-id-type="doi">10.1109/secdev45635.2020.00026</pub-id> </citation>
</ref>
<ref id="B34">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Kitchenham</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Charters</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2007</year>). &#x201c;<article-title>Guidelines for Performing Systematic Literature Reviews in Software Engineering</article-title>,&#x201d; in <source>Tech. rep., Software Engineering Group, School of Computer Science and Mathematics</source> (<publisher-loc>Keele, England</publisher-loc>: <publisher-name>Keele University</publisher-name>). </citation>
</ref>
<ref id="B35">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Kolluri</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Nikolic</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Sergey</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Hobor</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Saxena</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Exploiting the Laws of Order in Smart Contracts</article-title>,&#x201d; in <source>Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>363</fpage>&#x2013;<lpage>373</lpage>. <comment>ISSTA 2019</comment>. <pub-id pub-id-type="doi">10.1145/3293882.3330560</pub-id> </citation>
</ref>
<ref id="B36">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Leka</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Selimi</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Lamani</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Systematic Literature Review of Blockchain Applications: Smart Contracts</article-title>,&#x201d; in <source>International Conference on Information Technologies</source> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>3</lpage>. <comment>InfoTech 2019</comment>. <pub-id pub-id-type="doi">10.1109/InfoTech.2019.8860872</pub-id> </citation>
</ref>
<ref id="B37">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Liao</surname>
<given-names>J.-W.</given-names>
</name>
<name>
<surname>Tsai</surname>
<given-names>T.-T.</given-names>
</name>
<name>
<surname>He</surname>
<given-names>C.-K.</given-names>
</name>
<name>
<surname>Tien</surname>
<given-names>C.-W.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Soliaudit: Smart Contract Vulnerability Assessment Based on Machine Learning and Fuzz Testing</article-title>,&#x201d; in <source>Sixth International Conference on Internet of Things: Systems, Management and Security</source> (<publisher-name>IEEE</publisher-name>), <fpage>458</fpage>&#x2013;<lpage>465</lpage>. <comment>IoTSMS 2019</comment>. <pub-id pub-id-type="doi">10.1109/iotsms48152.2019.8939256</pub-id> </citation>
</ref>
<ref id="B38">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Liu</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Zhao</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Jiang</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Sun</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>S-gram: Towards Semantic-Aware Security Auditing for Ethereum Smart Contracts</article-title>,&#x201d; in <conf-name>33rd IEEE/ACM International Conference on Automated Software Engineering (ASE)</conf-name> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>814</fpage>&#x2013;<lpage>819</lpage>. <comment>ASE 18</comment>. <pub-id pub-id-type="doi">10.1145/3238147.3240728</pub-id> </citation>
</ref>
<ref id="B39">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Liu</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>A Survey on Security Verification of Blockchain Smart Contracts</article-title>. <source>IEEE Access</source> <volume>7</volume>, <fpage>77894</fpage>&#x2013;<lpage>77904</lpage>. <pub-id pub-id-type="doi">10.1109/access.2019.2921624</pub-id> </citation>
</ref>
<ref id="B40">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>S.-W.</given-names>
</name>
<name>
<surname>Zhao</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Towards Automated Verification of Smart Contract Fairness</article-title>,&#x201d; in <source>Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>666</fpage>&#x2013;<lpage>677</lpage>. <comment>ESEC/FSE 2020</comment>. <pub-id pub-id-type="doi">10.1145/3368089.3409740</pub-id> </citation>
</ref>
<ref id="B41">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>L&#xf3;pez Vivar</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Castedo</surname>
<given-names>A. T.</given-names>
</name>
<name>
<surname>Sandoval Orozco</surname>
<given-names>A. L.</given-names>
</name>
<name>
<surname>Garc&#xed;a Villalba</surname>
<given-names>L. J.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>An Analysis of Smart Contracts Security Threats Alongside Existing Solutions</article-title>. <source>Entropy</source> <volume>22</volume>, <fpage>203</fpage>. <pub-id pub-id-type="doi">10.3390/e22020203</pub-id> </citation>
</ref>
<ref id="B42">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Luu</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Chu</surname>
<given-names>D.-H.</given-names>
</name>
<name>
<surname>Olickel</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Saxena</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Hobor</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>Making Smart Contracts Smarter</article-title>,&#x201d; in <source>Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>254</fpage>&#x2013;<lpage>269</lpage>. <comment>CCS 16</comment>. <pub-id pub-id-type="doi">10.1145/2976749.2978309</pub-id> </citation>
</ref>
<ref id="B43">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Macrinici</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Cartofeanu</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Gao</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Smart Contract Applications within Blockchain Technology: A Systematic Mapping Study</article-title>. <source>Telematics Inform.</source> <volume>35</volume>, <fpage>2337</fpage>&#x2013;<lpage>2354</lpage>. <pub-id pub-id-type="doi">10.1016/j.tele.2018.10.004</pub-id> </citation>
</ref>
<ref id="B44">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Marescotti</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Otoni</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Alt</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Eugster</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Hyv&#xe4;rinen</surname>
<given-names>A. E. J.</given-names>
</name>
<name>
<surname>Sharygina</surname>
<given-names>N.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Accurate Smart Contract Verification through Direct Modelling</article-title>,&#x201d; in <source>Leveraging Applications of Formal Methods, Verification and Validation: Applications</source>. Editors <person-group person-group-type="editor">
<name>
<surname>Margaria</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Steffen</surname>
<given-names>B.</given-names>
</name>
</person-group> <comment>Lecture Notes in Computer Science (LNCS)</comment> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>) <volume>vol. 12478</volume>, <fpage>178</fpage>&#x2013;<lpage>194</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-030-61467-6_12</pub-id> </citation>
</ref>
<ref id="B45">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Mei</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Ashraf</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Jiang</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Chan</surname>
<given-names>W. K.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>A Fuzz Testing Service for Assuring Smart Contracts</article-title>,&#x201d; in <source>IEEE 19th International Conference on Software Quality, Reliability and Security Companion</source> (<publisher-name>IEEE</publisher-name>), <fpage>544</fpage>&#x2013;<lpage>545</lpage>. <comment>QRS 19</comment>. <pub-id pub-id-type="doi">10.1109/QRS-C.2019.00116</pub-id> </citation>
</ref>
<ref id="B46">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>MITRE Corp</collab> (<year>2006</year>). <article-title>Common Weakness Enumeration (CWE): A Community-Developed List of Software Weakness Types</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://cwe.mitre.org">https://cwe.mitre.org</ext-link> (Accessed August 7, 2021)</comment>. </citation>
</ref>
<ref id="B82">
<citation citation-type="book">
<comment>[Dataset]</comment> <collab>NCC Group</collab> (<year>2018</year>). <source>Decentralized application security project (DASP) top 10</source>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://dasp.co">https://dasp.co</ext-link>
</comment>(<comment>Accessed August 8, 2021)</comment>. </citation>
</ref>
<ref id="B47">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Nguyen</surname>
<given-names>T. D.</given-names>
</name>
<name>
<surname>Pham</surname>
<given-names>L. H.</given-names>
</name>
<name>
<surname>Sun</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Minh</surname>
<given-names>Q. T.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>sFuzz</article-title>,&#x201d; in <source>Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>778</fpage>&#x2013;<lpage>788</lpage>. <comment>ICSE 20</comment>. <pub-id pub-id-type="doi">10.1145/3377811.3380334</pub-id> </citation>
</ref>
<ref id="B48">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Okoli</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>A Guide to Conducting a Standalone Systematic Literature Review</article-title>. <source>Cais</source> <volume>37</volume>, <fpage>43</fpage>. <pub-id pub-id-type="doi">10.17705/1CAIS.03743</pub-id> </citation>
</ref>
<ref id="B49">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Permenev</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Dimitrov</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Tsankov</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Drachsler-Cohen</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Vechev</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Verx: Safety Verification of Smart Contracts</article-title>,&#x201d; in <source>IEEE Symposium on Security and Privacy (SP)</source> (<publisher-name>IEEE</publisher-name>), <fpage>1661</fpage>&#x2013;<lpage>1677</lpage>. <comment>SP 2020</comment>. <pub-id pub-id-type="doi">10.1109/sp40000.2020.00024</pub-id> </citation>
</ref>
<ref id="B50">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Praitheeshan</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Pan</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Doss</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2020a</year>). &#x201c;<article-title>Security Evaluation of Smart Contract-Based On-Chain Ethereum Wallets</article-title>,&#x201d; in <source>International Conference on Network and System Security</source>. Editors <person-group person-group-type="editor">
<name>
<surname>Kuty&#x142;owski</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>C.</given-names>
</name>
</person-group> <comment>Lecture Notes in Computer Science (LNCS)</comment> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>) <volume>vol. 12570</volume>, <fpage>22</fpage>&#x2013;<lpage>41</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-030-65745-1_2</pub-id> </citation>
</ref>
<ref id="B51">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Praitheeshan</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Pan</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Yu</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Doss</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2020b</year>). <source>Security Analysis Methods on Ethereum Smart Contract Vulnerabilities: A Survey</source>. <comment>arXiv preprint arXiv:1908.08605v3</comment>. </citation>
</ref>
<ref id="B52">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Rodler</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Karame</surname>
<given-names>G. O.</given-names>
</name>
<name>
<surname>Davi</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2018</year>). <source>Sereum: Protecting Existing Smart Contracts against Re-entrancy Attacks</source>. <comment>arXiv preprint arXiv:1812.05934</comment>. </citation>
</ref>
<ref id="B53">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rouhani</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Deters</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Security, Performance, and Applications of Smart Contracts: A Systematic Survey</article-title>. <source>IEEE Access</source> <volume>7</volume>, <fpage>50759</fpage>&#x2013;<lpage>50779</lpage>. <pub-id pub-id-type="doi">10.1109/access.2019.2911031</pub-id> </citation>
</ref>
<ref id="B54">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Samreen</surname>
<given-names>N. F.</given-names>
</name>
<name>
<surname>Alalfi</surname>
<given-names>M. H.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>A Survey of Security Vulnerabilities in Ethereum Smart Contracts</article-title>,&#x201d; in <source>Proceedings of the 30th Annual International Conference on Computer Science and Software Engineering</source> (<publisher-loc>USA</publisher-loc>: <publisher-name>IBM Corp.</publisher-name>), <fpage>73</fpage>&#x2013;<lpage>82</lpage>. <pub-id pub-id-type="doi">10.5555/3432601.3432611</pub-id> </citation>
</ref>
<ref id="B55">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sanchez-Gomez</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Torres-Valderrama</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Garcia-Garcia</surname>
<given-names>J.&#x20;A.</given-names>
</name>
<name>
<surname>Gutierrez</surname>
<given-names>J.&#x20;J.</given-names>
</name>
<name>
<surname>Escalona</surname>
<given-names>M. J.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Model-based Software Design and Testing in Blockchain Smart Contracts: A Systematic Literature Review</article-title>. <source>IEEE Access</source> <volume>8</volume>, <fpage>164556</fpage>&#x2013;<lpage>164569</lpage>. <pub-id pub-id-type="doi">10.1109/ACCESS.2020.3021502</pub-id> </citation>
</ref>
<ref id="B56">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Schneidewind</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Grishchenko</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Scherer</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Maffei</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Ethor: Practical and Provably Sound Static Analysis of Ethereum Smart Contracts</article-title>,&#x201d; in <source>Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security</source> (<publisher-loc>New York, NY, USA</publisher-loc>: <publisher-name>Association for Computing Machinery</publisher-name>), <fpage>621</fpage>&#x2013;<lpage>640</lpage>. <comment>CCS 20</comment>. <pub-id pub-id-type="doi">10.1145/3372297.3417250</pub-id> </citation>
</ref>
<ref id="B57">
<citation citation-type="book">
<collab>SCImago</collab> (<year>2021</year>). <source>Sjr - Scimago Journal &#x26; Country Rank</source>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://www.scimagojr.com/">https://www.scimagojr.com/</ext-link>
</comment>(<comment>Accessed August 7, 2021)</comment>. </citation>
</ref>
<ref id="B58">
<citation citation-type="book">
<collab>Scopus</collab> (<year>2021</year>). <source>Scopus Citescore</source>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://www.scopus.com/sources.uri">https://www.scopus.com/sources.uri</ext-link> (Accessed August 7, 2021)</comment>. </citation>
</ref>
<ref id="B59">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Singh</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Parizi</surname>
<given-names>R. M.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Choo</surname>
<given-names>K.-K. R.</given-names>
</name>
<name>
<surname>Dehghantanha</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Blockchain Smart Contracts Formalization: Approaches and Challenges to Address Vulnerabilities</article-title>. <source>Comput. Security</source> <volume>88</volume>, <fpage>101654</fpage>. <pub-id pub-id-type="doi">10.1016/j.cose.2019.101654</pub-id> </citation>
</ref>
<ref id="B60">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Snyder</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Literature Review as a Research Methodology: An Overview and Guidelines</article-title>. <source>J.&#x20;Business Res.</source> <volume>104</volume>, <fpage>333</fpage>&#x2013;<lpage>339</lpage>. <pub-id pub-id-type="doi">10.1016/j.jbusres.2019.07.039</pub-id> </citation>
</ref>
<ref id="B61">
<citation citation-type="journal">
<collab>Soufle</collab> (<year>2016</year>). <article-title>Souffl&#xe9;: Logic Defined Static Analysis</article-title>. (<comment>Accessed November 1, 2021)</comment>. </citation>
</ref>
<ref id="B62">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Strong</surname>
<given-names>D. M.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>Y. W.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>R. Y.</given-names>
</name>
</person-group> (<year>1997</year>). <article-title>Data Quality in Context</article-title>. <source>Commun. ACM</source> <volume>40</volume>, <fpage>103</fpage>&#x2013;<lpage>110</lpage>. <pub-id pub-id-type="doi">10.1145/253769.253804</pub-id> </citation>
</ref>
<ref id="B63">
<citation citation-type="web">
<collab>SWC Registry</collab> (<year>2018</year>). <article-title>Smart Contract Weakness Classification and Test Cases</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://swcregistry.io/">https://swcregistry.io/</ext-link>
</comment>(<comment>Accessed August 8, 2021)</comment>. </citation>
</ref>
<ref id="B64">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Taylor</surname>
<given-names>P. J.</given-names>
</name>
<name>
<surname>Dargahi</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Dehghantanha</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Parizi</surname>
<given-names>R. M.</given-names>
</name>
<name>
<surname>Choo</surname>
<given-names>K.-K. R.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>A Systematic Literature Review of Blockchain Cyber Security</article-title>. <source>Digital Commun. Networks</source> <volume>6</volume>, <fpage>147</fpage>&#x2013;<lpage>156</lpage>. <pub-id pub-id-type="doi">10.1016/j.dcan.2019.01.005</pub-id> </citation>
</ref>
<ref id="B65">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Tolmach</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>S.-W.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2020</year>). <source>A Survey of Smart Contract Formal Specification and Verification</source>. <comment>arXiv preprint arXiv:2008.02712</comment>. </citation>
</ref>
<ref id="B66">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Tolmach</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>S.-W.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>A Survey of Smart Contract Formal Specification and Verification</article-title>. <source>ACM Comput. Surv.</source> <volume>54</volume>, <fpage>1</fpage>&#x2013;<lpage>38</lpage>. <pub-id pub-id-type="doi">10.1145/3464421</pub-id> </citation>
</ref>
<ref id="B67">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Tovanich</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Heulot</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Fekete</surname>
<given-names>J.-D.</given-names>
</name>
<name>
<surname>Isenberg</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>Visualization of Blockchain Data: A Systematic Review</article-title>,&#x201d; in <source>IEEE Transactions on Visualization and Computer Graphics</source>, <volume>27</volume>, <fpage>3135</fpage>&#x2013;<lpage>3152</lpage>. <pub-id pub-id-type="doi">10.1109/TVCG.2019.2963018</pub-id> </citation>
</ref>
<ref id="B68">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>Trail of Bits</collab> (<year>2020</year>). <article-title>(Not So) Smart Contracts</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://github.com/crytic/not-so-smart-contracts">https://github.com/crytic/not-so-smart-contracts</ext-link> (Accessed August 7, 2021)</comment>. </citation>
</ref>
<ref id="B69">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vacca</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Di Sorbo</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Visaggio</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Canfora</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>A Systematic Literature Review of Blockchain and Smart Contract Development: Techniques, Tools, and Open Challenges</article-title>. <source>J.&#x20;Syst. Softw.</source> <volume>174</volume>, <fpage>110891</fpage>. <pub-id pub-id-type="doi">10.1016/j.jss.2020.110891</pub-id> </citation>
</ref>
<ref id="B70">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Varela-Vaca</surname>
<given-names>&#xc1;. J.</given-names>
</name>
<name>
<surname>Quintero</surname>
<given-names>A. M. R.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>Smart Contract Languages</article-title>. <source>ACM Comput. Surv.</source> <volume>54</volume>, <fpage>1</fpage>&#x2013;<lpage>38</lpage>. <pub-id pub-id-type="doi">10.1145/3423166</pub-id> </citation>
</ref>
<ref id="B71">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Wang</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>S.-W.</given-names>
</name>
<name>
<surname>Ma</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2019a</year>). &#x201c;<article-title>Vultron: Catching Vulnerable Smart Contracts once and for All</article-title>,&#x201d; in <source>Proceedings of the IEEE/ACM 41st International Conference on Software Engineering: New Ideas and Emerging Results</source> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>4</lpage>. <comment>ICSE (NIER) 19</comment>. <pub-id pub-id-type="doi">10.1109/ICSE-NIER.2019.00009</pub-id> </citation>
</ref>
<ref id="B72">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Wang</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>S.-W.</given-names>
</name>
<name>
<surname>Artho</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Ma</surname>
<given-names>L.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). &#x201c;<article-title>Oracle-supported Dynamic Exploit Generation for Smart Contracts</article-title>,&#x201d; in <source>IEEE Transactions on Dependable and Secure Computing</source>, <fpage>1</fpage>. <pub-id pub-id-type="doi">10.1109/TDSC.2020.3037332</pub-id> </citation>
</ref>
<ref id="B73">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Su</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Detecting Nondeterministic Payment Bugs in Ethereum Smart Contracts</article-title>. <source>Proc. ACM Program Lang.</source> <volume>3</volume>, <fpage>1</fpage>&#x2013;<lpage>29</lpage>. <pub-id pub-id-type="doi">10.1145/3360615</pub-id> </citation>
</ref>
<ref id="B74">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wang</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Jin</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Dai</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Choo</surname>
<given-names>K.-K. R.</given-names>
</name>
<name>
<surname>Zou</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Ethereum Smart Contract Security Research: Survey and Future Research Opportunities</article-title>. <source>Front. Comput. Sci.</source> <volume>15</volume>, <fpage>1</fpage>&#x2013;<lpage>18</lpage>. <pub-id pub-id-type="doi">10.1007/s11704-020-9284-9</pub-id> </citation>
</ref>
<ref id="B75">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Yang</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Keung</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Xiao</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Huang</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Hui</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Smart Contracts Vulnerability Auditing with Multi-Semantics</article-title>,&#x201d; in <source>IEEE 44th Annual Computers, Software, and Applications Conference (COMPSAC)</source> (<publisher-name>IEEE</publisher-name>), <fpage>892</fpage>&#x2013;<lpage>901</lpage>. <pub-id pub-id-type="doi">10.1109/compsac48688.2020.0-153</pub-id> </citation>
</ref>
<ref id="B76">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ye</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Ma</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Peng</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Peng</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Xue</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2019Z</year>). &#x201c;<article-title>Towards Automated Generation of Bug Benchmark for Smart Contracts</article-title>,&#x201d; in <source>IEEE International Conference on Software Testing, Verification and Validation Workshops</source> (<publisher-name>IEEE</publisher-name>), <fpage>184</fpage>&#x2013;<lpage>187</lpage>. <comment>ICST Workshops 2019</comment>. <pub-id pub-id-type="doi">10.1109/icstw.2019.00049</pub-id> </citation>
</ref>
<ref id="B77">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ye</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Ma</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Peng</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Xue</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2019b</year>). &#x201c;<article-title>A Software Analysis Based Vulnerability Detection System for Smart Contracts</article-title>,&#x201d; in <source>Integrating Research and Practice in Software Engineering</source>. Editors <person-group person-group-type="editor">
<name>
<surname>Jarzabek</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Poniszewska-Mara&#x144;da</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Madeyski</surname>
<given-names>L.</given-names>
</name>
</person-group> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>69</fpage>&#x2013;<lpage>81</lpage>. <comment>vol. 851 of Studies in Computational Intelligence, SCI</comment>. <pub-id pub-id-type="doi">10.1007/978-3-030-26574-8_6</pub-id> </citation>
</ref>
<ref id="B78">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Xiao</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Luo</surname>
<given-names>X.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>A Framework and Dataset for Bugs in Ethereum Smart Contracts</article-title>,&#x201d; in <source>IEEE International Conference on Software Maintenance and Evolution (ICSME)</source> (<publisher-name>IEEE</publisher-name>), <fpage>139</fpage>&#x2013;<lpage>150</lpage>. <comment>ICSME 2020</comment>. <pub-id pub-id-type="doi">10.1109/icsme46990.2020.00023</pub-id> </citation>
</ref>
<ref id="B79">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Xiao</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Luo</surname>
<given-names>X.</given-names>
</name>
</person-group> (<year>2019</year>). <source>Soliditycheck: Quickly Detecting Smart Contract Problems through Regular Expressions</source>. <comment>arXiv preprint arXiv:1911.09425</comment>. </citation>
</ref>
<ref id="B80">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zhou</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Xiang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Cao</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>An Ever-Evolving Game: Evaluation of Real-World Attacks and Defenses in Ethereum Ecosystem</article-title>,&#x201d; in <source>29th USENIX Security Symposium</source> (<publisher-name>USENIX Association</publisher-name>), <fpage>2793</fpage>&#x2013;<lpage>2810</lpage>. <comment>USENIX Security 2020</comment>. </citation>
</ref>
<ref id="B81">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zhou</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Jin</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Huang</surname>
<given-names>X.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>A Map of Threats to Validity of Systematic Literature Reviews in Software Engineering</article-title>,&#x201d; in <source>2016 23rd Asia-Pacific Software Engineering Conference (APSEC)</source> (<publisher-name>IEEE</publisher-name>), <fpage>153</fpage>&#x2013;<lpage>160</lpage>. <pub-id pub-id-type="doi">10.1109/apsec.2016.031</pub-id> </citation>
</ref>
</ref-list>
</back>
</article>