I. Introduction
The original purpose of the blockchain technology was to serve as the public distributed ledger of Bitcoin [1] transactions. Recently, blockchain receives so much attention that it gradually becomes a new paradigm for distributed computing. In particular, the concept of smart contracts [2], a piece of executable script embedded in a transaction, has been realized in many modern blockchain technologies such as Ethereum [3] and Hyperledger[4]. Hence, the blockchain technology has be seen as a universal decentralized database and a contract execution platform that is autonomous, traceable, point-to-point, decentralized, and possesses a Byzantine fault-tolerant capability. The application of blockchains also extends from the digital currency to the general applications, such as remittance payments, equity liquidation, mass fundraising, asset registration and even the Internet of Things (IoT) applications [5]. There are also various new applications of blockchain in the household, industry, health care as well as art and creative industry[6]. Currently, most of the blockchain technologies are still under active development. Besides, many software engineering issues of blockchain applications are still not well-explored. Therefore, it is generally agreed that building a blockchain-based application that possesses commercial quality is much more challenging than that of an enterprise application [7].