# Software Engineering Applications Enabled by Blockchain Technology: A Systematic Mapping Study
## 2 Background and Related Works
### Blockchain Technology  
Blockchain technology, known as the \"Internet of Individuals\", has been considered a revolutionary paradigm [2]. From an architectural perspective, blockchain is a distributed ledger, that stores transactions in an ever-growing chain of blocks [19]. Figure 1 illustrates how each block contains the hash of the previous block, leading to the structure of a linked list [20].  
This structure ensures an important property of blockchain which is _immutability_. The following scenario explains how this property is ensured [21]: Suppose there is an attempt to tamper with data in block \(n\). This would cause a re-computation of that block's hash. Additionally, this hash is also present in the following block \(n+1\). Thereby, the hash of block \(n+1\) would need to be re-calculated, along with all the following blocks' hashes. In  
Figure 1: Blockchain structure, adapted from [20].  
this scenario, creating new valid blocks becomes difficult, as the attacker would need the majority of the network's computational power to rewrite history and calculate new blocks.  
Furthermore, blockchain is _decentralized_ and as opposed to centralized systems, there is no single entity that manages the network or the blockchain itself [21]. While the decentralized nature of blockchain is advantageous because it eliminates the single point of failure problem experienced in centralized systems, it also implies the need for a distributed validation process. As the number of transactions increases, the computational effort for validation also increases. To address this, blockchain-based systems, such as Bitcoin make use of Merkle trees which are data structures that store hashes of transactions [20]. These hash trees enable nodes to verify transactions without the need to download the entire blockchain [20].  
The data stored on the public blockchain are transparent to each node [22]. However, _transparency_ comes at the price of privacy. One may argue that the openness of transaction data may imply identifiability. To provide _anonymity_, users are linked to public addresses. As a consequence, users' personal details are preserved to some extent from being revealed, although means to link information in a public blockchain exist. A variety of techniques and proposals to increase the level of anonymity have been extensively discussed in a technical survey provided by [PERSON] and [PERSON] [20].  
The potential of blockchain has been greatly extended with the introduction of _smart contracts_[23]. Smart contracts are scripts stored on blockchain, that are triggered by posting a transaction to the blockchain [24]. Afterwards, smart contracts are self-executed in a predefined way on every network node [25]. The result of such execution causes a status change in the blockchain [24]. To simplify the concept, smart contracts allow us to convert the business logic in code. Originally, smart contracts were conceived to automatically achieve agreement between two parties when they sign a contract [26]. To date, the scope of smart contracts has been extended and in fact, from a conceptual perspective, they can perform any task that general-purpose software programs can perform. However, it is important to identify SE use cases that could benefit from the aspects that blockchain offers, e.g., _decentralized_, _immutability_, _transparency_, _anonymity_ and _smart contracts_.