Disclaimer: This is a summary of patterns we have observed during our research and should not be considered any form of technical or investment advice. Also, the given “known examples” do not imply they are the best implementations of the said pattern or any superior to any other implementation of the pattern not listed.

Blockchain is an emerging technology that enables a new form of decentralised software architecture, where distributed components can reach agreements on shared system states without trusting a central integration point. Blockchain provides a shared infrastructure to execute programs, called smart contracts, and to store data. Because blockchain is an emerging technology, a systematic and holistic view of designing software systems that use blockchains is yet to emerge.

This website aims to systematically capture and organise knowledge on designing blockchain-based applications in the form of a set of design patterns. A design pattern is a reusable solution to problems that commonly occur within a given context during software design. It further defines constraints that restrict architectural elements’ roles (e.g., processing, connectors, and data) and the interaction among those elements. When adopting a design pattern, we need to consider trade-offs among a set of software quality attributes.

We view blockchain as part of a bigger information system, where patterns could assist the robust design of large blockchain-based systems. Some of the patterns are explicitly identified based on real-world, blockchain-based applications that leverage blockchains’ unique properties. Others are variants of existing design patterns applied in the context of blockchain-based applications and smart contracts. These patterns are helpful to software architects, developers, system administrators, and technical leads who need to design, develop, and monitor the blockchain and distributed-ledger-based projects.

Further, we present a set of decision models that help developers and architects select appropriate patterns for blockchain-based applications. Our selection is based on the characteristics of the use cases and trade-offs implicit in the patterns. Most of the presented patterns and decision models should be applicable in concrete use cases regardless of the blockchain framework and smart contract language.

We wish to engage in a dialogue about the patterns, known uses, decision models, and our research in general. Please reach us via the Contact Us page.