<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN" "http://jats.nlm.nih.gov/publishing/1.1/JATS-journalpublishing1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xml:lang="en" article-type="review-article" dtd-version="1.1">
<front>
<journal-meta>
<journal-id journal-id-type="pmc">CMC</journal-id>
<journal-id journal-id-type="nlm-ta">CMC</journal-id>
<journal-id journal-id-type="publisher-id">CMC</journal-id>
<journal-title-group>
<journal-title>Computers, Materials &#x0026; Continua</journal-title>
</journal-title-group>
<issn pub-type="epub">1546-2226</issn>
<issn pub-type="ppub">1546-2218</issn>
<publisher>
<publisher-name>Tech Science Press</publisher-name>
<publisher-loc>USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">52887</article-id>
<article-id pub-id-type="doi">10.32604/cmc.2024.052887</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Review</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>A Systematic Review and Performance Evaluation of Open-Source Tools for Smart Contract Vulnerability Detection</article-title>
<alt-title alt-title-type="left-running-head">A Systematic Review and Performance Evaluation of Open-Source Tools for Smart Contract Vulnerability Detection</alt-title>
<alt-title alt-title-type="right-running-head">A Systematic Review and Performance Evaluation of Open-Source Tools for Smart Contract Vulnerability Detection</alt-title>
</title-group>
<contrib-group>
<contrib id="author-1" contrib-type="author">
<name name-style="western"><surname>He</surname><given-names>Yaqiong</given-names></name></contrib>
<contrib id="author-2" contrib-type="author" corresp="yes">
<name name-style="western"><surname>Fan</surname><given-names>Jinlin</given-names></name><email>fjl707235887@gmail.com</email></contrib>
<contrib id="author-3" contrib-type="author">
<name name-style="western"><surname>Wu</surname><given-names>Huaiguang</given-names></name></contrib>
<aff>
<institution>School of Computer Science and Technology, Zhengzhou University of Light Industry</institution>, <addr-line>Zhengzhou, 450001</addr-line>, <country>China</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>&#x002A;</label>Corresponding Author: Jinlin Fan. Email: <email>fjl707235887@gmail.com</email></corresp>
</author-notes>
<pub-date date-type="collection" publication-format="electronic">
<year>2024</year></pub-date>
<pub-date date-type="pub" publication-format="electronic"><day>18</day><month>7</month><year>2024</year></pub-date>
<volume>80</volume>
<issue>1</issue>
<fpage>995</fpage>
<lpage>1032</lpage>
<history>
<date date-type="received">
<day>18</day>
<month>4</month>
<year>2024</year>
</date>
<date date-type="accepted">
<day>30</day>
<month>5</month>
<year>2024</year>
</date>
</history>
<permissions>
<copyright-statement>&#x00A9; 2024 He, Fan and Wu</copyright-statement>
<copyright-year>2024</copyright-year>
<copyright-holder>He, Fan and Wu</copyright-holder>
<license xlink:href="https://creativecommons.org/licenses/by/4.0/">
<license-p>This work is licensed under a <ext-link ext-link-type="uri" xlink:type="simple" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</ext-link>, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:href="TSP_CMC_52887.pdf"></self-uri>
<abstract>
<p>With the rise of blockchain technology, the security issues of smart contracts have become increasingly critical. Despite the availability of numerous smart contract vulnerability detection tools, many face challenges such as slow updates, usability issues, and limited installation methods. These challenges hinder the adoption and practicality of these tools. This paper examines smart contract vulnerability detection tools from 2016 to 2023, sourced from the Web of Science (WOS) and Google Scholar. By systematically collecting, screening, and synthesizing relevant research, 38 open-source tools that provide installation methods were selected for further investigation. From a developer&#x2019;s perspective, this paper offers a comprehensive survey of these 38 open-source tools, discussing their operating principles, installation methods, environmental dependencies, update frequencies, and installation challenges. Based on this, we propose an Ethereum smart contract vulnerability detection framework. This framework enables developers to easily utilize various detection tools and accurately analyze contract security issues. To validate the framework&#x2019;s stability, over 1700 h of testing were conducted. Additionally, a comprehensive performance test was performed on the mainstream detection tools integrated within the framework, assessing their hardware requirements and vulnerability detection coverage. Experimental results indicate that the Slither tool demonstrates satisfactory performance in terms of system resource consumption and vulnerability detection coverage. This study represents the first performance evaluation of testing tools in this domain, providing significant reference value.</p>
</abstract>
<kwd-group kwd-group-type="author">
<kwd>Blockchain security</kwd>
<kwd>ethereum</kwd>
<kwd>smart contracts detection</kwd>
<kwd>tools evaluation</kwd>
</kwd-group>
<funding-group>
<award-group id="awg1">
<funding-source>Major Public Welfare Special Fund of Henan Province</funding-source>
<award-id>201300210200</award-id>
</award-group>
<award-group id="awg2">
<funding-source>Major Science and Technology Research Special Fund of Henan Province</funding-source>
<award-id>221100210400</award-id>
</award-group>
</funding-group>
</article-meta>
</front>
<body>
<sec id="s1">
<label>1</label>
<title>Introduction</title>
<p>Blockchain is a distributed ledger that effectively addresses trust issues related to centralized authorities. In a blockchain network, multiple nodes collaborate to maintain a shared transaction record in a decentralized manner, eliminating the need for a trusted third party. In 2008, Nakamoto introduced Bitcoin [<xref ref-type="bibr" rid="ref-1">1</xref>], the first cryptocurrency to use blockchain as a foundational technology.</p>
<p>Smart contracts, a type of code written on the blockchain, are known for their ability to automatically execute contract terms based on predefined conditions. Computer scientist and cryptographer Szabo first proposed the concept of smart contracts in 1995 [<xref ref-type="bibr" rid="ref-2">2</xref>]. Implementing smart contracts requires a trusted environment, which blockchain technology provides by offering a transparent and consensus-driven operating environment without the need for third-party involvement. Initially, smart contracts were used for asset transfers through Bitcoin scripts [<xref ref-type="bibr" rid="ref-3">3</xref>,<xref ref-type="bibr" rid="ref-4">4</xref>]. In 2013, Buterin introduced Ethereum, a blockchain platform specifically designed for smart contracts [<xref ref-type="bibr" rid="ref-5">5</xref>]. This platform uses the Solidity language to write smart contracts, which are executed on the Ethereum Virtual Machine, marking the beginning of the Blockchain 2.0 era [<xref ref-type="bibr" rid="ref-6">6</xref>].</p>
<p>Smart contracts are software programs based on blockchain technology that execute in a decentralized manner. Like any other computer program, smart contracts are susceptible to code vulnerabilities. Additionally, smart contracts possess unique characteristics compared to traditional code, such as public visibility [<xref ref-type="bibr" rid="ref-7">7</xref>] and tamper resistance [<xref ref-type="bibr" rid="ref-8">8</xref>]. Therefore, smart contracts face significant security risks.</p>
<p>In recent years, the field of smart contracts has experienced numerous severe security incidents, resulting in significant economic losses and impacting the development of the blockchain industry. Research indicates that many smart contracts deployed on the Ethereum blockchain suffer from programming flaws [<xref ref-type="bibr" rid="ref-9">9</xref>,<xref ref-type="bibr" rid="ref-10">10</xref>], making them vulnerable to attacks. For instance, the 2016 case of the Decentralized Autonomous Organization (DAO) [<xref ref-type="bibr" rid="ref-11">11</xref>,<xref ref-type="bibr" rid="ref-12">12</xref>] smart contract demonstrated a reentrancy vulnerability that allowed malicious users to repeatedly call the same function, leading to repeated withdrawals of funds and causing millions of dollars in losses. Another example is the 2017 [<xref ref-type="bibr" rid="ref-13">13</xref>] incident involving the Parity multi-signature wallet project, where tens of millions of dollars worth of Ether was stolen, inflicting significant losses on users and the blockchain community. Additionally, the 2018 Beauty Chain (BEC) contract vulnerability incident [<xref ref-type="bibr" rid="ref-14">14</xref>] further illustrates the widespread existence of smart contract security issues. These incidents not only resulted in economic losses but also harmed user trust and the overall development of the blockchain industry. The security issues surrounding smart contracts have become a formidable challenge.</p>
<p>Despite numerous research efforts and improvements in smart contract security over the past few years, vulnerability detection remains a daunting challenge [<xref ref-type="bibr" rid="ref-15">15</xref>] due to the complexity and innovation of smart contracts.</p>
<p>Currently, several smart contract vulnerability analysis tools have been proposed in academia. These tools are significant for smart contract security. However, they face challenges such as slow updates and difficulty of use, which pose serious challenges to smart contract developers. Therefore, further research is necessary to expand and promote the practical application of these tools. By doing so, we can enhance the security of smart contracts and safeguard users&#x2019; assets against vulnerability attacks more effectively.</p>
<p>For a comprehensive survey, this paper searches literature databases such as Google Scholar and Web of Science, retrieving a total of 780 articles from 2016 to 2023 on the detection of vulnerabilities in smart contracts. We then selected 141 articles related to tools and narrowed it down to 38, focusing on open-source and installable smart contract vulnerability detection tools.</p>
<p>The main contributions of this paper are as follows:</p>
<p>1. A summary of various techniques for analyzing smart contract code, including a detailed analysis of the underlying principles of 38 open-source smart contract vulnerability detection tools.</p>
<p>2. A classification of analysis tools based on their level of installation difficulty. Additionally, an extensible vulnerability detection framework is proposed, based on the most commonly used vulnerability detection tools, which is convenient for developers.</p>
<p>3. Comprehensive performance testing of the detection tools within the framework to determine the corresponding hardware requirements.</p>
<p>The structure of this paper is as follows: <xref ref-type="sec" rid="s2">Section 2</xref> provides an overview of Ethereum and smart contracts, including current mainstream vulnerability classifications and popular detection methods. <xref ref-type="sec" rid="s3">Section 3</xref> details open-source Ethereum smart contract analysis tools. <xref ref-type="sec" rid="s4">Section 4</xref> introduces a vulnerability detection framework based on a hybrid cloud platform, describing its architecture and implementation. <xref ref-type="sec" rid="s5">Section 5</xref> evaluates the performance of the tools within the framework, including running speed, multi-core optimization, and memory usage. <xref ref-type="sec" rid="s6">Section 6</xref> summarizes the paper and offers suggestions for future work.</p>
</sec>
<sec id="s2">
<label>2</label>
<title>Structure</title>
<sec id="s2_1">
<label>2.1</label>
<title>Ethereum and Smart Contracts</title>
<p>Ethereum is an open-source platform based on blockchain technology. Unlike other cryptocurrencies such as Bitcoin, Ethereum not only facilitates digital currency transactions but also enables developers to build and deploy smart contracts. Smart contracts are programs that run on the blockchain, automatically executing predetermined conditions and operations. Ethereum&#x2019;s smart contracts utilize the Turing-complete programming language Solidity, allowing developers to write complex logic and algorithms. This makes Ethereum more than just a digital currency; it is also a powerful decentralized computing platform.</p>
<p>One of Ethereum&#x2019;s core components is the Ethereum Virtual Machine (EVM) [<xref ref-type="bibr" rid="ref-16">16</xref>], a stack-based virtual machine used to execute code for Ethereum smart contracts. The EVM uses an intermediate language called Ethereum bytecode to represent smart contract code. After developers write smart contract code in Solidity, it is compiled into Ethereum bytecode and deployed onto the Ethereum network.</p>
<p>The execution process of the EVM is stack-based. Each smart contract has its own storage and stack spaces. When executing a smart contract, the EVM sequentially reads the code line by line and places it into the stack. Instructions can include mathematical operations, conditional statements, jumps, storage, and loading operations. While executing instructions, the EVM manipulates the stack based on the opcode and operands of each instruction. For example, when executing an addition instruction, the EVM pops two operands from the stack, adds them together, and pushes the result back onto the stack.</p>
<p>The execution result of a smart contract is recorded on the Ethereum blockchain. Once a smart contract completes execution, it can change its own state and send messages to other smart contracts or call methods of other smart contracts. The execution result of a smart contract can also be recorded as part of a transaction on the Ethereum blockchain.</p>
<p>The emergence of smart contracts in the field of blockchain has garnered widespread attention and discussion. Traditional centralized institutions encounter several issues in areas such as financial transactions and contract execution, including high fees, lack of transparency, and security concerns. However, the decentralized nature of smart contracts built on blockchain offers a novel solution to these problems. Decentralization allows anyone to participate in the operation of smart contracts without relying on the trust of intermediaries. This has brought about more efficient, transparent, and secure solutions in various fields such as finance [<xref ref-type="bibr" rid="ref-17">17</xref>,<xref ref-type="bibr" rid="ref-18">18</xref>], supply chain management [<xref ref-type="bibr" rid="ref-19">19</xref>], Internet of Things [<xref ref-type="bibr" rid="ref-20">20</xref>&#x2013;<xref ref-type="bibr" rid="ref-23">23</xref>],construction [<xref ref-type="bibr" rid="ref-24">24</xref>], and energy [<xref ref-type="bibr" rid="ref-25">25</xref>].</p>
</sec>
<sec id="s2_2">
<label>2.2</label>
<title>Security Vulnerabilities in Smart Contracts</title>
<p>Smart contracts have introduced numerous innovations and conveniences across various industries within the realm of blockchain technology. By enabling automated contract execution, they eliminate intermediaries and the issues of distrust commonly associated with traditional contracts. However, the security of smart contracts has always been a pressing concern. Security vulnerabilities primarily refer to logical flaws that arise during the design process of smart contracts. Once deployed on the blockchain, these logical flaws can easily lead to security issues, such as financial losses for users. Moreover, since smart contracts operate on a blockchain, once deployed, they cannot be altered, making security issues potentially consequential.</p>
<p>Currently, the most widely used programming language for smart contracts on the Ethereum platform, the largest smart contract operating platform, is Solidity. Solidity is based on a Turing-complete language [<xref ref-type="bibr" rid="ref-26">26</xref>], which offers flexibility and powerful features that allow developers to implement complex logic and business operations. However, this flexibility also provides opportunities for attackers to discover and exploit vulnerabilities.</p>
<p>Researchers have proposed classifications of vulnerabilities for Ethereum smart contracts. Li et al. [<xref ref-type="bibr" rid="ref-27">27</xref>] conducted a survey and analysis of six real attacks targeting blockchains. Nicola et al. [<xref ref-type="bibr" rid="ref-28">28</xref>] were the first to categorize smart contract vulnerabilities into three classes and studied twelve vulnerabilities related to smart contracts. Zhu et al. [<xref ref-type="bibr" rid="ref-29">29</xref>] identified forty different vulnerabilities. As shown in <xref ref-type="table" rid="table-1">Table 1</xref>, we summarize the current common smart contract vulnerabilities.</p>
<table-wrap id="table-1">
<label>Table 1</label>
<caption>
<title>Introduction to common vulnerabilities in smart contract</title>
</caption>
<table frame="hsides">
<colgroup>
<col align="left"/>
<col align="left"/>
</colgroup>
<thead>
<tr>
<th>Vulnerability</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Reentrancy</td>
<td>When a contract transfers Ether to an external contract, an attacker can construct a contract with malicious code in the external address&#x2019;s fallback function. The attacker then requests the contract to transfer Ether again to the external contract. Since the first transfer has not yet completed, the state variables of the original contract remain unchanged and are still marked as not withdrawn. As a result, the attacker can repeatedly withdraw funds until all the funds in the original contract have been taken out.</td>
</tr>
<tr>
<td>Integer overflow</td>
<td>During the execution of smart contracts, the EVM defines fixed-size integer data types. However, when an integer exceeds its designated size, integer overflow vulnerabilities can occur, including multiplication overflow, subtraction overflow, and addition overflow, among others. Since the parameters involved in these operations are often user inputs, if the computed result exceeds the storage range and lacks robust detection statements, attackers can exploit these vulnerabilities to bypass conditional checks or directly manipulate data.</td>
</tr>
<tr>
<td>Unchecked low level calls</td>
<td>In Solidity, there are two functions that can be used to enable transfer functionality: transfer() and send(). The difference between them lies in error handling and return values. When a transfer fails, the transfer() function throws an exception and rolls back the entire transaction, thereby aborting the execution of the contract. This helps avoid unnecessary code execution. On the other hand, the send() function, when a transfer fails, does not throw an exception but instead returns false, indicating that the contract can continue executing other code.</td>
</tr>
<tr>
<td>Tx.origin</td>
<td>In Ethereum smart contracts, Tx.origin is a global variable that represents the initiator of a transaction. It traverses the entire call stack and returns the address of the account that originally called the function. However, Tx.origin poses security risks as attackers can exploit the Tx.origin vulnerability to launch impersonation attacks, deceiving the contract into executing uncontrolled operations.</td>
</tr>
<tr>
<td>Time manipulation</td>
<td>In blockchain systems, generating entropy is not possible due to the deterministic and lack of external input or random events. As a result, Solidity, the programming language for smart contracts in blockchain systems, does not provide a rand() function or similar random number generation capability. In scenarios where random numbers are required, developers often need to implement randomness through alternative means, such as utilizing block hash values or participant addresses within the blockchain system to generate pseudo-random numbers. Although certain information within the blockchain system may appear random to many developers, it is actually controllable by miners. Therefore, these variables cannot be considered as a source of entropy.</td>
</tr>
<tr>
<td>Delegatecall</td>
<td>To enhance code reusability, Solidity provides the Call and DelegateCall mechanisms for invoking external code. When using Call, the invocation is executed within the context of the called contract. On the other hand, when using DelegateCall, the code of the called contract is executed within the calling contract. When contract A utilizes DelegateCall to invoke contract B, the context of contract A is preserved, while the code of contract B is executed. During this process, functions within contract B can access and modify the storage and state of contract A.</td>
</tr>
<tr>
<td>Access control</td>
<td>In general, the default visibility of a function is public, which means it can be accessed both internally and externally within a contract. However, setting a function that should only be called internally as public can lead to unexpected outcomes. In the case of the first hacking attack on the Parity MultiSig Wallet, the attacker exploited a vulnerability where the function visibility was not specified. They called the initWallet() function and set themselves as the owner of the wallet. Because of this security loophole, users suffered losses amounting to a staggering $31 million.</td>
</tr>
<tr>
<td>TOD</td>
<td>Transaction Order Dependence (TOD) refers to the uncertainty in the execution results of transactions on the Ethereum blockchain due to the dependency between transactions. Miners have the option to include transactions from the transaction pool in the current block, usually ordered by gasPrice. Attackers can monitor the transaction pool, gather data, and create transactions with higher gasPrices, allowing them to be included in blocks faster than the original transactions.</td>
</tr>
<tr>
<td>Denial of service</td>
<td>In smart contracts, the commonly used data structures are mappings and arrays, which are used to record and store various types of information. However, if an array is maliciously expanded, it can result in excessive time and resource consumption when attempting to delete the array. This can lead to the deletion requiring more gas than the block&#x2019;s limit allows, thus making it impossible to remove the array and potentially resulting in a denial-of-service attack.</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s2_3">
<label>2.3</label>
<title>Common Detection Methods for Smart Contracts</title>
<p>Currently, the mainstream techniques for detecting vulnerabilities in smart contracts can be categorized into four types: feature matching, fuzz testing, symbolic execution, and taint analysis.</p>
<p>Feature matching is a static analysis-based technique for detecting vulnerabilities in smart contracts. It abstracts the features of malicious code [<xref ref-type="bibr" rid="ref-30">30</xref>,<xref ref-type="bibr" rid="ref-31">31</xref>] and detects smart contract source code or bytecode using similarity comparing to features, which are representated by intermediate layer, such as an Abstract Syntax Tree (AST) [<xref ref-type="bibr" rid="ref-32">32</xref>] or Control Flow Graph (CFG) [<xref ref-type="bibr" rid="ref-33">33</xref>].</p>
<p>Fuzz testing [<xref ref-type="bibr" rid="ref-34">34</xref>] is a unique vulnerability detection technique. It provides smart contracts with a large amount of random or exceptional data to trigger potential abnormal states and observe the results of contract execution to discover possible vulnerabilities. The core of fuzz testing lies in the generation and evaluation of test cases. Based on the current execution results and coverage information, it selects optimal test cases as inputs for the next round, thereby improving detection efficiency and quality.</p>
<p>Symbolic execution [<xref ref-type="bibr" rid="ref-35">35</xref>] is a program analysis technique that employs abstract symbols to represent program variables and simulates the execution of program instructions while collecting path constraints for each branch encountered. When encountering program branches, symbolic execution explores each branch path. Once a path is executed, the path constraints generated during symbolic execution are handed over to a satisfiability modulo theories (SMT) solver for resolution. If the path constraints can be solved by the SMT solver, concrete values that can execute the corresponding path are obtained. If the solution fails, it indicates that the path is unreachable. However, due to the need for symbolic execution to explore two program paths at each conditional branch, the number of program paths to be explored grows exponentially as the program size increases. This leads to the problem of path explosion, which is an inherent limitation of symbolic execution.</p>
<p>Taint analysis [<xref ref-type="bibr" rid="ref-36">36</xref>] is used to detect whether sensitive data or operations in smart contracts are influenced by external input or untrusted data, leading to security vulnerabilities. This technique tracks the generation, propagation, and elimination of tainted information in the contract to determine if it interferes with critical operations.</p>
<p>In recent years, deep learning-based techniques for smart contract vulnerability detection have received widespread attention and research. These techniques leverage deep neural networks to learn the semantic and structural features of smart contracts, enabling automatic identification and classification of vulnerability types. Compared to traditional approaches, this technology does not rely on manually defined vulnerability rules or patterns. It can handle large-scale smart contract data, adapt to different smart contract languages and platforms, and detect multiple types of vulnerabilities. Currently, deep learning-based detection techniques can be categorized into three main types: text processing, static analysis, and image recognition. Text processing-based deep learning methods employ natural language processing (NLP) techniques to extract semantic features from smart contracts, such as word embedding, sentence embedding, and attention mechanisms. Static analysis-based deep learning approaches utilize static analysis techniques to extract structural information from smart contracts, such as control flow graphs and abstract syntax trees. Image recognition-based deep learning methods convert smart contracts into images and employ convolutional neural networks (CNN) or other image processing models for feature extraction and classification to determine the presence and type of vulnerabilities. However, it is regrettable that most current deep learning-based methods suffer from usability challenges and lack corresponding installation and usage instructions. Therefore, they are beyond the scope of this paper&#x2019;s discussion.</p>
</sec>
</sec>
<sec id="s3">
<label>3</label>
<title>Smart Contract Vulnerability Detection Tools</title>
<sec id="s3_1">
<label>3.1</label>
<title>Systematic Literature Review</title>
<p>We searched for relevant works in Google Scholar and Web of Science using the keywords &#x2018;smart contract tools&#x2019; and &#x2018;smart contract detection&#x2019;. In the first stage, 781 articles were found.</p>
<p>In the second stage, we selected papers related to our work by defining a set of inclusion and exclusion rules, which are shown in <xref ref-type="table" rid="table-2">Table 2</xref>. A total of 112 articles that meet the criteria were selected through reviewing abstracts and main findings from 781 literature pieces.</p>
<table-wrap id="table-2">
<label>Table 2</label>
<caption>
<title>Filter rules</title>
</caption>
<table frame="hsides">
<colgroup>
<col align="left"/>
<col align="left"/>
</colgroup>
<thead>
<tr>
<th>Inclusion criteria</th>
<th>Exclusion criteria</th>
</tr>
</thead>
<tbody>
<tr>
<td>Research field of smart contracts</td>
<td>White papers</td>
</tr>
<tr>
<td>Vulnerability detection tool</td>
<td>Review papers</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>In the third stage, we conducted detailed research and selected 38 open-source articles that provided installation methods out of the 112 articles about tools to be included in our research. The above work was independently completed by three individuals.</p>
</sec>
<sec id="s3_2">
<label>3.2</label>
<title>Brief Introductions</title>
<p>This section examines working principle and the methods used to identify targets in the 38 articles.</p>
<p>Vulpedia [<xref ref-type="bibr" rid="ref-37">37</xref>] is a static analysis tool developed using Python in 2022. Vulpedia identifies vulnerabilities using vulnerability signatures. It clusters contracts with the same vulnerabilities using abstract syntax trees and summarizes signatures through program dependency graphs. To build a feature library, it extracts vulnerability signatures from vulnerable contracts of the same type and benign signatures from benign contracts. If a vulnerable signature is matched and no benign signature is found, the contract is considered vulnerable.</p>
<p>SpCon [<xref ref-type="bibr" rid="ref-38">38</xref>] is a dynamic analysis tool that was released on 22 January, 2022. The tool utilises the role-based access control (RBAC) model to divide contract users into different roles, each with different permissions. Lower roles are unable to read or write data owned by higher roles, which necessitates user mining and identity determination. Existing role mining techniques often assume that user permission assignments are fully observed, but this is not the case in smart contracts. Therefore, this tool considers users with the same behavior to have the same role and uses the average frequency vector (AFV) for quantitative capture. The AFV measures how often users with a particular role execute different permissions and serves as the signature of the role. The similarity in AFV between different roles is low. Any discrepancy found between what is allowed and what is actually found indicates a potential permission flaw.</p>
<p>Published in 2022, xFuzz [<xref ref-type="bibr" rid="ref-39">39</xref>] is a vulnerability analysis tool that utilises machine learning and fuzz testing methods. The tool focuses on vulnerabilities that are most likely to cause cross-contract problems. As multiple contracts interacting increases the search space, machine learning methods are used to guide the fuzz testing of smart contracts. The contract vulnerability is transformed into a vector using Word2Vec and combined with the contract&#x2019;s static characteristics. This combined information is then used as input for the machine learning model to train it. The trained model is then used to determine the potential location of the vulnerability in the contract. This approach reduces the search space and improves efficiency.</p>
<p>ESBMC [<xref ref-type="bibr" rid="ref-40">40</xref>] is a context-bounded model checker based on SMT that was published in 2022. The tool initially receives the source code of the smart contract and analyses it through lexical and syntactic analysis. It then converts the smart contract sol into an abstract syntax tree (AST) in JSON format. The resulting AST is then transformed into the intermediate representation (IR) of ESBMC, which is used to generate the symbol table. The table is then converted into a GOTO program and delivered to the symbolic execution engine (SymEx) for processing to generate its static single assignment (SSA) form. This form is then used to generate verification conditions. Finally, create logistic equations to represent constraints (C) and properties (P) from the SSA form. When the SMT solver finds a solution that satisfies the equation, a vulnerability is considered to exist.</p>
<p>In 2022, eTainter [<xref ref-type="bibr" rid="ref-41">41</xref>] was published. It takes the bytecode of smart contracts as input and builds a control flow graph (CFG). By identifying the bytecode, it extracts the EVM instructions for reading user data and can identify gas-related vulnerable EVM instructions. CFG paths are then extracted and analyzed for contamination.</p>
<p>Sailfish [<xref ref-type="bibr" rid="ref-42">42</xref>] is a tool that identifies inconsistent state errors in smart contracts. It was released in 2022 and consists of two parts: the EXPLORE phase and the REFINE phase. During the EXPLORE phase, the contract is converted into a storage dependency graph (SDG), which is then queried to match vulnerable subgraphs. During the REFINE phase, the tool will utilise symbolic execution to analyse contracts that match vulnerable subgraphs and use pre-stored variable constraints as a prerequisite for symbolic execution.</p>
<p>RA [<xref ref-type="bibr" rid="ref-43">43</xref>] was released in 2021 and is used to detect reentrant vulnerabilities. It combines symbolic execution and SMT solvers to simulate and verify reentrant vulnerabilities.</p>
<p>Eth2Vec [<xref ref-type="bibr" rid="ref-44">44</xref>] is a tool that automatically extracts features for each contract using machine learning methods and neural networks for natural language processing. The tool will be released in 2022. Its purpose is to detect vulnerabilities in contracts by comparing the similarity of the extracted features to previously learned code.</p>
<p>EtherSolve [<xref ref-type="bibr" rid="ref-45">45</xref>] released in 2021 proposes a symbolic execution algorithm based on the Ethereum operand stack. The bytecode is converted to CFG by parsing the jump operation in the contract, and reentrancy vulnerabilities are detected through CFG.</p>
<p>Gasgauge [<xref ref-type="bibr" rid="ref-46">46</xref>] was published in 2021. The tool divides its detection process into three stages: detection, identification, and correction. In the detection phase, static analysis is used to identify all loops in the contract. Then, fuzz testing methods are used to generate inputs that exhaust contract gas. Finally, vulnerabilities are reported to users through the results of the running verification and static analysis phases.</p>
<p>Echidna [<xref ref-type="bibr" rid="ref-47">47</xref>] is a smart contract vulnerability detection fuzz testing tool published in 2020. It provides a complete Ethereum smart contract fuzz testing framework, which can analyze and simulate the execution of smart contract source code and generate compliance with contract call specifications. The tool uses random transaction data to fuzz test the contract and introduces coverage information to detect the execution efficiency of fuzz testing.</p>
<p>WANA [<xref ref-type="bibr" rid="ref-48">48</xref>] was published in 2020. It uses the Wasm symbolic execution engine to parse, load, and initialize the Wasm bytecode. It checks unsatisfied paths by calling the Z3 constraint solver and collects execution information for vulnerability analysis. WANA performs vulnerability analysis based on the collected execution information during symbolic execution.</p>
<p>SmartEmbed [<xref ref-type="bibr" rid="ref-49">49</xref>], published in 2020, is an effective tool for checking bugs in smart contracts. It allows for easy development of error checking rules and addition of new errors. The similarity checker is the core component of SmartEmbed, which takes in the error embedding matrix, code embedding matrix, and embedding vector as input, and outputs error reports.</p>
<p>VERISMART [<xref ref-type="bibr" rid="ref-50">50</xref>] is a fully automatic tool based on static and dynamic program analysis technology, implemented in OCaml and published in 2020. This tool analyzes the basic path of a smart contract. Verify the generation conditions and detect vulnerabilities by collecting unknown paths.</p>
<p>sFuzz [<xref ref-type="bibr" rid="ref-51">51</xref>] was published in 2020 and aims to improve test case coverage by adopting a feedback adaptive fuzzing strategy, while learning from the traditional fuzz testing tool AFL. The tool is composed of three main modules: runner, libfuzzer, and liboracles. The runner module creates a private test network for deploying test contracts and executing transactions. The libfuzzer component generates test cases, while the liboracles component detects the execution of test cases and checks for vulnerabilities.</p>
<p>EthBMC [<xref ref-type="bibr" rid="ref-52">52</xref>] is a dynamic symbolic execution-based bounded model checker published in 2020. It can automatically generate specific inputs to simplify further analysis of EVM bytecode. EthBMC addresses identified issues by more precisely reasoning about the internals of the EVM. The contract is encoded with constraints and then solved using an SMT solver. EthBMC is effective in solving the parity error vulnerability.</p>
<p>The EVMFuzzer [<xref ref-type="bibr" rid="ref-53">53</xref>] is a fuzz testing tool designed to detect abnormalities in the Ethereum Virtual Machine (EVM). The tool was published in 2019. It uses smart contracts as input, generates random mutation data, and sends it to the target EVM and baseline EVM. The output results and status changes of each EVM are then compared. Any differences or abnormalities found are reported as suspicious cases.</p>
<p>SolidityCheck [<xref ref-type="bibr" rid="ref-54">54</xref>] was published in 2019. This is a static open-source tool written in C&#x002B;&#x002B; that uses regular expressions and program instrumentation to address vulnerabilities in smart contracts [<xref ref-type="bibr" rid="ref-55">55</xref>]. The tool&#x2019;s detection process is divided into four main stages: 1. Formatting the smart contract code; 2. Filtering keywords to extract problematic statements; 3. Prevention and detection; 4. Generating detection reports and prevention contracts. SolidityCheck primarily identifies reentrancy vulnerabilities and integer overflows with exceptional accuracy.</p>
<p>Published in 2019, Vultron [<xref ref-type="bibr" rid="ref-56">56</xref>] is a dynamic smart contract fuzz testing framework developed using JavaScript. It can detect irregular transactions caused by various types of adversarial exploits.</p>
<p>VeriSolid [<xref ref-type="bibr" rid="ref-57">57</xref>] is an open-source web-based verification framework developed in 2019. It is built on webGME and FSolidM and allows for collaborative development of Ethereum contracts with built-in version control.</p>
<p>SIF [<xref ref-type="bibr" rid="ref-58">58</xref>] is a static vulnerability analysis and detection tool that is open source. It was developed in C&#x002B;&#x002B; language and was invented in 2019. This tool is a comprehensive tool for analyzing, querying, detecting, and generating code for Solidity contracts. Additionally, the tool incorporates a module called Assertion Analyzer, which identifies Integer Overflow vulnerabilities based on the analysis.</p>
<p>FEther [<xref ref-type="bibr" rid="ref-59">59</xref>] is an open-source static smart contract analysis and detection tool developed using Coq. Published in 2019, this tool is designed to provide objective evaluations of contract code. It takes Solidity as input and analyzes and detects contract code through symbolic execution and logical constraint solving.</p>
<p>Published in 2018, Vandal [<xref ref-type="bibr" rid="ref-60">60</xref>] is a static and open-source tool for detecting smart contract vulnerabilities. The tool decompiles the bytecode of the Ethereum Virtual Machine (EVM) into an intermediate representation (IR) and builds the control flow graph (CFG) of the program. The Vandal tool converts the IR and CFG into logical relationships, which are then stored in a knowledge base. The tool uses the Souffl&#x00E9; language to write security analysis specifications, which are inputted into the Souffl&#x00E9; engine along with the knowledge base for query and reasoning. Finally, the tool generates security analysis specifications based on the output results of the Souffl&#x00E9; engine. The report is then produced.</p>
<p>Securify [<xref ref-type="bibr" rid="ref-61">61</xref>] is a static and open-source smart contract vulnerability detection tool that was published in 2018. It uses symbolic execution to analyze smart contracts and extract data flow, control flow, function calls, and other information from the code. The tool then checks for violations of the preset pattern.</p>
<p>EthIR [<xref ref-type="bibr" rid="ref-62">62</xref>] is a static and open-source smart contract vulnerability detection tool published in 2018. Its main contribution is converting Ethereum bytecode into a rule-based representation (RBR), which allows for easy application of advanced analysis methods to infer the nature of EVM code. To begin, generate a control flow graph (CFG) from Ethereum bytecode using OYENTE. Next, extract the basic blocks and jump targets from the CFG using a decompiler. Then, extract the rules and operand stacks from the basic blocks using an interpreter. Finally, convert the rules and operand stacks to RBR using a reconstructor.</p>
<p>MAIAN [<xref ref-type="bibr" rid="ref-10">10</xref>] was published in 2018. It uses symbolic execution and Hybrid Depth First Search (Hybrid Depth First Search) technologies to analyze possible state transitions and abnormal behaviors that may occur during multiple calls of smart contracts. The process mainly consists of four steps: preprocessing, symbolic execution, recording paths and conditions that may trigger the vulnerability using the Z3 theorem prover, and hybrid depth-first search. Use a heuristic algorithm to sort the paths obtained by symbolic execution, and select the path most likely to trigger the vulnerability for further analysis; Verification, use specific input and transaction sequences to verify the results obtained by symbolic execution and hybrid depth-first search vulnerability path and report the discovered vulnerabilities.</p>
<p>Published in 2017, Porosity [<xref ref-type="bibr" rid="ref-63">63</xref>] is a static detection tool that converts EVM bytecode into an intermediate representation (IR). It then analyses basic blocks and boundaries based on jump instructions and function calls. Porosity connects basic blocks into CFGs and identifies loops, conditional branches, and function entries. Finally, it converts the CFG into a Solidity syntax contract and outputs it to standard output or a file.</p>
<p>FSolidM [<xref ref-type="bibr" rid="ref-64">64</xref>] is a tool for detecting static smart contract vulnerabilities that was published in 2017. It is based on the Finite State Machine (FSM) model, which abstracts smart contract behavior into a set of states and transitions. The tool includes a graphical editor that enables developers to create and modify FSMs using drag-and-drop. Additionally, FSolidM provides a code generator that can convert FSMs into Solidity language smart contracts and deploy them to the Ethereum network.</p>
<p>KEVM [<xref ref-type="bibr" rid="ref-65">65</xref>] was created in 2016 as a tool for detecting static smart contract vulnerabilities. It uses the K framework to define the syntax and semantics of the EVM&#x2019;s bytecode stack language, allowing it to execute and simulate the behavior of the EVM. KEVM can simulate all instructions and abnormal behaviors of the EVM, and its correctness and performance can be verified through the official Ethereum test suite.</p>
<p>SmartCheck [<xref ref-type="bibr" rid="ref-30">30</xref>], a static open-source smart contract vulnerability detection tool developed in Java, was published in 2018. SmartCheck conducts lexical and semantic analysis on Solidity source code and utilizes ANTLR [<xref ref-type="bibr" rid="ref-66">66</xref>] and a custom Solidity language to generate an XML parse tree as an intermediate representation. Users can detect vulnerability patterns by employing XPath queries on the intermediate representation. SmartCheck offers significant improvements compared to existing alternatives, as it has been extensively tested on real-world contracts and successfully identified code issues in the majority of them.</p>
<p>Slither [<xref ref-type="bibr" rid="ref-31">31</xref>], published in 2019, is an open-source static analysis framework for smart contract vulnerabilities. This tool serves four main purposes: (1) automatic detection of vulnerabilities, (2) automatic detection of code optimization opportunities, (3) enhancing user understanding of contracts, and (4) assisting with code reviews. Its working principle involves transforming Solidity smart contracts into an intermediate representation called SlithIR. SlithIR utilizes Static Single Assignment (SSA) form and a simplified instruction set to streamline the implementation of analysis while retaining semantic information. Slither allows the application of common program analysis techniques such as data flow and taint tracking to detect vulnerabilities. The tool is capable of detecting Reentrancy, Integer Overflow, Unchecked Low Level Calls, Tx.origin, Time Manipulation, Delegatecall, and Access Control.</p>
<p>Mythril [<xref ref-type="bibr" rid="ref-67">67</xref>], published in 2017, is a static and open-source smart contract vulnerability detection tool. It utilizes symbolic execution techniques to simulate the execution process of a program. Instead of using concrete input values, it uses symbolic variables to explore all possible execution paths of the program. In addition, Mythril incorporates techniques such as taint analysis and control flow graphs to enhance the efficiency and accuracy of the analysis.</p>
<p>Oyente [<xref ref-type="bibr" rid="ref-68">68</xref>], a tool that emerged in 2016, utilizes symbolic execution to analyze smart contract bytecode. It consists of four key components: CFG Builder, Explorer, Core Analysis, and Validator. Oyente operates at the bytecode level and dynamically explores the program&#x2019;s control flow graph during symbolic execution. It detects contract vulnerabilities by considering path constraints, variable origins, and other relevant information.</p>
<p>Solmet [<xref ref-type="bibr" rid="ref-69">69</xref>], published in 2018, is built upon the existing ANTLR4 grammar to parse Solidity language. Although it does not directly detect vulnerabilities, Solmet analyzes Solidity smart contracts and calculates relevant metrics.</p>
<p>Solhint [<xref ref-type="bibr" rid="ref-70">70</xref>], introduced in 2017, is a static analysis tool for smart contract vulnerability detection. It begins by converting the source code of a smart contract into an abstract syntax tree (AST) using a parser. Then, it traverses the AST using a visitor while loading user-specified configurations, which include enabled or disabled rules and plugins. Solhint checks each AST node based on the rules in the configuration file and collects detected issues. Finally, it formats the problems in different output formats, such as console or file.</p>
<p>ContractFuzzer [<xref ref-type="bibr" rid="ref-71">71</xref>], published in 2018, employs fuzz testing techniques to identify security vulnerabilities in Ethereum smart contracts. It operates in four steps: firstly, it generates fuzzy inputs based on the smart contract&#x2019;s ABI specification; then, it uses predefined test cases to detect common vulnerability types; next, it utilizes an EVM instrumenter to record the runtime behavior of the smart contract; finally, it employs a log analyzer to analyze the recorded logs and report any discovered vulnerabilities.</p>
<p>Osiris [<xref ref-type="bibr" rid="ref-72">72</xref>], which was published in 2018, is a static and open-source framework for smart contracts vulnerability detection and analysis. It primarily utilizes a combination of symbolic execution and taint analysis to detect vulnerabilities. The tool converts the bytecode of smart contracts into an intermediate representation (IR) and performs static analysis to identify instructions and variables that may lead to integer-related vulnerabilities. Then, Osiris utilizes taint analysis to mark inputs, outputs, and state variables related to integer-related vulnerabilities, creating a taint graph that represents their data flow dependencies. Subsequently, the tool employs symbolic execution to traverse all paths in the taint graph and generate corresponding path constraints and objective functions. Finally, Osiris uses a constraint solver, such as Z3, to solve the path constraints and objective functions, resulting in a set of input values satisfying the conditions, i.e., exploits. If no satisfying input values are found, it indicates that the path is secure or unreachable.</p>
<p>HoneyBadger [<xref ref-type="bibr" rid="ref-73">73</xref>], published in 2019, consists of three components: symbolic analysis, cash flow analysis, and honeypot analysis. The symbolic analysis component constructs a control flow graph (CFG) and executes its different paths symbolically. The results of symbolic analysis are then propagated to the cash flow analysis and honeypot analysis components. The cash flow analysis section utilizes the results from symbolic analysis to detect whether a contract can receive and transfer funds. Lastly, the honeypot analysis component aims to detect different honeypot techniques studied in this article by combining heuristic and symbolic analysis results. All components employ the z3 SMT solver to check for constraint satisfaction.</p>
</sec>
<sec id="s3_3">
<label>3.3</label>
<title>Comparison of Open Source Tools</title>
<p>This section presents a summary of current open source tools. <xref ref-type="table" rid="table-3">Table 3</xref> presents specific information, such as the detection method, project address, update time, installation method, and ease of use. Ease of use is divided into five levels: 5&#x2605; indicates that it is extremely easy to install and does not require the installation of any environment; 4&#x2605; indicates that it is easy to install and only requires the installation of one environment dependency; 3&#x2605; indicates that it is easy to install but requires the installation of two environment dependency; 2&#x2605; indicates that requires the installation of three environment dependency; 1&#x2605; indicates that more than three environment dependencies.</p>
<table-wrap id="table-3">
<label>Table 3</label>
<caption>
<title>Solidity detection tool project address and environmental dependencies</title>
</caption>
<table frame="hsides">
<colgroup>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
<col align="left"/>
</colgroup>
<thead>
<tr>
<th>Tool name</th>
<th>Detection method</th>
<th>Project address</th>
<th>Update time</th>
<th>Installation method</th>
<th>Installation difficulty</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="2">Vulpedia</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/ToolmanInside/vulpedia_demo">https://github.com/ToolmanInside/vulpedia_demo</ext-link></td>
<td rowspan="2">2022.4.26</td>
<td rowspan="2">Docker</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">SpCon</td>
<td rowspan="2">Feature matching, taint analysis</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/Franklinliu/SpCon-Artifact">https://github.com/Franklinliu/SpCon-Artifact</ext-link></td>
<td rowspan="2">2024.3.13</td>
<td rowspan="2">Docker, Python3.8</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">xFuzz</td>
<td rowspan="2">Fuzz testing</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/zhang-alt/xFuzz">https://github.com/zhang-alt/xFuzz</ext-link></td>
<td rowspan="2">2022.4.30</td>
<td rowspan="2">Docker, solc-select&#x002B; python&#x002B; sFuzz&#x002B; slither/surya</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">ESBMC</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://ssvlab.github.io/esbmc/documentation.html">https://ssvlab.github.io/esbmc/documentation.html</ext-link></td>
<td rowspan="2">2022.7.26</td>
<td rowspan="2">solc, esbmc</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">eTainter</td>
<td rowspan="2">Feature matching, taint analysis</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/DependableSystemsLab/eTainter">https://github.com/DependableSystemsLab/eTainter</ext-link></td>
<td rowspan="2">2024.3.19</td>
<td rowspan="2">Python&#x002B; Z3-solver&#x002B; pysha3</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Sailfish</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/ucsb-seclab/sailfish">https://github.com/ucsb-seclab/sailfish</ext-link></td>
<td rowspan="2">2022.6.5</td>
<td rowspan="2">Docker, python</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">RA</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/wanidon/RA">https://github.com/wanidon/RA</ext-link></td>
<td rowspan="2">2021.9.22</td>
<td rowspan="2">Python3.7&#x002B;Z3-solver&#x002B;pysha3</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Eth2Vec</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/fseclab-osaka/eth2vec">https://github.com/fseclab-osaka/eth2vec</ext-link></td>
<td rowspan="2">2021.3.26</td>
<td rowspan="2">Kam1n0 server [<xref ref-type="bibr" rid="ref-74">74</xref>]&#x002B;py-solc-x</td>
<td rowspan="2">1&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">EtherSolve</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/SeUniVr/EtherSolve">https://github.com/SeUniVr/EtherSolve</ext-link></td>
<td rowspan="2">2023.8.17</td>
<td rowspan="2">Java 11.0.8, Gradle [<xref ref-type="bibr" rid="ref-75">75</xref>]</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Gas gauge</td>
<td rowspan="2">Fuzz testing</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/gasgauge/gasgauge.github.io">https://github.com/gasgauge/gasgauge.github.io</ext-link></td>
<td rowspan="2">2021.5.7</td>
<td rowspan="2">Slither&#x002B;Truffle&#x002B;solc&#x002B;python&#x002B;NodeJS</td>
<td rowspan="2">2&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Echidna</td>
<td rowspan="2">Fuzz testing</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/crytic/echidna">https://github.com/crytic/echidna</ext-link></td>
<td rowspan="2">2024.3.19</td>
<td rowspan="2">Docker, Homebrew [<xref ref-type="bibr" rid="ref-76">76</xref>], Nix [<xref ref-type="bibr" rid="ref-77">77</xref>], Stack [<xref ref-type="bibr" rid="ref-78">78</xref>]</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">WANA</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/gongbell/WANA">https://github.com/gongbell/WANA</ext-link></td>
<td rowspan="2">2021.3.28</td>
<td rowspan="2">solc&#x002B;six&#x002B;func_timeout&#x002B;Z3-solver</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">SmartEmbed</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/beyondacm/SmartEmbed">https://github.com/beyondacm/SmartEmbed</ext-link></td>
<td rowspan="2">2023.3.13</td>
<td rowspan="2">Flask&#x002B;WTForms&#x002B;genism&#x002B;SciPy&#x002B;python</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">VERISMART</td>
<td rowspan="2">Feature matching, symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/kupl/VeriSmart-public">https://github.com/kupl/VeriSmart-public</ext-link></td>
<td rowspan="2">2023.1.17</td>
<td rowspan="2">OCaml&#x002B;Z3&#x002B;solc</td>
<td rowspan="2">2&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">sFuzz</td>
<td rowspan="2">Fuzz testing</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/duytai/sFuzz">https://github.com/duytai/sFuzz</ext-link></td>
<td rowspan="2">2022.3.24</td>
<td rowspan="2">Web</td>
<td rowspan="2">5&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">EthBMC</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/RUB-SysSec/EthBMC">https://github.com/RUB-SysSec/EthBMC</ext-link></td>
<td rowspan="2">2022.12.31</td>
<td rowspan="2">Go-ethereum [<xref ref-type="bibr" rid="ref-50">50</xref>]&#x002B;Rust [<xref ref-type="bibr" rid="ref-51">51</xref>]&#x002B;Yices2 [<xref ref-type="bibr" rid="ref-52">52</xref>]</td>
<td rowspan="2">1&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">EVMFuzzer</td>
<td rowspan="2">Fuzz testing</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/EVMFuzzer/EVMFuzzer">https://github.com/EVMFuzzer/EVMFuzzer</ext-link></td>
<td rowspan="2">2019.3.19</td>
<td rowspan="2">Python&#x002B;ethereum&#x002B;solc</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">SolidityCheck</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/xf97/SolidityCheck">https://github.com/xf97/SolidityCheck</ext-link></td>
<td rowspan="2">2021.6.28</td>
<td rowspan="2">Docker</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Vultron</td>
<td rowspan="2">Fuzz testing</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/ntu-SRSLab/vultron">https://github.com/ntu-SRSLab/vultron</ext-link></td>
<td rowspan="2">2019.11.5</td>
<td rowspan="2">Node.js: 12.12.0 &#x002B;Truffle: 5.0.42&#x002B;Go-ethereum: 1.8</td>
<td rowspan="2">2&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">VeriSolid</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/anmavrid/smart-contracts">https://github.com/anmavrid/smart-contracts</ext-link></td>
<td rowspan="2">2023.1.4</td>
<td rowspan="2">NodeJS (v4.x.x)&#x002B;MongoDB&#x002B;webgme&#x002B;bower</td>
<td rowspan="2">1&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">SIF</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/chao-peng/SIF">https://github.com/chao-peng/SIF</ext-link></td>
<td rowspan="2">2020.6.27</td>
<td rowspan="2">solc</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">FEther</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/openethereum/fEther">https://github.com/openethereum/fEther</ext-link></td>
<td rowspan="2">2020.2.11</td>
<td rowspan="2">Web</td>
<td rowspan="2">5&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Vandal</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/usyd-blockchain/vandal">https://github.com/usyd-blockchain/vandal</ext-link></td>
<td rowspan="2">2020.7.29</td>
<td rowspan="2">Souffle&#x002B;python</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Securify</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/eth-sri/securify">https://github.com/eth-sri/securify</ext-link></td>
<td rowspan="2">2020.1.24</td>
<td rowspan="2">Docker, solc&#x002B;Java 8&#x002B; Souffl&#x00E9;</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">EthIR</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/costa-group/ethIR">https://github.com/costa-group/ethIR</ext-link></td>
<td rowspan="2">2024.3.18</td>
<td>solc&#x002B;ethereum<break/> (last version tested 1.8.18)&#x002B;Z3 (last version tested 4.5.0)&#x002B;pip</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
<td></td>
</tr>
<tr>
<td rowspan="2">MAIAN</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/ivicanikolicsg/MAIAN">https://github.com/ivicanikolicsg/MAIAN</ext-link></td>
<td rowspan="2">2021.10.4</td>
<td rowspan="2">python</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Porosity</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/msuiche/porosity">https://github.com/msuiche/porosity</ext-link></td>
<td rowspan="2">2019.1.10</td>
<td rowspan="2">solc</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">FSolidM</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/contractshark/fsolidm">https://github.com/contractshark/fsolidm</ext-link></td>
<td rowspan="2">2020.10.30</td>
<td rowspan="2">NodeJS (v4.x.x recommended)&#x002B;MongoDB&#x002B;webgme</td>
<td rowspan="2">1&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">KEVM</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/runtimeverification/evm-semantics">https://github.com/runtimeverification/evm-semantics</ext-link></td>
<td rowspan="2">2024.3.18</td>
<td rowspan="2">kup</td>
<td rowspan="2">3&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">SmartCheck</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/smartdec/smartcheck">https://github.com/smartdec/smartcheck</ext-link></td>
<td rowspan="2">2023.5.25</td>
<td rowspan="2">NodeJS</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Slither</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/crytic/slither">https://github.com/crytic/slither</ext-link></td>
<td rowspan="2">2024.3.19</td>
<td rowspan="2">Docker, python</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Mythril</td>
<td rowspan="2">Symbolic execution, taint analysis</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/ConsenSys/mythril">https://github.com/ConsenSys/mythril</ext-link></td>
<td rowspan="2">2024.3.16</td>
<td rowspan="2">Docker, solc&#x002B;software-properties-common&#x002B;python3</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Oyente</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/enzymefinance/oyente">https://github.com/enzymefinance/oyente</ext-link></td>
<td rowspan="2">2020.11.7</td>
<td rowspan="2">Docker, solc&#x002B;Go-ethereum&#x002B;Z3&#x002B;pip</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Solmet</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/chicxurug/SolMet-Solidity-parser">https://github.com/chicxurug/SolMet-Solidity-parser</ext-link></td>
<td rowspan="2">2023.8.8</td>
<td rowspan="2">Java</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Solhint</td>
<td rowspan="2">Feature matching</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/protofire/solhint">https://github.com/protofire/solhint</ext-link></td>
<td rowspan="2">2024.3.16</td>
<td rowspan="2">NodeJS</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">ContractFuzzer</td>
<td rowspan="2">Fuzz testing</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/gongbell/ContractFuzzer">https://github.com/gongbell/ContractFuzzer</ext-link></td>
<td rowspan="2">2020.3.16</td>
<td rowspan="2">Docker</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">Osiris</td>
<td rowspan="2">Feature matching, taint analysis, symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/christoftorres/Osiris">https://github.com/christoftorres/Osiris</ext-link></td>
<td rowspan="2">2023.3.7</td>
<td rowspan="2">Docker, solc&#x002B;Go-ethereum&#x002B;Z3&#x002B;python</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
<tr>
<td rowspan="2">HoneyBadger</td>
<td rowspan="2">Symbolic execution</td>
<td><ext-link ext-link-type="uri" xlink:href="https://github.com/christoftorres/HoneyBadger">https://github.com/christoftorres/HoneyBadger</ext-link></td>
<td rowspan="2">2023.3.7</td>
<td rowspan="2">Docker, Go-ethereum&#x002B;Z3&#x002B;python</td>
<td rowspan="2">4&#x2605;</td>
</tr>
<tr>
<td>Accessed: Mar. 19, 2024.</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s3_4">
<label>3.4</label>
<title>Evaluation Vulnerability Detection Coverage</title>
<p><xref ref-type="table" rid="table-4">Table 4</xref> displays the vulnerabilities that can be detected by the tools mentioned in this paper. It is important to note that some tools only convert the code into an easy-to-analyze form without directly instrumenting the smart contract. Although this method of converting code may aid in further analysis and identification of potential vulnerabilities, it still necessitates manual review and verification. Therefore, the security of smart contracts still requires a combination of expertise and experience when using these tools.</p>
<table-wrap id="table-4">
<label>Table 4</label>
<caption>
<title>Detecting tool vulnerability coverage</title>
</caption>
<table frame="hsides">
<colgroup>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<thead>
<tr>
<th>Tool name</th>
<th>Reentrancy</th>
<th>Integer overflow</th>
<th>Unchecked low level calls</th>
<th>Tx.origin</th>
<th>Time mani-pulation</th>
<th>Delegatecall</th>
<th>Access control</th>
<th>TOD</th>
<th>Denial of service</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vulpedia</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>SpCon</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>xFuzz</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>ESBMC</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>eTainter</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>Sailfish</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>RA</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Eth2Vec</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>EtherSolve</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Gas gauge</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>Echidna</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>WANA</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>SmartEmbed</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>VERISMART</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>sFuzz</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>EthBMC</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>EVMFuzzer</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>SolidityCheck</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Vultron</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>VeriSolid</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>SIF</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>FEther</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>Vandal</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Securify</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>EthIR</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>MAIAN</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Porosity</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>FSolidM</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>KEVM</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>SmartCheck</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>Slither</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>mythril</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>oyente</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Solmet</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Solhint</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>ContractFuzzer</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>Osiris</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x221A;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
<tr>
<td>HoneyBadger</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
<td>&#x00D7;</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
</sec>
<sec id="s4">
<label>4</label>
<title>Vulnerability Detection Framework Based on Hybrid Cloud Platform</title>
<p>By researching the majority of existing vulnerability detection tools, we have discovered that they are relatively challenging to use. L&#x00F3;pez Vivar et al. [<xref ref-type="bibr" rid="ref-79">79</xref>] proposed the ESAF framework for a unified analysis of smart contract vulnerabilities. This tool integrates several existing tools, allowing developers to leverage the strengths of different tools for smart contract vulnerability analysis. However, the tool itself relies on the user&#x2019;s local setup of Python, Docker, and MongoDB, which makes practical usage somewhat challenging. Ferreira et al. [<xref ref-type="bibr" rid="ref-80">80</xref>] introduced SmartBugs as a tool to assist developers in comparing their work with existing tools. This tool is Docker-configured, which enables users to utilize it through the command-line or web-UI. After execution, it generates reports based on the corresponding tool&#x2019;s returned results. However, practical users are required to possess certain knowledge and skills, and some of the tools within SmartBugs have longer execution times, making them unsuitable for running on personal computers.</p>
<p>Through literature research and practical experience, we have identified several challenges that arise when using Solidity-based code vulnerability detection tools in real-world applications:</p>
<p><italic>Significant time spent on environment configuration and debugging</italic>. Different tools require different runtime environments, which result in unnecessary cost of time, thus prolongs project completion cycles;</p>
<p><italic>Non-uniform input leads to strong independence</italic>. Current tools often exist as standalone entities, meaning that developers need to input contracts into multiple detection tools for testing manually. This adds complexity to the workflow and hinders the automation of testing processes;</p>
<p><italic>Comprehension difficulty due to different output formats</italic>. The output formats and interpretation methods of existing tools vary greatly, necessitating manual analysis by individuals with specialized knowledge to obtain the final detection results.</p>
<p>These above issues increase the difficulty of smart contract development and maintenance. Therefore, to facilitate the usage for developers, we have designed a vulnerability detection framework. This framework provides a unified contract detection interface, simplifies the vulnerability analysis process and offers more intuitive results.</p>
<p>The framework design encompasses the following four points:
<list list-type="bullet">
<list-item>
<p>It provides developers with a more convenient experience using unified contract detection interface. By reducing the learning curve and improving work efficiency. Developers no longer need to learn various cumbersome tool usage methods.</p></list-item>
<list-item>
<p>It possesses high scalability for tools. This scalability ensures that our framework can continuously update alongside the development of vulnerability detection techniques.</p></list-item>
<list-item>
<p>It offers a historical record query feature. Developers can conveniently review previous vulnerability analysis results and relevant information for comparison and analysis. Developers can better track the progress of vulnerability fixes and promptly engage in vulnerability prevention work.</p></list-item>
<list-item>
<p>It exhibits compatibility with multiple platforms, facilitating cross-platform usage for users. Whether operating on Windows, Mac, or Linux systems, developers can effortlessly employ our framework for vulnerability analysis, enhancing work flexibility and convenience.</p></list-item>
</list></p>
<sec id="s4_1">
<label>4.1</label>
<title>Environment and Related Technologies</title>
<p>In this section, we will introduce the operating environment of the framework. For the overall framework operation, we utilize Python as the primary building tool to implement the user interface and interaction logic. Python is a versatile programming language with powerful cross-platform capabilities, which allowing it to run on different operating systems.</p>
<p>In the vulnerability detection section, we employ VMware to run the detection tools. Specifically, we choose VMware as the platform to execute the detection tools. VMware is a virtualization software that enables the creation of multiple virtual machines on a single host, each running different operating systems. This allows for the simulation of various environments to accommodate the use of different detection tools.</p>
<p>Regarding the storage of user information and running results, we utilize MySQL as the database system. MySQL is an open-source relational database management system that is suitable for small to medium-sized applications. It is user-friendly, providing sufficient performance and reliability to meet most typical data storage and querying needs.</p>
</sec>
<sec id="s4_2">
<label>4.2</label>
<title>Module Function</title>
<p>The design philosophy of our framework is based on converting functional requirements analysis into a modular code structure. This design allows us to achieve better modularity and maintainability. Each functionality is encapsulated as an independent module and interacts with other modules through well-defined interfaces. This design enables us to conveniently expand and modify functionalities while reducing code coupling.</p>
<p>Our framework consists of four parts: the display module, the preprocessing module, the database module, and the virtualization validation module. The web interaction module serves as the user interface of the system, providing users with convenient features such as uploading contract files, viewing detection results, and accessing historical information. The preprocessing module performs initial processing on the uploaded contracts to improve the efficiency and accuracy of subsequent detection. The database module is an essential component of the smart contract vulnerability detection system. It primarily handles the storage and management of contract detection-related data, including preprocessed contracts, detection results, and the order of contract detection. The preprocessed contract results are stored in the database in the form of file addresses, facilitating subsequent testing and analysis. The virtualization testing module is the core part of the smart contract vulnerability detection system. It is responsible for comprehensive testing of smart contracts and feeding the results back to the database module for further analysis and processing.</p>
<p>Through the combination of these four modules, our framework is capable of achieving comprehensive detection and analysis of smart contracts. Moreover, this modular design allows for convenient expansion and modification of functionalities, enhancing the system&#x2019;s maintainability. Additionally, the interaction between modules through well-defined interfaces reduces code coupling. This design makes our framework more flexible and user-friendly.</p>
</sec>
<sec id="s4_3">
<label>4.3</label>
<title>Module Implementation</title>
<p>In this section, we will briefly describe the implementation details of the module based on the schematic diagram.</p>
<p>The operational logic of these interconnected modules is illustrated in <xref ref-type="fig" rid="fig-1">Fig. 1</xref>. The system comprises four key modules: the Display Module, the Preprocessing Module, the Database Module, and the Validation Module. The Display Module functions as the user interface, allowing users to input contract codes. The Preprocessing Module processes these input codes, preparing them for use by subsequent modules. The Database Module acts as an intermediary for storage and transmission, storing the preprocessed codes and transferring the data to the Validation Module in the order received. The Validation Module verifies the received data and sends the validation results back to the Database Module. Finally, the Database Module presents these validation outcomes to the user, enabling them to review and understand the system&#x2019;s evaluations.</p>
<fig id="fig-1">
<label>Figure 1</label>
<caption>
<title>Overall architecture of the framework</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-1.tif"/>
</fig>
<p>By employing such a modular operational logic, users can conveniently input contract codes and obtain corresponding validation results. This modular design enables each functional module of the system to work independently, facilitating ease of maintenance and expansion.</p>
<sec id="s4_3_1">
<label>4.3.1</label>
<title>Display Module</title>
<p>The display module serves as the user interface of the system, providing a platform for users to interact with it. It encompasses functionalities such as uploading contract files, viewing detection results, and accessing historical information. <xref ref-type="fig" rid="fig-2">Fig. 2</xref> shows the interface and key features of the display module.</p>
<fig id="fig-2">
<label>Figure 2</label>
<caption>
<title>Schematic diagram of the display module</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-2.tif"/>
</fig>
<p>In terms of user authentication, this framework provides functions such as registration, modification, and login to facilitate user identity management.</p>
<p>Throughout the entire interaction process, users can conveniently upload their contract files through a concise and intuitive interface. The process of uploading contract files is extremely simple, with just a click on the upload button and selecting the local file.</p>
<p>Simultaneously, the display module will perform a format check on the contract file uploaded by the user to ensure that it is indeed a valid contract file. For example, Solidity contract files typically have a .sol extension. This module will examine the file to ensure that it meets the required format. Once the contract file is uploaded, the web interaction module will pass it on to the system&#x2019;s preprocessing module for initial processing.</p>
</sec>
<sec id="s4_3_2">
<label>4.3.2</label>
<title>Preprocessing Module</title>
<p>As shown in <xref ref-type="fig" rid="fig-3">Fig. 3</xref>, the preprocessing module performs initial processing on the contracts uploaded by users to improve the efficiency and accuracy of subsequent detection. This module accomplishes two main tasks: removing comments from the source code to reduce code volume, and performing symbol substitution by replacing symbols in the code (such as variable names, function names, etc.) with fixed identifiers for further compilation and detection.</p>
<fig id="fig-3">
<label>Figure 3</label>
<caption>
<title>Schematic diagram of the preprocessing module</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-3.tif"/>
</fig>
<p>In the preprocessing module, the first step is to remove comments from the contracts. Although comments contribute to code readability, they are not necessary for compilation and detection. Therefore, removing comments can reduce code volume, save time and resources for subsequent processing.</p>
<p>To facilitate further compilation and detection, the preprocessing module also performs additional operations such as deleting unnecessary characters like spaces and newline symbols, ensuring code compliance and ease of subsequent detection.</p>
</sec>
<sec id="s4_3_3">
<label>4.3.3</label>
<title>Database Module</title>
<p>As shown in <xref ref-type="fig" rid="fig-4">Fig. 4</xref>, the entire database module is a vital component of the Smart Contract Vulnerability Detection Framework. It is primarily responsible for storing and managing data related to contract detection, including preprocessed contracts, detection results, and contract detection sequences. The results of the preprocessed module are stored in the database as file addresses, facilitating subsequent testing and analysis.</p>
<fig id="fig-4">
<label>Figure 4</label>
<caption>
<title>Schematic diagram of the database module</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-4.tif"/>
</fig>
<p>The relevant tables in the database contain attributes such as contract ID, user ID, detection results, and upload time. These attributes serve to uniquely identify contracts, differentiate between users, record the storage location of contracts and reports, and track the historical records and status of contracts. To ensure user privacy and confidentiality, appropriate permission controls have been implemented on the database, ensuring that each user can only view the results and reports of their own detected contracts.</p>
<p>The database module also includes a scheduling queue, which stores the IDs corresponding to contracts in the database. This queue is used to receive contracts processed by the preprocessing module. It stores the contract IDs passed from the preprocessing module and sends the contracts to the virtualized testing module. Once the virtualized testing module returns the results, they are stored in the database.</p>
</sec>
<sec id="s4_3_4">
<label>4.3.4</label>
<title>Virtualization Verification Module</title>
<p>As shown in <xref ref-type="fig" rid="fig-5">Fig. 5</xref>, we have the Virtualization Testing Module, which serves as the core component of the Vulnerability Detection Framework Based on Hybrid Cloud Platform. Its main responsibility is to comprehensively test smart contracts and provide feedback to the Database Module for subsequent queries. These tools may require different environmental conditions during runtime or even face conflicting situations. To address this issue, we have employed virtualization technology, which provides each tool with an independent operating environment that meets its specific runtime requirements, thereby avoiding conflicts between the tools.</p>
<fig id="fig-5">
<label>Figure 5</label>
<caption>
<title>Schematic diagram of virtualization verification module</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-5.tif"/>
</fig>
<p>Furthermore, the Virtualization Testing Module also takes into account that different versions of compilers may generate varying bytecode or even fail to compile, which could impact the execution results of the contracts. Therefore, we have incorporated an automatic compiler version switching module. Based on the contract&#x2019;s version information, the system will automatically switch to the corresponding compiler version, ensuring the fluency and reliability of the testing process. Once the virtualization testing is completed, the testing results will be transmitted back to the Database Module for further queries.</p>
</sec>
</sec>
<sec id="s4_4">
<label>4.4</label>
<title>Network Design Based on Hybrid Cloud Platform</title>
<p>To ensure the integrity of the study and ensure the scalability of the detection framework, we further propose the corresponding network structure and hardware planning. The purpose of these supplementary works is to address the limitations of our method in specific tasks and provide more efficient and accurate solutions.</p>
<p>As shown in <xref ref-type="fig" rid="fig-6">Fig. 6</xref>, the web server provides services through a unique domain name. The user&#x2019;s access request first reaches the Display and Preprocessing Module Server, where the router evenly distributes the requests to the servers and performs authentication services. At the same time, this server can preprocess the contracts after user submission. This architecture ensures that the system maintains good performance and availability even under high concurrent requests.</p>
<fig id="fig-6">
<label>Figure 6</label>
<caption>
<title>Network design schematic of the vulnerability detection framework based on a hybrid cloud platform</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-6.tif"/>
</fig>
<p>The Database Server is responsible for receiving smart contracts and storing data locally to ensure the security of user information. Additionally, this server can transmit the contracts to the virtualized detection module in the public cloud via the VPN Server through a dedicated link. The public cloud offers almost unlimited scalability. When demand increases, it is easy to add more virtual machines. Similarly, when demand decreases, it is convenient to reduce the number of virtual machines. This flexibility allows for dynamic adjustment of resources based on demand without the need for expensive hardware investments. Furthermore, deploying virtual machines in the public cloud usually takes only a few minutes, while deploying new physical servers locally may take several days or even weeks. This enables the framework to quickly scale with new tools.</p>
<p>Additionally, the Supervision Server allows for obtaining information from each server, including performance logs and detection logs, for analysis.</p>
</sec>
<sec id="s4_5">
<label>4.5</label>
<title>Framework Functional Tests</title>
<p>a. As shown in <xref ref-type="fig" rid="fig-7">Figs. 7</xref> and <xref ref-type="fig" rid="fig-8">8</xref>, the framework offers user registration and login functionality, enabling users to create accounts and access the framework by logging in.</p>
<fig id="fig-7">
<label>Figure 7</label>
<caption>
<title>Framework registration function</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-7.tif"/>
</fig><fig id="fig-8">
<label>Figure 8</label>
<caption>
<title>Framework login function</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-8.tif"/>
</fig>
<p>b. As shown in <xref ref-type="fig" rid="fig-9">Figs. 9</xref> and <xref ref-type="fig" rid="fig-10">10</xref>, the framework possesses the capability of unified detection and tool-specific detection to meet user requirements. Users can perform unified detection operations through the framework or choose to use different tools for detection. This flexibility allows users to select the most suitable detection method based on their own needs.</p>
<fig id="fig-9">
<label>Figure 9</label>
<caption>
<title>Overall query</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-9.tif"/>
</fig><fig id="fig-10">
<label>Figure 10</label>
<caption>
<title>Single tool query</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-10.tif"/>
</fig>
<p>c. As shown in <xref ref-type="fig" rid="fig-11">Fig. 11</xref>, the framework offers a functionality to query the history records, allowing users to conveniently retrieve their previous operation records. Users can trace their historical queries on the framework through this feature, facilitating reference, review, or analysis purposes.</p>
<fig id="fig-11">
<label>Figure 11</label>
<caption>
<title>Detection history query</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-11.tif"/>
</fig>
<p>d. As shown in <xref ref-type="fig" rid="fig-12">Fig. 12</xref>, the framework utilizes backend virtualization technology to establish a detection server, which provides a detection interface to the frontend. Users can interact with the backend virtualized detection server through the frontend page, submitting data for detection and retrieving the corresponding detection results.</p>
<fig id="fig-12">
<label>Figure 12</label>
<caption>
<title>Virtualized server interface</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-12.tif"/>
</fig>
</sec>
</sec>
<sec id="s5">
<label>5</label>
<title>Performance Experimental Analysis of Vulnerability Detection Tools</title>
<p>To assess the stability of the framework, we conducted over 1700 h of testing. Simultaneously, we aimed to investigate the hardware requirements of these tools by addressing the following three research questions:</p>
<p>RQ1: How does the execution speed of each tool compare?</p>
<p>To answer this question, we tested and compared different types of contracts, and calculated the running time of each tool.</p>
<p>RQ2: Do different tools optimize for multicore processing, and does using more cores result in faster execution speed?</p>
<p>To answer this question, we tested the running speed of various tools under different core counts.</p>
<p>RQ3: How does each tool consume memory during the execution process?</p>
<p>To answer this question, we tested the memory usage of different tools during the testing of hundreds of contracts, and compared their memory requirements under different core counts.</p>
<p><xref ref-type="sec" rid="s5_1">Section 5.1</xref> introduces our datasets and the hardware environment used. In <xref ref-type="sec" rid="s5_2">Section 5.2</xref>, we conducted tests for different core counts and compared the differences in execution speed. In <xref ref-type="sec" rid="s5_3">Section 5.3</xref>, we performed memory tests to showcase the memory requirements of the tools during different detection processes.</p>
<sec id="s5_1">
<label>5.1</label>
<title>Dataset</title>
<p>In recent years, the Ethereum community has developed numerous tools for analyzing vulnerable smart contracts. However, there is a lack of standardized datasets available. To gather sufficient experimental data, we utilized the dataset called SB Curated, manually constructed by Durieux et al. [<xref ref-type="bibr" rid="ref-81">81</xref>]. This dataset consists of 112 smart contracts, categorized into the five most common vulnerabilities: access control, denial of service, reentrancy, time manipulation, and unchecked low-level calls.</p>
</sec>
<sec id="s5_2">
<label>5.2</label>
<title>Implement Environment and Related Settings</title>
<p>We conducted the tests on a computer equipped with an Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50 GHz (48 CPUs) and 128 GB of memory. We chose ESXI 7.0 as the host system and used Ubuntu 20.04 as the virtual machine system.</p>
<p>For the batch testing script files, we used Python 3.8.10 as the programming language. Additionally, unless otherwise specified by the tools, the environment consisted of Docker version 20.10.16, npm version 6.14.4, and Java version 11.0.20.1.</p>
<p>We selected nine tools with different features and functionalities to cover various contract testing requirements. To ensure the accuracy of the test results and eliminate any interference from unexpected situations, we performed five tests on each contract and excluded the highest and lowest values to eliminate possible outliers. In total, we tested over 25,000 contracts. The entire testing process was time-consuming, totaling 1796.47 h. Among them, the main runtime was occupied by the Mythril tool for approximately 1700 h. To meet the running requirements of Mythril, we employed multiple servers and virtual machines for parallel execution.</p>
<p>In the experimental section, we conducted subgroup analysis to divide the study sample into different subgroups and compared the differences among them to draw conclusions.</p>
</sec>
<sec id="s5_3">
<label>5.3</label>
<title>Tool Runtime Testing</title>
<p>To evaluate the operational efficiency of the tool, we conducted tests on the tool&#x2019;s runtime. We standardized the configuration to 8 threads (4 cores, 2 threads) to simulate common setups. During the testing process, we recorded the runtime of each tool and performed a statistical analysis of the results. By comparing the runtime of different tools, we were able to assess their efficiency in handling contracts.</p>
<p>As shown in <xref ref-type="fig" rid="fig-13">Fig. 13</xref>, differences in runtime between various smart contract detection tools are evident. Notably, Solmet is the fastest tool, completing the detection in just 28.53393111 s. This tool primarily focuses on extracting relevant metrics from contracts, contributing to its faster processing speed.</p>
<fig id="fig-13">
<label>Figure 13</label>
<caption>
<title>Speed comparison for detection tools</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-13.tif"/>
</fig>
<p>Next in line are Slither and Solhint, with runtimes of 60.2818644 and 77.7760623 s, respectively. Both of these tools employ feature matching techniques, which involve analyzing the relationships between feature codes, thereby requiring less time. In contrast, ContractFuzzer and Honeybadger have relatively longer runtimes, clocking in at 1134.240254 and 3048.585183 s, respectively. The slowest tool is Mythril, which takes 254086.36 s. We can observe that tools utilizing symbolic execution and fuzz testing for detection operate at a slower pace compared to those employing feature matching. This can be attributed to Slither and Solhint directly analyzing Solidity code.</p>
</sec>
<sec id="s5_4">
<label>5.4</label>
<title>Multi-Core Optimization Testing</title>
<p>To further evaluate the operational efficiency of the smart contract detection tool and enhance its performance in real-world applications, we conducted multi-core optimization testing. These tests measured the recommended number of cores utilized by different tools and provided crucial indicators for optimizing resource utilization in subsequent frameworks.</p>
<p>During the testing process, we modified the configuration settings to various core counts and ran the tools for performance testing, while recording the execution time. We adjusted the test configuration to 1 thread, 2 threads, 4 threads, 8 threads, and 16 threads, respectively, and noted the execution time for each tool under each configuration. Subsequently, we compared the execution times to assess the impact of multi-core optimization on tool performance.</p>
<p><xref ref-type="fig" rid="fig-14">Fig. 14</xref> shows that, in most cases, the number of threads does not affect the running speed of the tools. This is because the execution process of these tools primarily depends on other factors rather than CPU processing power, such as the speed of input data and the bottleneck of memory reading. Therefore, the performance of some tools remains relatively stable, regardless of whether they are executed in a single-threaded or multi-threaded environment.</p>
<fig id="fig-14">
<label>Figure 14</label>
<caption>
<title>Test results for multi-core running speed of the detection tool</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-14.tif"/>
</fig>
<p>When studying the tools SmartCheck, Solmet, and Solhint, which utilize feature matching, we discovered their sensitivity to the number of threads through <xref ref-type="fig" rid="fig-15">Fig. 15</xref>. Under configurations with a high number of threads, these tools exhibited only a slight reduction in running time, indicating marginal effects. However, as the number of threads decreased, the performance of these tools noticeably declined. Particularly, the transition from 2 threads to a single thread resulted in a significant increase in running time, suggesting a high level of support for multi-threaded parallel computing by these tools.</p>
<fig id="fig-15">
<label>Figure 15</label>
<caption>
<title>Test results for speed improvement of detection tools with multiple cores</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-15.tif"/>
</fig>
<p>Furthermore, during our multi-threading optimization testing, we also observed some anomalies. Sometimes, increasing the number of threads did not necessarily result in a significant reduction in run time. As in <xref ref-type="fig" rid="fig-16">Fig. 16</xref>, the slither tool could even lead to a slight increase. This may be attributed to competition among threads in a multi-core system, causing an uneven distribution of resources. In particular, the slither tool demonstrated noticeable advantages in a single-threaded environment. This probably because it can more efficiently utilize the computational resources of a single core. However, in a multi-threaded environment, its performance decreases due to the presence of resource competition.</p>
<fig id="fig-16">
<label>Figure 16</label>
<caption>
<title>Test results for multi-core detection speed of the Slither</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-16.tif"/>
</fig>
</sec>
<sec id="s5_5">
<label>5.5</label>
<title>Memory Usage Test</title>
<p>To assess the memory usage of the system, we conducted a series of memory occupancy tests. These tests aimed to measure the amount of memory the system uses under different load conditions and provide us with crucial indicators to evaluate the system&#x2019;s resource utilization.</p>
<p>During the memory occupancy tests, we first ensured that the system was in a stable state and recorded the initial memory usage. Then, we employed various tools to test different types of contracts, such as withdrawal contracts, game contracts, gambling contracts, and more, to simulate diverse usage scenarios. Throughout the execution process of each test scenario, we continuously monitored the system&#x2019;s memory usage and recorded the memory occupancy at each time point.</p>
<p>To accurately measure memory occupancy, we utilized the psutil [<xref ref-type="bibr" rid="ref-82">82</xref>] module, a professional Python library for monitoring system resource usage. Throughout the testing process, we consistently used 16 GB of memory for the tests and employed the psutil module to record the memory occupancy of each contract at different time intervals.</p>
<p>After analyzing the experimental results in <xref ref-type="fig" rid="fig-17">Fig. 17</xref>, we observed that Mythril and Honey Badger consume a significant amount of memory during operation, reaching 13.76 and 3.952 GB, respectively. In contrast, Solhint, Solmet, and SmartCheck exhibit noticeably lower memory usage rates, with only 82, 98, and 393 MB, respectively. Therefore, it can be concluded that symbol execution tools with deep path coverage require a higher amount of memory. Conversely, tools based on feature matching require lower memory resources.</p>
<fig id="fig-17">
<label>Figure 17</label>
<caption>
<title>Test on memory usage of detection tools</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-17.tif"/>
</fig>
<p>It should be noted that certain tools exhibit a high sensitivity of memory usage to the number of cores. As shown in <xref ref-type="fig" rid="fig-18">Fig. 18</xref>, Solmet and SmartCheck showed a memory usage increase of up to double when running in multi-threaded mode compared to single-threaded mode. This indicates that increasing the number of cores significantly increases the memory requirements of these tools. This phenomenon could be attributed to the data interaction and synchronization operations involved in parallel processing. It also explains why these tools show a significant improvement in detection speed with higher thread counts.</p>
<fig id="fig-18">
<label>Figure 18</label>
<caption>
<title>Visualizing the results of a comparative test on memory usage for selected detection tools with different core counts</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-18.tif"/>
</fig>
</sec>
<sec id="s5_6">
<label>5.6</label>
<title>Vulnerability Detection Coverage</title>
<p>In this section, we conducted a practical evaluation of the vulnerability detection capability of the aforementioned tool and provided corresponding vulnerability detection results. However, honeybadger, which can only detect honeypot contracts, and Solmet, which does not test the contracts themselves, were excluded from the evaluation.</p>
<p><xref ref-type="fig" rid="fig-19">Fig. 19</xref> illustrates the specific vulnerability detection capabilities of each tool on SB Curated. Among them, Slither, SmartCheck, and Solhint exhibit higher vulnerability coverage compared to other tools. Slither and Solhint can cover all Time Manipulation vulnerabilities, while SmartCheck can cover all Access Control and Unchecked Low-level Calls vulnerabilities. For Reentrancy, Slither tool demonstrates the best coverage. On the contrary, Mythril and SmartCheck have lower coverage for Time Manipulation, and Oyente exhibits poor coverage for Unchecked Low-level Calls.</p>
<fig id="fig-19">
<label>Figure 19</label>
<caption>
<title>Vulnerability detection capabilities of each tools</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_52887-fig-19.tif"/>
</fig>
</sec>
</sec>
<sec id="s6">
<label>6</label>
<title>Conclusion</title>
<p>This paper presents a systematic review of currently available open-source smart contract vulnerability detection tools. We conducted a thorough analysis of the installation complexity of different open-source tools and their dependencies, providing a point of reference for future work.</p>
<p>Based on our current work, we propose a vulnerability detection framework to assist smart contract developers in analyzing vulnerabilities and ensuring the security of their contracts. Additionally, we introduce a network topology that corresponds to the cloud-based vulnerability detection framework. To evaluate the performance of the tools used in the framework, extensive testing was performed. The computational resource consumption and multi-core optimization of these tools were evaluated by monitoring their CPU usage and memory consumption during large-scale smart contract instrumentation. This allowed us to determine the processing power and memory capacity required for actual deployment during contract analysis. This work also provides a reference for future research. However, this paper did not evaluate the methods used by non-open-source tools, resulting in the omission of some relevant studies and thereby affecting the comprehensiveness of the review.</p>
<p>In future work, we aim to enhance and expand our vulnerability detection framework by integrating more smart contract vulnerability detection tools. As new vulnerability types and attack techniques are constantly emerging, we will monitor these developments closely and collaborate with the research community and security experts to update our research on vulnerability detection tools in a timely manner.</p>
</sec>
</body>
<back>
<ack>
<p>I would like to express my heartfelt thanks to my colleagues, fellow researchers, and mentors for their constant support, insightful discussions, and constructive feedback throughout the course of this project. Their guidance and expertise have been invaluable in shaping the direc-tion and improving the outcomes of this research. I am also grateful to the technical support team for their invaluable assistance in ensuring the availability and functionality of the necessary equipment and software required for conducting experiments and analyzing data. Their expertise and prompt response to technical issues have significantly contributed to the quality and reliability of the results obtained.</p>
</ack>
<sec><title>Funding Statement</title>
<p>The work is supported by the Major Public Welfare Special Fund of Henan Province (No. 201300210200), and the Major Science and Technology Research Special Fund of Henan Province (No. 221100210400).</p>
</sec>
<sec><title>Author Contributions</title>
<p>The authors confirm contribution to the paper as follows: study conception and design: Yaqiong He, Jinlin Fan; data collection: Jinlin Fan; analysis and interpretation of results: Jinlin Fan, Yaqiong He, HuaiguangWu; draft manuscript preparation: Jinlin Fan, Yaqiong He. All authors reviewed the results and approved the final version of the manuscript.</p>
</sec>
<sec sec-type="data-availability"><title>Availability of Data and Materials</title>
<p>The dataset used in this study is the SmartBugs Curated dataset, which is a publicly available collection of Ethereum smart contracts with known vulnerabilities. The dataset is hosted on GitHub at the following link: <ext-link ext-link-type="uri" xlink:href="https://github.com/smartbugs/smartbugs-curated">https://github.com/smartbugs/smartbugs-curated</ext-link> (accessed on 15/03/2024).</p>
</sec>
<sec sec-type="COI-statement"><title>Conflicts of Interest</title>
<p>The authors declare that they have no conflicts of interest to report regarding the present study.</p>
</sec>
<ref-list content-type="authoryear">
<title>References</title>
<ref id="ref-1"><label>[1]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>S.</given-names> <surname>Nakamoto</surname></string-name></person-group>, &#x201C;<article-title>Bitcoin: A peer-to-peer electronic cash system</article-title>,&#x201D; <comment>Accessed: Mar. 15, 2024</comment>. <comment>[Online]</comment>. Available: <ext-link ext-link-type="uri" xlink:href="https://bitcoin.org/bitcoin.pdf">https://bitcoin.org/bitcoin.pdf</ext-link></mixed-citation></ref>
<ref id="ref-2"><label>[2]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>N.</given-names> <surname>Szabo</surname></string-name></person-group>, &#x201C;<article-title>Formalizing and securing relationships on public networks</article-title>,&#x201D; <source>First Monday</source>, vol. <volume>2</volume>, no. <issue>9</issue>, <year>1997</year>.</mixed-citation></ref>
<ref id="ref-3"><label>[3]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>S.</given-names> <surname>Lande</surname></string-name> and <string-name><given-names>R.</given-names> <surname>Zunino</surname></string-name></person-group>, &#x201C;<article-title>SoK: Unraveling bitcoin smart contracts</article-title>,&#x201D; <source>Princ. Secur. Trust Lncs</source>, vol. <volume>10804</volume>, p. <fpage>217</fpage>, <year>2018</year>.</mixed-citation></ref>
<ref id="ref-4"><label>[4]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>M.</given-names> <surname>Andrychowicz</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Dziembowski</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Malinowski</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Mazurek</surname></string-name></person-group>, &#x201C;<article-title>Secure multiparty computations on bitcoin</article-title>,&#x201D; <source>Commun. ACM</source>, vol. <volume>59</volume>, no. <issue>4</issue>, pp. <fpage>76</fpage>&#x2013;<lpage>84</lpage>, <year>2016</year>. doi: <pub-id pub-id-type="doi">10.1145/2896386</pub-id>.</mixed-citation></ref>
<ref id="ref-5"><label>[5]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>V.</given-names> <surname>Buterin</surname></string-name></person-group>, &#x201C;<article-title>A next-generation smart contract and decentralized application platform</article-title>,&#x201D; <source>White Paper</source>, vol. <volume>3</volume>, no. <issue>37</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>2</lpage>, <year>2014</year>.</mixed-citation></ref>
<ref id="ref-6"><label>[6]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>M.</given-names> <surname>Xu</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Chen</surname></string-name>, and <string-name><given-names>G.</given-names> <surname>Kou</surname></string-name></person-group>, &#x201C;<article-title>A systematic review of blockchain</article-title>,&#x201D; <source>Financ. Innov.</source>, vol. <volume>5</volume>, no. <issue>1</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>14</lpage>, <year>2019</year>. doi: <pub-id pub-id-type="doi">10.1186/s40854-019-0147-z</pub-id>.</mixed-citation></ref>
<ref id="ref-7"><label>[7]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>X.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>J.</given-names> <surname>He</surname></string-name>, <string-name><given-names>Z.</given-names> <surname>Xie</surname></string-name>, <string-name><given-names>G.</given-names> <surname>Zhao</surname></string-name>, and <string-name><given-names>S.</given-names> <surname>Cheung</surname></string-name></person-group>, &#x201C;<article-title>ContractGuard: Defend Ethereum smart contracts with embedded intrusion detection</article-title>,&#x201D; <source>IEEE Trans. Serv. Comput.</source>, vol. <volume>13</volume>, no. <issue>2</issue>, pp. <fpage>314</fpage>&#x2013;<lpage>328</lpage>, <year>2019</year>. doi: <pub-id pub-id-type="doi">10.1109/TSC.2019.2949561</pub-id>.</mixed-citation></ref>
<ref id="ref-8"><label>[8]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>M.</given-names> <surname>Wohrer</surname></string-name> and <string-name><given-names>U.</given-names> <surname>Zdun</surname></string-name></person-group>, &#x201C;<article-title>Smart contracts: Security patterns in the ethereum ecosystem and solidity</article-title>,&#x201D; in <conf-name>2018 Int. Workshop Blockchain Orient. Softw. Eng. (IWBOSE)</conf-name>, <publisher-loc>Campobasso, Italy</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2018</year>, pp. <fpage>2</fpage>&#x2013;<lpage>8</lpage>.</mixed-citation></ref>
<ref id="ref-9"><label>[9]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>S.</given-names> <surname>Kalra</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Goel</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Dhawan</surname></string-name>, and <string-name><given-names>S.</given-names> <surname>Sharma</surname></string-name></person-group>, &#x201C;<article-title>ZEUS: analyzing safety of smart contracts</article-title>,&#x201D; in <conf-name>Network Distrib. Syst. Secur. (NDSS)</conf-name>, <publisher-loc>San Diego, CA, USA</publisher-loc>, <year>2018</year>, pp. <fpage>1</fpage>&#x2013;<lpage>12</lpage>.</mixed-citation></ref>
<ref id="ref-10"><label>[10]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>I.</given-names> <surname>Nikoli&#x0107;</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Kolluri</surname></string-name>, <string-name><given-names>I.</given-names> <surname>Sergey</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Saxena</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Hobor</surname></string-name></person-group>, &#x201C;<article-title>Finding the greedy, prodigal, and suicidal contracts at scale</article-title>,&#x201D; in <conf-name>Proc. 34th Annu. Comput. Secur. App. Conf.</conf-name>, <publisher-loc>San Juan, PR, USA</publisher-loc>, <year>2018</year>, pp. <fpage>653</fpage>&#x2013;<lpage>663</lpage>.</mixed-citation></ref>
<ref id="ref-11"><label>[11]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Daian</surname></string-name></person-group>, &#x201C;<article-title>Analysis of the DAO exploit</article-title>,&#x201D; <comment>Accessed: Dec. 20, 2023</comment>. <comment>[Online]. Available</comment>: <ext-link ext-link-type="uri" xlink:href="https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/">https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/</ext-link></mixed-citation></ref>
<ref id="ref-12"><label>[12]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>V.</given-names> <surname>Dhillon</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Metcalf</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Hooper</surname></string-name>, <string-name><given-names>V.</given-names> <surname>Dhillon</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Metcalf</surname></string-name> and <string-name><given-names>M.</given-names> <surname>Hooper</surname></string-name></person-group>, &#x201C;<article-title>The DAO hacked</article-title>,&#x201D; in <conf-name>Blockchain Enabled App.: Understand Blockchain Ecosyst. How Make Work You</conf-name>, <year>2017</year>, pp. <fpage>67</fpage>&#x2013;<lpage>78</lpage>.</mixed-citation></ref>
<ref id="ref-13"><label>[13]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>L.</given-names> <surname>Breidenbach</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Daian</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Juels</surname></string-name>, and <string-name><given-names>E. G.</given-names> <surname>Sirer</surname></string-name></person-group>, &#x201C;<article-title>An in-depth look at the parity multisig bug</article-title>,&#x201D; <comment>2023. Accessed: Mar. 15, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://hackingdistributed.com/2017/07/22/deep-dive-parity-bug/">https://hackingdistributed.com/2017/07/22/deep-dive-parity-bug/</ext-link></mixed-citation></ref>
<ref id="ref-14"><label>[14]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Etherscan</collab></person-group>, &#x201C;<article-title>Beautychain (BEC) token tracker | etherscan</article-title>,&#x201D; <comment>2003. Accessed: Mar. 15, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://etherscan.io/token/0xc5d105e63711398af9bbff092d4b6769c82f793d">https://etherscan.io/token/0xc5d105e63711398af9bbff092d4b6769c82f793d</ext-link></mixed-citation></ref>
<ref id="ref-15"><label>[15]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Singh</surname></string-name>, <string-name><given-names>R. M.</given-names> <surname>Parizi</surname></string-name>, <string-name><given-names>Q.</given-names> <surname>Zhang</surname></string-name>, <string-name><given-names>K. R.</given-names> <surname>Choo</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Dehghantanha</surname></string-name></person-group>, &#x201C;<article-title>Blockchain smart contracts formalization: Approaches and challenges to address vulnerabilities</article-title>,&#x201D; <source>Comput. Secur.</source>, vol. <volume>88</volume>, pp. <fpage>101654</fpage>, <year>2020</year>. doi: <pub-id pub-id-type="doi">10.1016/j.cose.2019.101654</pub-id>.</mixed-citation></ref>
<ref id="ref-16"><label>[16]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>G.</given-names> <surname>Wood</surname></string-name></person-group>, &#x201C;<article-title>Ethereum: A secure decentralised generalised transaction ledger</article-title>,&#x201D; <source>Ethereum Project Yellow Paper</source>, vol. <volume>151</volume>, no. <issue>2014</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>32</lpage>, <year>2014</year>.</mixed-citation></ref>
<ref id="ref-17"><label>[17]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>J. L.</given-names> <surname>Zhao</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Fan</surname></string-name>, and <string-name><given-names>J.</given-names> <surname>Yan</surname></string-name></person-group>, &#x201C;<article-title>Overview of business innovations and research opportunities in blockchain and introduction to the special issue</article-title>,&#x201D; <source>Financ. Innov.</source>, vol. <volume>2</volume>, no. <issue>1</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>7</lpage>, <year>2016</year>. doi: <pub-id pub-id-type="doi">10.1186/s40854-016-0049-2</pub-id>.</mixed-citation></ref>
<ref id="ref-18"><label>[18]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>L. W.</given-names> <surname>Cong</surname></string-name> and <string-name><given-names>Z.</given-names> <surname>He</surname></string-name></person-group>, &#x201C;<article-title>Blockchain disruption and smart contracts</article-title>,&#x201D; <source>Rev. Financ. Stud.</source>, vol. <volume>32</volume>, no. <issue>5</issue>, pp. <fpage>1754</fpage>&#x2013;<lpage>1797</lpage>, <year>2019</year>. doi: <pub-id pub-id-type="doi">10.1093/rfs/hhz007</pub-id>.</mixed-citation></ref>
<ref id="ref-19"><label>[19]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>J. H.</given-names> <surname>Han</surname></string-name>, and <string-name><given-names>P.</given-names> <surname>Beynon-Davies</surname></string-name></person-group>, &#x201C;<article-title>Understanding blockchain technology for future supply chains: A systematic literature review and research agenda</article-title>,&#x201D; <source>Supply Chain Manag.: Int. J.</source>, vol. <volume>24</volume>, no. <issue>1</issue>, pp. <fpage>62</fpage>&#x2013;<lpage>84</lpage>, <year>2019</year>. doi: <pub-id pub-id-type="doi">10.1108/SCM-03-2018-0148</pub-id>.</mixed-citation></ref>
<ref id="ref-20"><label>[20]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Reyna</surname></string-name>, <string-name><given-names>C.</given-names> <surname>Mart&#x00ED;n</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Chen</surname></string-name>, <string-name><given-names>E.</given-names> <surname>Soler</surname></string-name>, and <string-name><given-names>M.</given-names> <surname>D&#x00ED;az</surname></string-name></person-group>, &#x201C;<article-title>On blockchain and its integration with IoT. Challenges and opportunities</article-title>,&#x201D; <source>Future Gen. Comput. Syst.</source>, vol. <volume>88</volume>, no. <issue>3</issue>, pp. <fpage>173</fpage>&#x2013;<lpage>190</lpage>, <year>2018</year>. doi: <pub-id pub-id-type="doi">10.1016/j.future.2018.05.046</pub-id>.</mixed-citation></ref>
<ref id="ref-21"><label>[21]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>A. H.</given-names> <surname>Lone</surname></string-name> and <string-name><given-names>R.</given-names> <surname>Naaz</surname></string-name></person-group>, &#x201C;<article-title>Applicability of blockchain smart contracts in securing internet and IoT: A systematic literature review</article-title>,&#x201D; <source>Comput. Sci. Rev.</source>, vol. <volume>39</volume>, no. <issue>1</issue>, pp. <fpage>100360</fpage>, <year>2021</year>. doi: <pub-id pub-id-type="doi">10.1016/j.cosrev.2020.100360</pub-id>.</mixed-citation></ref>
<ref id="ref-22"><label>[22]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>K.</given-names> <surname>Peng</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Li</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Huang</surname></string-name>, <string-name><given-names>C.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Wan</surname></string-name> and <string-name><given-names>K. R.</given-names> <surname>Choo</surname></string-name></person-group>, &#x201C;<article-title>Security challenges and opportunities for smart contracts in internet of things: A survey</article-title>,&#x201D; <source>IEEE Internet Things J.</source>, vol. <volume>8</volume>, no. <issue>15</issue>, pp. <fpage>12004</fpage>&#x2013;<lpage>12020</lpage>, <year>2021</year>. doi: <pub-id pub-id-type="doi">10.1109/JIOT.2021.3074544</pub-id>.</mixed-citation></ref>
<ref id="ref-23"><label>[23]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>S.</given-names> <surname>Dustdar</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Fern&#x00E1;ndez</surname></string-name>, <string-name><given-names>J. M.</given-names> <surname>Garc&#x00ED;a</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Ruiz-Cort&#x00E9;s</surname></string-name></person-group>, &#x201C;<article-title>Elastic smart contracts in blockchains</article-title>,&#x201D; <source>IEEE/Caa J. Autom. Sin.</source>, vol. <volume>8</volume>, no. <issue>12</issue>, pp. <fpage>1901</fpage>&#x2013;<lpage>1912</lpage>, <year>2021</year>. doi: <pub-id pub-id-type="doi">10.1109/JAS.2021.1004222</pub-id>.</mixed-citation></ref>
<ref id="ref-24"><label>[24]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Li</surname></string-name> and <string-name><given-names>M.</given-names> <surname>Kassem</surname></string-name></person-group>, &#x201C;<article-title>Applications of distributed ledger technology (DLT) and blockchain-enabled smart contracts in construction</article-title>,&#x201D; <source>Autom. Constr.</source>, vol. <volume>132</volume>, no. <issue>1</issue>, pp. <fpage>103955</fpage>, <year>2021</year>. doi: <pub-id pub-id-type="doi">10.1016/j.autcon.2021.103955</pub-id>.</mixed-citation></ref>
<ref id="ref-25"><label>[25]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>D.</given-names> <surname>Kirli</surname></string-name> <etal>et al.</etal></person-group>, &#x201C;<article-title>Smart contracts in energy systems: A systematic review of fundamental approaches and implementations</article-title>,&#x201D; <source>Renew. Sustain. Energ. Rev.</source>, vol. <volume>158</volume>, no. <issue>1</issue>, pp. <fpage>112013</fpage>, <year>2022</year>. doi: <pub-id pub-id-type="doi">10.1016/j.rser.2021.112013</pub-id>.</mixed-citation></ref>
<ref id="ref-26"><label>[26]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>M.</given-names> <surname>Alharby</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Aldweesh</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>van Moorsel</surname></string-name></person-group>, &#x201C;<article-title>Blockchain-based smart contracts: a systematic mapping study of academic research, 2018</article-title>,&#x201D; in <conf-name>2018 Int. Conf. Cloud Comput., Big Data Blockchain (ICCBB)</conf-name>, <publisher-loc>Fuzhou, China</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2018</year>, pp. <fpage>1</fpage>&#x2013;<lpage>6</lpage>.</mixed-citation></ref>
<ref id="ref-27"><label>[27]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>X.</given-names> <surname>Li</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Jiang</surname></string-name>, <string-name><given-names>T.</given-names> <surname>Chen</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Luo</surname></string-name>, and <string-name><given-names>Q.</given-names> <surname>Wen</surname></string-name></person-group>, &#x201C;<article-title>A survey on the security of blockchain systems</article-title>,&#x201D; <source>Future Gen. Comput. Syst.</source>, vol. <volume>107</volume>, pp. <fpage>841</fpage>&#x2013;<lpage>853</lpage>, <year>2020</year>. doi: <pub-id pub-id-type="doi">10.1016/j.future.2017.08.020</pub-id>.</mixed-citation></ref>
<ref id="ref-28"><label>[28]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>N.</given-names> <surname>Atzei</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Bartoletti</surname></string-name>, and <string-name><given-names>T.</given-names> <surname>Cimoli</surname></string-name></person-group>, &#x201C;<article-title>A survey of attacks on ethereum smart contracts (SOK)</article-title>,&#x201D; in <conf-name>Princ. Secur. Trust: 6th Int. Conf.</conf-name>, <publisher-loc>Uppsala, Sweden</publisher-loc>, <publisher-name>Springer</publisher-name>, <year>2017</year>, pp. <fpage>164</fpage>&#x2013;<lpage>186</lpage>.</mixed-citation></ref>
<ref id="ref-29"><label>[29]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>L.</given-names> <surname>Zhu</surname></string-name>, <string-name><given-names>B.</given-names> <surname>Zheng</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Shen</surname></string-name>, <string-name><given-names>F.</given-names> <surname>Gao</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Li</surname></string-name> and <string-name><given-names>K.</given-names> <surname>Shi</surname></string-name></person-group>, &#x201C;<article-title>Data security and privacy in bitcoin system: A survey</article-title>,&#x201D; <source>J. Comput. Sci. Technol.</source>, vol. <volume>35</volume>, no. <issue>4</issue>, pp. <fpage>843</fpage>&#x2013;<lpage>862</lpage>, <year>2020</year>. doi: <pub-id pub-id-type="doi">10.1007/s11390-020-9638-7</pub-id>.</mixed-citation></ref>
<ref id="ref-30"><label>[30]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>S.</given-names> <surname>Tikhomirov</surname></string-name>, <string-name><given-names>E.</given-names> <surname>Voskresenskaya</surname></string-name>, <string-name><given-names>I.</given-names> <surname>Ivanitskiy</surname></string-name>, <string-name><given-names>R.</given-names> <surname>Takhaviev</surname></string-name>, <string-name><given-names>E.</given-names> <surname>Marchenko</surname></string-name> and <string-name><given-names>Y.</given-names> <surname>Alexandrov</surname></string-name></person-group>, &#x201C;<article-title>SmartCheck: Static analysis of ethereum smart contracts</article-title>,&#x201D; in <conf-name>Proc. 1st Int. Workshop Emerg. Trends Softw. Eng. Blockchain</conf-name>, <publisher-loc>Gothenburg, Sweden</publisher-loc>, <year>2018</year>, pp. <fpage>9</fpage>&#x2013;<lpage>16</lpage>.</mixed-citation></ref>
<ref id="ref-31"><label>[31]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Feist</surname></string-name>, <string-name><given-names>G.</given-names> <surname>Grieco</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Groce</surname></string-name></person-group>, &#x201C;<article-title>Slither: A static analysis framework for smart contracts</article-title>,&#x201D; in <conf-name>2019 IEEE/ACM 2nd Int. Workshop Emerg. Trends Softw. Eng. Blockchain (WETSEB)</conf-name>, <publisher-loc>Montreal, QC, Canada</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2019</year>, pp. <fpage>8</fpage>&#x2013;<lpage>15</lpage>.</mixed-citation></ref>
<ref id="ref-32"><label>[32]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>I.</given-names> <surname>Neamtiu</surname></string-name>, <string-name><given-names>J. S.</given-names> <surname>Foster</surname></string-name>, and <string-name><given-names>M.</given-names> <surname>Hicks</surname></string-name></person-group>, &#x201C;<article-title>Understanding source code evolution using abstract syntax tree matching</article-title>,&#x201D; in <conf-name>Proc. 2005 Int. Workshop Min. Softw. Repositor.</conf-name>, <publisher-loc>St. Louis, Missouri</publisher-loc>, <year>2005</year>, pp. <fpage>1</fpage>&#x2013;<lpage>5</lpage>.</mixed-citation></ref>
<ref id="ref-33"><label>[33]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>F. E.</given-names> <surname>Allen</surname></string-name></person-group>, &#x201C;<article-title>Control flow analysis</article-title>,&#x201D; <source>ACM Sigplan Not.</source>, vol. <volume>5</volume>, no. <issue>7</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>19</lpage>, <year>1970</year>. doi: <pub-id pub-id-type="doi">10.1145/390013.808479</pub-id>.</mixed-citation></ref>
<ref id="ref-34"><label>[34]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Godefroid</surname></string-name>, <string-name><given-names>M. Y.</given-names> <surname>Levin</surname></string-name>, and <string-name><given-names>D. A.</given-names> <surname>Molnar</surname></string-name></person-group>, &#x201C;<article-title>Automated whitebox fuzz testing</article-title>,&#x201D; in <conf-name>NDSS</conf-name>, <publisher-loc>San Diego, CA, USA</publisher-loc>, <year>2008</year>, pp. <fpage>151</fpage>&#x2013;<lpage>166</lpage>.</mixed-citation></ref>
<ref id="ref-35"><label>[35]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>J. C.</given-names> <surname>King</surname></string-name></person-group>, &#x201C;<article-title>Symbolic execution and program testing</article-title>,&#x201D; <source>Commun. ACM</source>, vol. <volume>19</volume>, no. <issue>7</issue>, pp. <fpage>385</fpage>&#x2013;<lpage>394</lpage>, <year>1976</year>. doi: <pub-id pub-id-type="doi">10.1145/360248.360252</pub-id>.</mixed-citation></ref>
<ref id="ref-36"><label>[36]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Newsome</surname></string-name> and <string-name><given-names>D. X.</given-names> <surname>Song</surname></string-name></person-group>, &#x201C;<article-title>Dynamic taint analysis for automatic detection, analysis, and signaturegeneration of exploits on commodity software</article-title>,&#x201D; in <conf-name>NDSS</conf-name>, <publisher-loc>Citeseer, San Diego, CA, USA</publisher-loc>, <year>2005</year>, pp. <fpage>3</fpage>&#x2013;<lpage>4</lpage>.</mixed-citation></ref>
<ref id="ref-37"><label>[37]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Ye</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Ma</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Lin</surname></string-name>, <string-name><given-names>L.</given-names> <surname>Ma</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Xue</surname></string-name> and <string-name><given-names>J.</given-names> <surname>Zhao</surname></string-name></person-group>, &#x201C;<article-title>VULPEDIA: Detecting vulnerable ethereum smart contracts via abstracted vulnerability signatures</article-title>,&#x201D; <source>J. Syst. Softw.</source>, vol. <volume>192</volume>, no. <issue>6</issue>, pp. <fpage>111410</fpage>, <year>2022</year>. doi: <pub-id pub-id-type="doi">10.1016/j.jss.2022.111410</pub-id>.</mixed-citation></ref>
<ref id="ref-38"><label>[38]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Liu</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Li</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Lin</surname></string-name>, and <string-name><given-names>C.</given-names> <surname>Artho</surname></string-name></person-group>, &#x201C;<article-title>Finding permission bugs in smart contracts with role mining</article-title>,&#x201D; in <conf-name>Proc. 31st ACM SIGSOFT Int. Symp. Softw. Test. Anal.</conf-name>, <publisher-name>Republic of Korea</publisher-name>, <year>2022</year>, pp. <fpage>716</fpage>&#x2013;<lpage>727</lpage>.</mixed-citation></ref>
<ref id="ref-39"><label>[39]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Xue</surname></string-name> <etal>et al.</etal></person-group>, &#x201C;<article-title>XFuzz: Machine learning guided cross-contract fuzzing</article-title>,&#x201D; <source>IEEE Trans. Dependable Secur. Comput.</source>, vol. <volume>21</volume>, no. <issue>2</issue>, pp. <fpage>515</fpage>&#x2013;<lpage>529</lpage>, <year>2022</year>.</mixed-citation></ref>
<ref id="ref-40"><label>[40]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>K.</given-names> <surname>Song</surname></string-name>, <string-name><given-names>N.</given-names> <surname>Matulevicius</surname></string-name>, <string-name><given-names>E. B.</given-names> <surname>de Lima Filho</surname></string-name>, and <string-name><given-names>L. C.</given-names> <surname>Cordeiro</surname></string-name></person-group>, &#x201C;<article-title>ESBMC-solidity: An SMT-based model checker for solidity smart contracts</article-title>,&#x201D; in <conf-name>Proc. ACM/IEEE 44th Int. Conf. Softw. Eng.: Companion Proc.</conf-name>, <publisher-loc>Pittsburgh, PA, USA</publisher-loc>, <year>2022</year>, pp. <fpage>65</fpage>&#x2013;<lpage>69</lpage>.</mixed-citation></ref>
<ref id="ref-41"><label>[41]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Ghaleb</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Rubin</surname></string-name>, and <string-name><given-names>K.</given-names> <surname>Pattabiraman</surname></string-name></person-group>, &#x201C;<article-title>eTainter: Detecting gas-related vulnerabilities in smart contracts</article-title>,&#x201D; in <conf-name>Proc. 31st ACM SIGSOFT Int. Symp. Softw. Test. Anal.</conf-name>, <publisher-loc>Republic of Korea</publisher-loc>, <year>2022</year>, pp. <fpage>728</fpage>&#x2013;<lpage>739</lpage>.</mixed-citation></ref>
<ref id="ref-42"><label>[42]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Bose</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Das</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Chen</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Feng</surname></string-name>, <string-name><given-names>C.</given-names> <surname>Kruegel</surname></string-name> and <string-name><given-names>G.</given-names> <surname>Vigna</surname></string-name></person-group>, &#x201C;<article-title>SAILFISH: Vetting smart contract state-inconsistency bugs in seconds</article-title>,&#x201D; in <conf-name>2022 IEEE Symp. Secur. Priv. (SP)</conf-name>, <publisher-loc>San Francisco, CA, USA</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2022</year>, pp. <fpage>161</fpage>&#x2013;<lpage>178</lpage>.</mixed-citation></ref>
<ref id="ref-43"><label>[43]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Chinen</surname></string-name>, <string-name><given-names>N.</given-names> <surname>Yanai</surname></string-name>, <string-name><given-names>J. P.</given-names> <surname>Cruz</surname></string-name>, and <string-name><given-names>S.</given-names> <surname>Okamura</surname></string-name></person-group>, &#x201C;<article-title>RA: A static analysis tool for analyzing re-entrancy attacks in ethereum smart contracts</article-title>,&#x201D; <source>J. Inf. Process.</source>, vol. <volume>29</volume>, pp. <fpage>537</fpage>&#x2013;<lpage>547</lpage>, <year>2021</year>. doi: <pub-id pub-id-type="doi">10.2197/ipsjjip.29.537</pub-id>.</mixed-citation></ref>
<ref id="ref-44"><label>[44]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>N.</given-names> <surname>Ashizawa</surname></string-name>, <string-name><given-names>N.</given-names> <surname>Yanai</surname></string-name>, <string-name><given-names>J. P.</given-names> <surname>Cruz</surname></string-name>, and <string-name><given-names>S.</given-names> <surname>Okamura</surname></string-name></person-group>, &#x201C;<article-title>Eth2Vec: Learning contract-wide code representations for vulnerability detection on ethereum smart contracts</article-title>,&#x201D; in <conf-name>Proc. 3rd ACM Int. Symp. Blockchain Secur. Crit. Infrastruct.</conf-name>, <publisher-loc>Hong Kong, China</publisher-loc>, <year>2021</year>, pp. <fpage>47</fpage>&#x2013;<lpage>59</lpage>.</mixed-citation></ref>
<ref id="ref-45"><label>[45]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>F.</given-names> <surname>Contro</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Crosara</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Ceccato</surname></string-name>, and <string-name><given-names>M.</given-names> <surname>Dalla Preda</surname></string-name></person-group>, &#x201C;<article-title>EtherSolve: Computing an accurate control-flow graph from ethereum bytecode</article-title>,&#x201D; in <conf-name>2021 IEEE/ACM 29th Int. Conf. Program Compr. (ICPC)</conf-name>, <publisher-loc>Madrid, Spain</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2021</year>, pp. <fpage>127</fpage>&#x2013;<lpage>137</lpage>.</mixed-citation></ref>
<ref id="ref-46"><label>[46]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>B.</given-names> <surname>Nassirzadeh</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Sun</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Banescu</surname></string-name>, and <string-name><given-names>V.</given-names> <surname>Ganesh</surname></string-name></person-group>, &#x201C;<article-title>Gas Gauge: A security analysis tool for smart contract out-of-gas vulnerabilities</article-title>,&#x201D; in <conf-name>Math. Res. Blockchain Econ.: 3rd Int. Conf. MARBLE 2022, Vilamoura, Portugal</conf-name>, <publisher-loc>Vilamoura, Portugal</publisher-loc>, <publisher-name>Springer</publisher-name>, <year>2023</year>, pp. <fpage>143</fpage>&#x2013;<lpage>167</lpage>.</mixed-citation></ref>
<ref id="ref-47"><label>[47]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>G.</given-names> <surname>Grieco</surname></string-name>, <string-name><given-names>W.</given-names> <surname>Song</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Cygan</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Feist</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Groce</surname></string-name></person-group>, &#x201C;<article-title>Echidna: Effective, usable, and fast fuzzing for smart contracts</article-title>,&#x201D; in <conf-name>Proc. 29th ACM SIGSOFT Int. Symp. Softw. Test. Anal.</conf-name>, <publisher-loc>USA</publisher-loc>, <year>2020</year>, pp. <fpage>557</fpage>&#x2013;<lpage>560</lpage>.</mixed-citation></ref>
<ref id="ref-48"><label>[48]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>D.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>B.</given-names> <surname>Jiang</surname></string-name>, and <string-name><given-names>W. K.</given-names> <surname>Chan</surname></string-name></person-group>, &#x201C;<article-title>WANA: Symbolic execution of wasm bytecode for cross-platform smart contract vulnerability detection</article-title>,&#x201D; <source>arxiv Preprint arxiv:2007.15510</source>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-49"><label>[49]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Z.</given-names> <surname>Gao</surname></string-name>, <string-name><given-names>L.</given-names> <surname>Jiang</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Xia</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Lo</surname></string-name>, and <string-name><given-names>J.</given-names> <surname>Grundy</surname></string-name></person-group>, &#x201C;<article-title>Checking smart contracts with structural code embedding</article-title>,&#x201D; <source>IEEE Trans. Softw. Eng.</source>, vol. <volume>47</volume>, no. <issue>12</issue>, pp. <fpage>2874</fpage>&#x2013;<lpage>2891</lpage>, <year>2020</year>. doi: <pub-id pub-id-type="doi">10.1109/TSE.2020.2971482</pub-id>.</mixed-citation></ref>
<ref id="ref-50"><label>[50]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>S.</given-names> <surname>So</surname></string-name>, <string-name><given-names>M.</given-names> <surname>Lee</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Park</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Lee</surname></string-name>, and <string-name><given-names>H.</given-names> <surname>Oh</surname></string-name></person-group>, &#x201C;<article-title>VERISMART: A highly precise safety verifier for ethereum smart contracts</article-title>,&#x201D; in <conf-name>2020 IEEE Symp. Secur. Priv. (SP)</conf-name>, <publisher-loc>San Francisco, CA, USA</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2020</year>, pp. <fpage>1678</fpage>&#x2013;<lpage>1694</lpage>.</mixed-citation></ref>
<ref id="ref-51"><label>[51]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>T. D.</given-names> <surname>Nguyen</surname></string-name>, <string-name><given-names>L. H.</given-names> <surname>Pham</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Sun</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Lin</surname></string-name>, and <string-name><given-names>Q. T.</given-names> <surname>Minh</surname></string-name></person-group>, &#x201C;<article-title>sFuzz: An efficient adaptive fuzzer for solidity smart contracts</article-title>,&#x201D; in <conf-name>Proc. ACM/IEEE 42nd Int. Conf. Softw. Eng.</conf-name>, <conf-loc>Seoul, Republic of Korea</conf-loc>, <year>2020</year>, pp. <fpage>778</fpage>&#x2013;<lpage>788</lpage>.</mixed-citation></ref>
<ref id="ref-52"><label>[52]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Frank</surname></string-name>, <string-name><given-names>C.</given-names> <surname>Aschermann</surname></string-name>, and <string-name><given-names>T.</given-names> <surname>Holz</surname></string-name></person-group>, &#x201C;<article-title>ETHBMC: A bounded model checker for smart contracts</article-title>,&#x201D; in <conf-name>Proc. 29th USENIX Conf. Secur. Symp.</conf-name>, <publisher-loc>Berkeley, CA, USA</publisher-loc>, <year>2020</year>, pp. <fpage>2757</fpage>&#x2013;<lpage>2774</lpage>.</mixed-citation></ref>
<ref id="ref-53"><label>[53]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Fu</surname></string-name> <etal>et al.</etal></person-group>, &#x201C;<article-title>Evmfuzzer: detect EVM vulnerabilities via fuzz testing</article-title>,&#x201D; in <conf-name>Proc. 2019 27th ACM Joint Meet. Eur. Softw. Eng. Conf. Symp. Found. Softw. Eng.</conf-name>, <publisher-loc>Tallinn, Estonia</publisher-loc>, <year>2019</year>, pp. <fpage>1110</fpage>&#x2013;<lpage>1114</lpage>.</mixed-citation></ref>
<ref id="ref-54"><label>[54]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Zhang</surname></string-name>, <string-name><given-names>F.</given-names> <surname>Xiao</surname></string-name>, and <string-name><given-names>X.</given-names> <surname>Luo</surname></string-name></person-group>, &#x201C;<article-title>Soliditycheck: quickly detecting smart contract problems through regular expressions</article-title>,&#x201D; <source>arxiv Preprint arxiv:1911.09425</source>, <year>2019</year>.</mixed-citation></ref>
<ref id="ref-55"><label>[55]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Zhang</surname></string-name>, <string-name><given-names>F.</given-names> <surname>Xiao</surname></string-name>, and <string-name><given-names>X.</given-names> <surname>Luo</surname></string-name></person-group>, &#x201C;<article-title>Soliditycheck/soliditycheck.pdf at master &#x00B7; xf97/soliditycheck</article-title>,&#x201D; <comment>2023. Accessed: Mar. 20, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://github.com/xf97/SolidityCheck">https://github.com/xf97/SolidityCheck</ext-link></mixed-citation></ref>
<ref id="ref-56"><label>[56]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>H.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Li</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Lin</surname></string-name>, <string-name><given-names>L.</given-names> <surname>Ma</surname></string-name>, and <string-name><given-names>Y.</given-names> <surname>Liu</surname></string-name></person-group>, &#x201C;<article-title>Vultron: Catching vulnerable smart contracts once and for all</article-title>,&#x201D; in <conf-name>2019 IEEE/ACM 41st Int. Conf. Softw. Eng.: New Ideas Emerg. Results (ICSE-NIER)</conf-name>, <publisher-loc>Montreal, Quebec, Canada</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2019</year>, pp. <fpage>1</fpage>&#x2013;<lpage>4</lpage>.</mixed-citation></ref>
<ref id="ref-57"><label>[57]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Mavridou</surname></string-name> <etal>et al.</etal></person-group>, &#x201C;<article-title>VeriSolid: Correct-by-design smart contracts for ethereum</article-title>,&#x201D; in <conf-name>Financ. Cryptogr. Data Secur.: 23rd Int. Conf.</conf-name>, <publisher-loc>Frigate Bay, St. Kitts, Nevis</publisher-loc>, <publisher-name>Springer</publisher-name>, <year>2019</year>, pp. <fpage>446</fpage>&#x2013;<lpage>465</lpage>.</mixed-citation></ref>
<ref id="ref-58"><label>[58]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>C.</given-names> <surname>Peng</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Akca</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Rajan</surname></string-name></person-group>, &#x201C;<article-title>SIF: A framework for solidity contract instrumentation and analysis</article-title>,&#x201D; in <conf-name>2019 26th Asia-Pacific Softw. Eng. Conf. (APSEC)</conf-name>, <publisher-loc>Putrajaya, Malaysia</publisher-loc>, <publisher-name>IEEE</publisher-name>, <year>2019</year>, pp. <fpage>466</fpage>&#x2013;<lpage>473</lpage>.</mixed-citation></ref>
<ref id="ref-59"><label>[59]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Z.</given-names> <surname>Yang</surname></string-name> and <string-name><given-names>H.</given-names> <surname>Lei</surname></string-name></person-group>, &#x201C;<article-title>FEther: An extensible definitional interpreter for smart-contract verifications in coq</article-title>,&#x201D; <source>IEEE Access</source>, vol. <volume>7</volume>, pp. <fpage>37770</fpage>&#x2013;<lpage>37791</lpage>, <year>2019</year>. doi: <pub-id pub-id-type="doi">10.1109/ACCESS.2019.2905428</pub-id>.</mixed-citation></ref>
<ref id="ref-60"><label>[60]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>L.</given-names> <surname>Brent</surname></string-name> <etal>et al.</etal></person-group>, &#x201C;<article-title>Vandal: A scalable security analysis framework for smart contracts</article-title>,&#x201D; <source>arxiv Preprint arxiv:1809.03981</source>, <year>2018</year>.</mixed-citation></ref>
<ref id="ref-61"><label>[61]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Tsankov</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Dan</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Drachsler-Cohen</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Gervais</surname></string-name>, <string-name><given-names>F.</given-names> <surname>Buenzli</surname></string-name> and <string-name><given-names>M.</given-names> <surname>Vechev</surname></string-name></person-group>, &#x201C;<article-title>Securify: Practical security analysis of smart contracts</article-title>,&#x201D; in <conf-name>Proc. 2018 ACM SIGSAC Conf. Comput. Commun. Secur.</conf-name>, <publisher-loc>Toronto, ON, Canada</publisher-loc>, <year>2018</year>, pp. <fpage>67</fpage>&#x2013;<lpage>82</lpage>.</mixed-citation></ref>
<ref id="ref-62"><label>[62]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>E.</given-names> <surname>Albert</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Gordillo</surname></string-name>, <string-name><given-names>B.</given-names> <surname>Livshits</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Rubio</surname></string-name>, and <string-name><given-names>I.</given-names> <surname>Sergey</surname></string-name></person-group>, &#x201C;<article-title>ETHIR: A framework for high-level analysis of ethereum bytecode</article-title>,&#x201D; in <conf-name>Autom. Tech. Verif. Anal.: 16th Int. Symp.</conf-name>, <publisher-loc>Los Angeles, CA, USA</publisher-loc>, <publisher-name>Springer</publisher-name>, <year>2018</year>, <fpage>513</fpage>&#x2013;<lpage>520</lpage>.</mixed-citation></ref>
<ref id="ref-63"><label>[63]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>M.</given-names> <surname>Suiche</surname></string-name></person-group>, &#x201C;<article-title>Porosity: A decompiler for blockchain-based smart contracts bytecode</article-title>,&#x201D; <source>Def. Con.</source>, vol. <volume>25</volume>, no. <issue>11</issue>, pp. <fpage>11</fpage>, <year>2017</year>.</mixed-citation></ref>
<ref id="ref-64"><label>[64]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Mavridou</surname></string-name> and <string-name><given-names>A.</given-names> <surname>Laszka</surname></string-name></person-group>, &#x201C;<article-title>Tool demonstration: Fsolidm for designing secure ethereum smart contracts</article-title>,&#x201D; in <conf-name>Princ. Secur. Trust: 7th Int. Conf., POST 2018, Held Part Eur. Joint Conf. Theory Pract. Softw.</conf-name>, <publisher-loc>Thessaloniki, Greece</publisher-loc>, <publisher-name>Springer</publisher-name>, <year>2018</year>, pp. <fpage>270</fpage>&#x2013;<lpage>277</lpage>.</mixed-citation></ref>
<ref id="ref-65"><label>[65]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>E.</given-names> <surname>Hildenbrandt</surname></string-name> <etal>et al.</etal></person-group>, &#x201C;<article-title>KEVM: A complete semantics of the ethereum virtual machine</article-title>,&#x201D; <year>2017</year>. <comment>Accessed: Mar. 10, 2024. [Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://www.ideals.illinois.edu/items/102260">https://www.ideals.illinois.edu/items/102260</ext-link></mixed-citation></ref>
<ref id="ref-66"><label>[66]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Ant</collab></person-group>, &#x201C;<article-title>Antlr</article-title>,&#x201D; <comment>Accessed: Mar. 10, 2024</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="http://www.antlr.org/">http://www.antlr.org/</ext-link></mixed-citation></ref>
<ref id="ref-67"><label>[67]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Consensys</collab></person-group>, &#x201C;<article-title>Consensys/mythril</article-title>,&#x201D; <comment>Accessed: Mar. 15, 2024</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://github.com/ConsenSys/mythril">https://github.com/ConsenSys/mythril</ext-link></mixed-citation></ref>
<ref id="ref-68"><label>[68]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>L.</given-names> <surname>Luu</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Chu</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Olickel</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Saxena</surname></string-name>, and <string-name><given-names>A.</given-names> <surname>Hobor</surname></string-name></person-group>, &#x201C;<article-title>Making smart contracts smarter</article-title>,&#x201D; in <conf-name>Proc. 2016 ACM SIGSAC Conf. Comput. Commun. Secur.</conf-name>, <publisher-loc>Vienna, Austria</publisher-loc>, <year>2016</year>, pp. <fpage>254</fpage>&#x2013;<lpage>269</lpage>.</mixed-citation></ref>
<ref id="ref-69"><label>[69]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Heged&#x0171;s</surname></string-name></person-group>, &#x201C;<article-title>Towards analyzing the complexity landscape of solidity based ethereum smart contracts</article-title>,&#x201D; in <conf-name>Proc. 1st Int. Workshop Emerg. Trends Softw. Eng. Blockchain</conf-name>, <publisher-loc>Gothenburg, Sweden</publisher-loc>, <year>2018</year>, pp. <fpage>35</fpage>&#x2013;<lpage>39</lpage>.</mixed-citation></ref>
<ref id="ref-70"><label>[70]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Protofire</collab></person-group>, &#x201C;<article-title>Solhint</article-title>,&#x201D; <comment>2023. Accessed: Mar. 22, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://protofire.github.io/solhint/">https://protofire.github.io/solhint/</ext-link></mixed-citation></ref>
<ref id="ref-71"><label>[71]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>B.</given-names> <surname>Jiang</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Liu</surname></string-name>, and <string-name><given-names>W. K.</given-names> <surname>Chan</surname></string-name></person-group>, &#x201C;<article-title>Contractfuzzer: Fuzzing smart contracts for vulnerability detection</article-title>,&#x201D; in <conf-name>Proc. 33rd ACM/IEEE Int. Conf. Autom. Softw. Eng.</conf-name>, <publisher-loc>Montpellier, France</publisher-loc>, <year>2018</year>, pp. <fpage>259</fpage>&#x2013;<lpage>269</lpage>.</mixed-citation></ref>
<ref id="ref-72"><label>[72]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>C. F.</given-names> <surname>Torres</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Sch&#x00FC;tte</surname></string-name>, and <string-name><given-names>R.</given-names> <surname>State</surname></string-name></person-group>, &#x201C;<article-title>Osiris: Hunting for integer bugs in ethereum smart contracts</article-title>,&#x201D; in <conf-name>Proc. 34th Annu. Comput. Secur. Appl. Conf.</conf-name>, <publisher-loc>San Juan, PR, USA</publisher-loc>, <year>2018</year>, pp. <fpage>664</fpage>&#x2013;<lpage>676</lpage>.</mixed-citation></ref>
<ref id="ref-73"><label>[73]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>C. F.</given-names> <surname>Torres</surname></string-name> and <string-name><given-names>M.</given-names> <surname>Steichen</surname></string-name></person-group>, &#x201C;<article-title>The art of the scam: Demystifying honeypots in ethereum smart contracts</article-title>,&#x201D; in <conf-name>28th USENIX Secur. Symp. (USENIX Secur. 19)</conf-name>, <publisher-loc>Santa Clara, CA, USA</publisher-loc>, <year>2019</year>, pp. <fpage>1591</fpage>&#x2013;<lpage>1607</lpage>.</mixed-citation></ref>
<ref id="ref-74"><label>[74]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>McGill-DMaS</collab></person-group>,  &#x201C;<article-title>Github-mcgill-dmas/kam1n0-community: the kam1n0 assembly analysis platform</article-title>,&#x201D; <comment>2023. Accessed: Mar. 03, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://github.com/McGill-DMaS/Kam1n0-Community">https://github.com/McGill-DMaS/Kam1n0-Community</ext-link></mixed-citation></ref>
<ref id="ref-75"><label>[75]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Gradle</collab></person-group>, &#x201C;<article-title>Gradle build tool</article-title>,&#x201D; <comment>2023. Accessed: Mar. 03, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://gradle.org/">https://gradle.org/</ext-link></mixed-citation></ref>
<ref id="ref-76"><label>[76]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Homebrew</collab></person-group>,  &#x201C;<article-title>Homebrew</article-title>,&#x201D; <comment>2023. Accessed: Mar. 03, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://brew.sh/">https://brew.sh/</ext-link></mixed-citation></ref>
<ref id="ref-77"><label>[77]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>NixOS</collab></person-group>, &#x201C;<article-title>Download nix/nixos</article-title>,&#x201D; <comment>2023. Accessed: March 03, 2023</comment></mixed-citation></ref>
<ref id="ref-78"><label>[78]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Commercialhaskell</collab></person-group>, &#x201C;<article-title>The Haskell tool stack</article-title>,&#x201D; <comment>2023. Accessed: Mar. 03, 2023</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://docs.haskellstack.org/en/stable/">https://docs.haskellstack.org/en/stable/</ext-link></mixed-citation></ref>
<ref id="ref-79"><label>[79]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>L&#x00F3;pez Vivar</surname></string-name>, <string-name><given-names>A. L.</given-names> <surname>Sandoval Orozco</surname></string-name>, and <string-name><given-names>L. J.</given-names> <surname>Garc&#x00ED;a Villalba</surname></string-name></person-group>, &#x201C;<article-title>A security framework for ethereum smart contracts</article-title>,&#x201D; <source>Comput. Commun.</source>, vol. <volume>172</volume>, no. <issue>5</issue>, pp. <fpage>119</fpage>&#x2013;<lpage>129</lpage>, <year>2021</year>. doi: <pub-id pub-id-type="doi">10.1016/j.comcom.2021.03.008</pub-id>.</mixed-citation></ref>
<ref id="ref-80"><label>[80]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>J. F.</given-names> <surname>Ferreira</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Cruz</surname></string-name>, <string-name><given-names>T.</given-names> <surname>Durieux</surname></string-name>, and <string-name><given-names>R.</given-names> <surname>Abreu</surname></string-name></person-group>, &#x201C;<article-title>SmartBugs: A framework to analyze solidity smart contracts</article-title>,&#x201D; in <conf-name>Proc. 35th IEEE/ACM Int. Conf. Autom. Softw. Eng.</conf-name>, <publisher-loc>Australia</publisher-loc>, <year>2020</year>, pp. <fpage>1349</fpage>&#x2013;<lpage>1352</lpage>.</mixed-citation></ref>
<ref id="ref-81"><label>[81]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>T.</given-names> <surname>Durieux</surname></string-name>, <string-name><given-names>J. F.</given-names> <surname>Ferreira</surname></string-name>, <string-name><given-names>R.</given-names> <surname>Abreu</surname></string-name>, and <string-name><given-names>P.</given-names> <surname>Cruz</surname></string-name></person-group>, &#x201C;<article-title>Empirical review of automated analysis tools on 47,587 ethereum smart contracts</article-title>,&#x201D; in <conf-name>Proc. ACM/IEEE 42nd Int. Conf. Softw. Eng.</conf-name>, <publisher-loc>Seoul, Republic of Korea</publisher-loc>, <year>2020</year>, pp. <fpage>530</fpage>&#x2013;<lpage>541</lpage>.</mixed-citation></ref>
<ref id="ref-82"><label>[82]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><collab>Giampaolo</collab></person-group>, &#x201C;<article-title>Psutil</article-title>,&#x201D; <comment>Accessed: Mar. 15, 2024</comment>. <comment>[Online]. Available:</comment> <ext-link ext-link-type="uri" xlink:href="https://github.com/giampaolo/psutil">https://github.com/giampaolo/psutil</ext-link></mixed-citation></ref>
</ref-list>
</back></article>