Trade-offs

  • Permissioned networks are better suited for financial use-cases
  • Point-to-point communication allows information to be shared need-to-know
  • A UTXO model allows for more transactions-per-second

Traditional blockchain networks are permissionless. The parties on the network are anonymous, and can join and leave at will.

By contrast, Corda networks are permissioned. Each party on the network has a known identity that they use when communicating with counterparties, and network access is controlled by a doorman. This has several benefits:

  • Anonymous parties are inappropriate for most scenarios involving regulated financial institutions
  • Knowing the identity of your counterparties allows for off-ledger resolution of conflicts using existing legal systems
  • Sybil attacks are averted without the use of expensive mechanisms such as proof-of-work

Traditional blockchain networks broadcast every message to every participant. The reason for this is two-fold:

  • Counterparty identities are not known, so a message must be sent to every participant to ensure it reaches its intended recipient
  • Making every participant aware of every transaction allows the network to prevent double-spends

The downside is that all participants see everyone else’s data. This is unacceptable for many use-cases.

In Corda, each message is instead addressed to a specific counterparty, and is not seen by any uninvolved third parties. The developer has full control over what messages are sent, to whom, and in what order. As a result, data is shared on a need-to-know basis only. To prevent double-spends in this system, we employ notaries as an alternative to proof-of-work.

Corda also uses several other techniques to maximize privacy on the network:

  • Transaction tear-offs: Transactions are structured in a way that allows them to be digitally signed without disclosing the transaction’s contents. This is achieved using a data structure called a Merkle tree. You can read more about this technique in Defining transaction tear-offs.
  • Key randomisation: The parties to a transaction are identified only by their public keys, and fresh key pairs are generated for each transaction. As a result, an onlooker cannot identify which parties were involved in a given transaction.

Corda uses a UTXO (unspent transaction output) model. Each transaction consumes a set of existing states to produce a set of new states.

The alternative would be an account model. In an account model, stateful objects are stored on-ledger, and transactions take the form of requests to update the current state of these objects.

The main advantage of the UTXO model is that transactions with different inputs can be applied in parallel, vastly increasing the network’s potential transactions-per-second. In the account model, the number of transactions-per-second is limited by the fact that updates to a given object must be applied sequentially.

Financial institutions need the ability to resolve conflicts using the traditional legal system where required. Corda is designed to make this possible by:

  • Having permissioned networks, meaning that participants are aware of who they are dealing with in every single transaction
  • All code contracts should include a LegalProseReference link to the legal document describing the contract’s intended behavior which can be relied upon to resolve conflicts

Wherever possible, Corda re-uses existing technologies to make the platform more robust platform overall. For example, Corda re-uses:

  • Standard JVM programming languages for the development of CorDapps
  • Existing SQL databases
  • Existing message queue implementations

Was this page helpful?

Thanks for your feedback!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.

We're sorry this page wasn't helpful. Let us know how we can make it better!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Create an issue

Create a new GitHub issue in this repository - submit technical feedback, draw attention to a potential documentation bug, or share ideas for improvement and general feedback.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.