I. Introduction
Blockchain is a distributed ledger technology to manage data in a decentralized way. Bitcoin, its first application, has the purpose of providing a software infrastructure for decentralized payments on untrusted environments [1]. Bitcoin leaded the first generation of blockchains, which provides user anonymity, data immutability and transparency over a decentralized network of untrusted participants. Trust is achieved by following rules defined by consensus protocols that guarantee and define how transactions are reliably registered into the ledger, avoiding the misbehaviour of malicious participants. A second generation of blockchains, leaded by Ethereum [2], added support for Turing complete scripting capabilities and state management, that enable and provide support for new use cases besides cryptocurrency exchange and transfer (e.g. art sale). More recently, organizations started building consortiums and using blockchain technology to improve their business processes, leading to enterprise blockchains [3]. These blockchains have additional requirements (e.g. data privacy and user identification) which were not supported by the original design features provided by Bitcoin and Ethereum. In fact, they need to be closed and permissioned as opposed to the later, which are open and unrestricted, allowing users to have full access to the ledger, participate on the consensus protocol and record transactions. As a consequence, a new generation of blockchains emerged to fulfill these requirements (e.g. Hyperledger Fabric [4] and Corda [5]). These new permissioned blockchains require users to be identified and granted permissions in order to have access to the ledger or participate in the consensus protocol as opposed to previous permissionless blockchains.