All Projects → input-output-hk → Ouroboros Network

input-output-hk / Ouroboros Network

Licence: apache-2.0
An implementation of the Ouroboros family of consensus algorithms, with its networking support

Programming Languages

haskell
3896 projects

Projects that are alternatives of or similar to Ouroboros Network

Harmony
The core protocol of harmony
Stars: ✭ 351 (+225%)
Mutual labels:  blockchain, consensus
Ethermint Archive
Ethereum on Tendermint using Cosmos-SDK!
Stars: ✭ 667 (+517.59%)
Mutual labels:  blockchain, consensus
Go Spacemesh
Go Implementation of the Spacemesh protocol full node. 💾⏰💪
Stars: ✭ 389 (+260.19%)
Mutual labels:  blockchain, consensus
Iroha
Iroha - A simple, enterprise-grade decentralized ledger
Stars: ✭ 210 (+94.44%)
Mutual labels:  blockchain, consensus
Chainspace Prototype
Chainspace is a distributed ledger platform for high-integrity and transparent processing of transactions within a decentralized system.
Stars: ✭ 41 (-62.04%)
Mutual labels:  blockchain, consensus
Awesome Substrate
A curated list of awesome projects and resources related to the Substrate blockchain development framework.
Stars: ✭ 228 (+111.11%)
Mutual labels:  blockchain, consensus
Tendermint
⟁ Tendermint Core (BFT Consensus) in Go
Stars: ✭ 4,491 (+4058.33%)
Mutual labels:  blockchain, consensus
Quorum
A permissioned implementation of Ethereum supporting data privacy
Stars: ✭ 4,054 (+3653.7%)
Mutual labels:  blockchain, consensus
Burrow
https://wiki.hyperledger.org/display/burrow
Stars: ✭ 851 (+687.96%)
Mutual labels:  blockchain, consensus
Abci Host
Clojure host/server for Tendermint's ABCI protocol.
Stars: ✭ 18 (-83.33%)
Mutual labels:  blockchain, consensus
Truechain Consensus Core
TrueChain Consensus Protocol: Minerva
Stars: ✭ 160 (+48.15%)
Mutual labels:  blockchain, consensus
Cita
A high performance blockchain kernel for enterprise users.
Stars: ✭ 1,155 (+969.44%)
Mutual labels:  blockchain, consensus
Fabric
Hyperledger Fabric is an enterprise-grade permissioned distributed ledger framework for developing solutions and applications. Its modular and versatile design satisfies a broad range of industry use cases. It offers a unique approach to consensus that enables performance at scale while preserving privacy.
Stars: ✭ 12,911 (+11854.63%)
Mutual labels:  blockchain, consensus
Awesome Blockchain Rust
Collect libraries and packages about blockchain/cryptography in Rust
Stars: ✭ 251 (+132.41%)
Mutual labels:  blockchain, consensus
Awesome Cryptoeconomics
An awesome curated list of Cryptoeconomic research and learning materials
Stars: ✭ 763 (+606.48%)
Mutual labels:  blockchain, consensus
Scp zh
恒星共识协议中文翻译
Stars: ✭ 59 (-45.37%)
Mutual labels:  blockchain, consensus
Library
Collection of papers in the field of distributed systems, game theory, cryptography, cryptoeconomics, zero knowledge
Stars: ✭ 100 (-7.41%)
Mutual labels:  blockchain, consensus
Smart Contract Sanctuary
🐦🌴🌴🌴🦕 A home for ethereum smart contracts. 🏠
Stars: ✭ 99 (-8.33%)
Mutual labels:  blockchain
Dai Universe
Money legos all the way down
Stars: ✭ 106 (-1.85%)
Mutual labels:  blockchain
Coco
The fastest crypto online
Stars: ✭ 103 (-4.63%)
Mutual labels:  blockchain

Build Status

Ouroboros-Network

  • io-sim - IOSim simulator monad which supports asynchronous exceptions, STM transactions and async interface, timers.
  • io-sim-classes - type classes, all of them have instance for both IOSim and IO.
  • typed-protocols - session type framework with support of protocol pipelining
  • ouroboros-network- ouroboros network package which implements protocols which to run ouroboros family of protocols, multiplexing layer.
  • The byron-proxy is a network protocol proxy between Byron and Shelley. It now lives in a separate repository.

Ouroboros-Network Documentation

We have two documents which describe various levels of the networking layer of the Cardano Shelley implementation:

Ouroboros-Network API

The API consists of three layers:

• mini-protocol api's, which are GADTs for each mini-protocol under Ouroboros.Network.Protocol; this hides heavy type machinery of session types. One only needs the typed Peer type when one is using runPeer or runPeerPipelined function and each protocol exposes a function to create it (e.g. Ouroboros.Network.Protocol.ChainSync.Client.chainSyncClientPeer)

• callback ptcl -> channel -> m () where ptcl is enumeration for each mini-protocol, this is either NodeToNodeProtocols or NodeToClientProtocols. The callback is wrapped in OuroborosApplication GADT which allows to differentiate the initiator / responder (or client / server) callbacks.

• versioning which is a map from version numbers to the above callbacks and version data (the tricky part here is that version data type can be different between different versions; there is a simple way of building this map using a semigroup). You can use simpleSingletonVersion if your application does not depend on negotiated version data. However, Ouroboros.Network.NodeToNode and Ouroboros.Network.NodeToClient expose V1 api which hides versioning from the caller.

Demo applications

Instructions To run a demo type:
cabal run <DEMO_NAME> --

After -- you will need to pass arguments, when a demo is run without arguments it will specify what arguments it needs.

Ouroboros-Consensus

Consensus layer of the family Ouroboros blockchain protocols.

Ouroboros-Consensus Documentation

The ouroboros-consensus/docs folder contains documentation about the consensus layer. Start with the README.md.

Formatting

The consensus team uses stylish-haskell >= 0.11.0.0 to format its code. This is enforced by CI.

Either enable editor integration or run the following command to manually format all of the consensus code (but not the network code):

stylish-haskell -i `git ls-files -- 'ouroboros-consensus*/*.hs' | grep -v Setup.hs`

Alternatively, call the script used by CI itself: https://github.com/input-output-hk/ouroboros-network/blob/master/scripts/buildkite/check-stylish.sh

./scripts/buildkite/check-stylish.sh

When using Nix, you can use the following command, which will build and use the right version of stylish-haskell.

nix-shell --run ./scripts/buildkite/check-stylish.sh
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].