Abstract (eng)
Blockchain is more than just the technology behind the cryptocurrency Bitcoin. It can be seen as a driving force that has the potential to transform many domains. The technology is based on various computational and economic concepts to create a fraud-free intermediation platform to efficiently settle transactions between mutually distrusting parties. More specifically, the blockchain provides an infrastructure based on a Peer-to-Peer network to record transactions in a decentralized, transparent, and immutable manner to enable the storage of data or the autonomous execution of programs known as smart contracts. Driven by these possibilities, numerous companies and organizations have begun to explore blockchain in recent years to find meaningful application areas and develop applications based on the technology. In this context, new ground is being broken in many areas, and accordingly, recommendations for efficient approaches are needed. In this regard, this thesis addresses technical considerations and methods for building blockchain-based applications. In general, overarching designs and approaches are elaborated that have established themselves as best practices for blockchain-based software solutions from an architectural, development, and implementation perspective. The analysis is done in the scope of different topics in the context of the well-known blockchain platform Ethereum. However, many of the insights gained can also be generalized and applied to other platforms. First, fundamental architectural decisions and approaches are studied, from which follows that a hybrid architecture consisting of on- and off-chain components offers a good compromise between decentralization and quality attributes such as scalability, privacy, and usability. Furthermore, design patterns for data exchange across blockchain boundaries by means of so-called oracles are elaborated, resulting in four basic oracle patterns related to data flow dimensions (i.e., inbound/outbound and pull/push). Moreover, design patterns for smart contracts are devised and presented by means of 18 concrete patterns that solve problems related to operation, access control, management, and security. Subsequently, an abstract domain-specific language for smart contracts is developed and studied to enable the automatic application of these design patterns via code generation. Along the way, it is shown that abstraction and code generation can be a viable way to formulate smart contracts in order to increase the efficiency, clarity, and flexibility of code while reducing the susceptibility to errors. Last, typical DevOps activities are explored which show that core DevOps concepts and activities are similar to those in other domains, with the difference that more rigorous testing and differentiated deployment practices are required due to the inherent immutability of the blockchain. In summary, this thesis contributes to a better understanding of various topics that are important for the development of blockchain-based applications.