Skip to content
Linus Gasser edited this page Feb 7, 2018 · 45 revisions

Cothority

A collective authority (cothority) is a set of servers, called conodes, that collectively execute decentralized protocols, e.g., for collective signing, threshold signing, Byzantine agreement, or generation of public-randomness. The software in this repository allows you to access the services of a cothority through different client applications and/or run your own cothority server.

If you have questions or remarks on the cothority project, feel free to reach out to us through our mailing list or by email.

Conode

The conode is a server application from which collective authorities are built that in turn run decentralized protocols and provide services to clients.

For notes on operating a production-quality conode: Operating a Conode

Webpages

We do have two webpages showing off part of our cothority network:

Applications

The following client applications are available:

  • CoSi - Request and verify collective signatures created by any subset of conodes
  • Cisc - Manage Cisc identity skipchains, permissioned blockchain-based key/value storages for organizing idenities (e.g., SSH-keys)
  • PoP - Create proof-of-personhood tokens by starting a pop-party, registering attendees and creating a final token. All attendees will be able to authenticate as an anonymous member of the group
  • Scmgr - Skipchain Manager to set up and configure skipchains
  • Status - Query conode status and find up what services a conode is running

Services

Most of the apps rely on a service. If you want to directly interact with one of our services over the websockets port, you can find more information for every service here:

  • Service_CoSi - Collective Signing, where you can submit a hash of a document and get a collective signature on it
  • Service_Identity - Cisc Identity Skipchain, a distributed key/value storage handled by a permissioned, personal blockchain with an SSH-plugin
  • Service_PoP - Proof of personhood
  • Service_SkipChain - a permissioned blockchain for storing arbitrary data if a consensus of a group of nodes is found
  • Service_Status - returns the status of a conode

Protocols

Services use protocols to communicate and to get things done. A protocol involves one or more conodes and has a limited lifespan. Most of the protocols are backed up by a research paper.

  • Protocol_CoSi - Collective Signing. Creates an aggregated Schnorr signature in a tree over 1'000s of nodes
  • Protocol_RandHound - generate verifiable random numbers
  • Protocol_BFTCoSi - Byzantine Fault Tolerant Collective Signing - implements PBFT by having first a prepare-round, followed by a commit-round
  • Messaging - used by other services or protocols when messages need to be sent to other nodes

Simulations

In some of the directories you can find simulations that are used to verify the correctness of the protocols when run across 100s or 1000s of nodes. To run the simulations, see Simulation.

Documentation

Be sure also to check out the following documentation of the other parts of the project:

Versioning

We started to work on a 6-monthly cycle, synched up with the semesters at EPFL. From March to August we keep changes on the master-branch non-API breaking. Master and the current version (gopkg.in/dedis/cothority.v1) are kept in sync. In September, we allow API-breaking changes in master and only selectively update the stable branch. End of February we freeze the current development in a stable branch and start again a non-breaking period of 6 months.

The actual version of the Cothority and the ONet are V1.2. The master-branches of both repositories should be regarded as unstable and in flux. If you have an old project from pre-V1.0, you can find information about Migration to V1.

Roadmap

A short overview of the next big steps we're preparing:

  • Very soon - kyber 1.0!
  • End of February '18 - Start of v2 for cothority and onet
  • March/April '18 - updated blockchain framework
  • May '18 - evoting at EPFL

License

All repositories in https://github.com/cothority are double-licensed under a GNU/AGPL 3.0 and a commercial license. If you want to have more information, contact us at bryan.ford@epfl.ch or linus.gassser@epfl.ch.

Contributing

If you want to contribute to Cothority-ONet, please have a look at CONTRIBUTION for licensing details. Once you are OK with those, you can have a look at our coding-guidelines in Coding. In short, we use the github-issues to communicate and pull-requests to do code-review. Travis makes sure that everything goes smoothly. And we'd like to have good code-coverage.

Contact

You can contact us at https://groups.google.com/forum/#!forum/cothority

Clone this wiki locally