Comparison of various technologies for creating distributed applications.
- Ethereum: A generic blockchain platform
- Hyperledger Fabric: A modular blockchain platform
- Quorum: A permissioned blockchain built on Ethereum
- R3 Corda: A permissioned distributed ledger built on the JVM
- Governance: How changes are proposed and introduced into a network.
- Node: A logically independant participant in a decentralised computational network. E.g an Ethereum miner.
- Zero Knowledge Proof: One party, the prover, can convince another party, the verifier, that a given statement is true, without revealing any information beyond the validity of the statement itself. Implemented in Ethereum as ZK-Snarks. Read the white paper
- Microsoft's Coco Framework whitepaper
Ethereum | Quorum | Hyperledger Fabric | R3 Corda | |
---|---|---|---|---|
Documentation | Good | OK | OK | Good |
Consensus | PoA, PoW, PoS (beta) | RAFT, Instanbul BFT | Pluggable (PoW, PoA, BFT etc) | Notary: RAFT |
Networks & Governance | Public/Consortium/Private. Ethereum Foundation | Consortium/Private. JP Morgan Chase | Consortium/Private. Linux Foundation | Consortium/Private. R3 Consortium |
Permissioning | No | Yes | Yes, with Sawtooth | Yes |
Native Confidentiality | No | Yes | Yes | Yes |
Development | Language: Solidity, Client: web3.js/ web3j | Language: Solidity, Client: web3.js (modified) | Go & NodeJS | Kotlin & Java |
Ecosystem | Large | Potentially Large (from Ethereum) | Medium | Small |
In Production | Yes | No | No | No |
Source | Ethereum | Quorum | Hyperledger Fabric | R3 Corda |
---|---|---|---|---|
Official | EthDocs , Wiki | Wiki | Read the Docs | Docs |
Github | ethereum | J.P. Morgan Chase | hyperledger | Corda |
Forums | Stack Exchange | tagged Quorum | tagged Hyperledger-fabric | tagged Corda |
Chat | Gitter | ? | Rocket | Slack |
Algorithm | Description | Ethereum | Quorum | Hyperledger Fabric | R3 Corda |
---|---|---|---|---|---|
Byzantine Fault Tolerant (BFT) | General term: a network that avoids catastrophic system failure, even if some of the nodes are unreliable. Named after a 1982 paper by Leslie, Shostak and Pease called "The Byzantine Generals Problem". | Yes | Yes | Yes | Notaries: Yes via RAFT. Nodes: No by design (all nodes are trusted) |
Proof of Work (PoW) | Revolutionary consensus algorithm implemented in Bitcoin. Nodes solve artibrarily hard cryptographic puzzles, randomly distributing the right determine the order of transactions accross the nodes. Generally not scaleable (Tx/sec). Compute intensive. Enables public networks and anonymous nodes. | Yes | No | No | No |
Proof of Stake (PoS) | Nodes 'stake' some valuable crypto-asset (e.g. ether) for the right to determine the order of transactions (i.e. create new blocks). Nodes are game-theoretically incentivised to be trustworthy through a system of rewards and punishments proportional to stake. | Yes (Casper) | No | No | No |
Proof of Authority (PoA) | Only nodes with correctly signed certificates can determine the order of transactions and create new blocks. | Yes | Yes | Yes | Yes |
RAFT | Nodes elect a leader who's responsibility it is to determine the order of transactions. Fast consensus. Suitable only for private networks because leader based consensus algorithms are vulnerable to DDOS attack. Video: Raft in 20 mins | No | Yes | Not by default | Yes as Notary Nodes |
Ethereum | Quorum | Hyperledger Fabric | R3 Corda | |
---|---|---|---|---|
Public | Ethereum is generally domainated by ETH, but there exist hard forks including Ethereum Classic (ETC) and EtherZero (ETZ). There is one ETH mainnet and several test nets including Morden. Public networks generally use a PoW consensus algorithm. Governance of this network is determined only by the emergent behaviour of the nodes. In practice, governance is achieved by the community of developers. Disagreement in the community may result in a 'fork', eg: Ethereum Classic | No | No? | No |
Consortium/ Private | Anyone can create a new consortium or private network using PoW or PoA. The Rinkeby testnet uses PoA. | Designed for consortium or private networks. Uses an Ethereum Network and a Constellation network side-by-side to provide private data features. | Designed for consortium or private networks. | Designed for consortium or private networks. |
Technology | Ethereum Foundation | JP Morgan Chase | Linux Foundation: Hyperledger Project | R3: a network of over 60 companies |
Properly permissioned blockchain networks differ from unpermissioned blockchain networks solely based on the presence (or absence) of an access control layer built into the blockchain nodes. Permissioned blockchain networks allow the network to appoint a group of participants in the network who are given the express authority to provide the validation of blocks of transactions. Or, to participate in the consensus mechanism. source
Ethereum | Quorum | Hyperledger Fabric | R3 Corda | |
---|---|---|---|---|
Native | No | Yes | Yes | Yes |
Microsoft Coco Framework | Yes | Yes | Hyperledger Sawtooth | Yes |
Ethereum | Quorum | Hyperledger Fabric | R3 Corda | |
---|---|---|---|---|
Private Data | Possible but not native | Natively yes via Constellation | Natively yes via Channels | Natively yes, because all communication is direct P2P, but data is shared with validating notaries |
Note on private data and Coco Framework: support for (confidential transactions) should be present(or added)in the integrated blockchain protocol.
Ethereum | Quorum | Hyperledger Fabric | R3 Corda | |
---|---|---|---|---|
Contract^1 Language | Solidity, Serpent (deprecated) , Vyper (experimental) | Solidity, Serpent (deprecated) , Vyper (experimental) | Chaincode can be written in any programming language and executed in containers. The first fully supported chaincode language is Golang | Java, Kotlin |
Execution Environment | EVM^2, implemented by: Geth in golang, or Parity in Rust, cpp etherum in c++ | Modified EVM, fork of Geth | Docker (Ubuntu), with base image on DockerHub | Java Virtual Machine (JVM) |
External API | JSONRPC | JSONRPC (modified) | CLI, REST | Deprecated WebServer |
Client Library | web3.js, web3j for Java & Android | web3 (modified) | Hyperledger Fabric SDK for Node.js | none |
Developer Tools | Truffle, Embark, Dapp, Remix solidity editor, Eth Fiddle solidity editor |
-
Distributed logic in the generic sense, not in the Corda specific sense.
-
The Ethereum Virtual Machine (EVM) can be thought of as a large decentralized computer containing millions of objects, called "accounts", which have the ability to maintain an internal database, execute code and talk to each other.
Ethereum | Quorum | Hyperledger Fabric | R3 Corda | |
---|---|---|---|---|
Browsers | Mist, Toshi, Status, Cypher | |||
Applications | uPort, Basic Attention Token, auger, Crypto Kitties, EtherRisc, see State of the Dapps for an extensive list | |||
Tools | MetaMask |
Ethereum | Quorum | Hyperledger Fabric | R3 Corda |
---|---|---|---|
Largest developer community and ecosystem | Native Confidentiality tools | Component Modularity | Private data between 2+ parties |
Public and Private options | Permissioning tools | ||
Strong EVM determinism | |||
Ethereum | Quorum | Hyperledger Fabric | R3 Corda |
---|---|---|---|
No native "enterprise" features | Unlike Ethereum's EVM that's guarenteed deterministic, there is no "Corda Virtual Machine" and Corda has no strong determinism guarantee. | ||
Identities are tied to nodes, rather than public/private key pairs. | |||
Currently, state is stored to disk via H2 SQL, disabling high availability | |||
- Ethereum ARM template to make it easy to spin up a Blockchain network will work on it's own or that could easily be connected to an existing network.
- A how-to guide on setting up your Windows 10 PC for Ethereum development