# MDA-Based Approach for Blockchain Smart Contract Development
## 1 Introduction  
Decentralisation of business processes can increase trust, transparency, and traceability, thus augmenting the existing information systems or assisting the development of new ones [1]. Among the various means of introducing decentralisation, blockchain technology is the most prominent solution. The introduction of blockchain requires smart contracts to be developed, which are considered to be the main software artefact of most blockchain technology-based solutions [2]. In essence, smart contracts are programs executed on a specific blockchain platform network. They can be utilised to cover parts or all aspects of business processes by implementing software components that are hosted on a peer-to-peer network and allow data sharing across network participants using the public blockchain ledger [3]. Currently, the majority of blockchain platforms support smart contracts, thus ensuring that the technology has the potential to cover entire decentralised software applications without the need to rely on any intermediaries. The introduction of smart contracts in the information system domain provides numerous advantages, but such improvements come with development constraints since the technology introduces specific principles to which applications must adhere [4]. Although the smart contract itself is a software artefact, it has specific features that make the development of smart contracts a complicated process, even more complex than traditional software development. In iterative software development, the phases of requirement specification, design, implementation, testing, and deployment can be repeated according to the need, thus not only enabling prompt response to changes but also ensuring thecontinuous support of the deployed software. In contrast, the smart contract development process can support iterations only before the deployment phase: due to smart contract immutability, the code of the smart contract cannot be altered after it has been deployed on the blockchain. Existing methodological support for the development of smart contracts is limited, and current development processes are usually poorly defined [5; 6; 7]. Furthermore, the development phases are not as interconnected as they should be and the inputs and outcomes are not clearly defined [5], leaving the developer to fill the gaps with experience or with additional analysis during each development phase [8]. To facilitate the development of smart contracts, additional support and a clearer definition of the smart contract development process are required [3; 9]. In information system development, the principle of raising the level of abstraction is commonly used by introducing software modelling, which can also enable code generation [10]. Modelling facilitates the specification of the system under development in a more abstract notation than the code itself; simplifies communication, documentation, and collaboration; and promotes reuse by separating the specification from the specific implementation technology. Concept modelling is particularly apparent in model-driven development (MDD), which also can be successfully applied in smart contract development, by introducing models that define the structure and behaviour of smart contracts as key artefacts of the development process [11; 12]. The modelling can cover a variety of activities during which the developer, instead of investing a considerable amount of time in smart contract programming in a specific programming language, could spend the time outlining the behavioural and structural details common to any blockchain platform and eliciting requirements to be met for the decentralisation of the business processes. The specified models can then be used to support the verification of requirements, system design, code production, testing, and deployment activities. In the area of model-driven development, a more comprehensive approach exists which encompasses the application of several abstraction layers for introducing support of different implementation platforms.