  Smart contracts have been increasingly used together with blockchains to
automate financial and business transactions. However, many bugs and
vulnerabilities have been identified in many contracts which raises serious
concerns about smart contract security, not to mention that the blockchain
systems on which the smart contracts are built can be buggy. Thus, there is a
significant need to better maintain smart contract code and ensure its high
reliability. In this paper, we propose an automated approach to learn
characteristics of smart contracts in Solidity, which is useful for clone
detection, bug detection and contract validation on smart contracts. Our new
approach is based on word embeddings and vector space comparison. We parse
smart contract code into word streams with code structural information, convert
code elements (e.g., statements, functions) into numerical vectors that are
supposed to encode the code syntax and semantics, and compare the similarities
among the vectors encoding code and known bugs, to identify potential issues.
We have implemented the approach in a prototype, named SmartEmbed. Results show
that our tool can effectively identify many repetitive instances of Solidity
code, where the clone ratio is around 90\%. Code clones such as type-III or
even type-IV semantic clones can also be detected accurately. Our tool can
identify more than 1000 clone related bugs based on our bug databases
efficiently and accurately. Our tool can also help to efficiently validate any
given smart contract against a known set of bugs, which can help to improve the
users' confidence in the reliability of the contract.
  The anonymous replication packages can be accessed at:
https://drive.google.com/file/d/1kauLT3y2IiHPkUlVx4FSTda-dVAyL4za/view?usp=sharing,
and evaluated it with more than 22,000 smart contracts collected from the
Ethereum blockchain.
