GoShimmer implementation of Coordicide
This repository is where the IOTA Foundation's Research Department tests the Coordicide modules to study and evaluate their performance.
The aim of this open repository is to give the community the opportunity to follow developments, take part in testing, and learn more about Coordicide.
Note: You can find details about future development plans on our roadmap.
The code in GoShimmer is modular, where each module represents either one of the Coordicide components or a basic node function such as the gossip, ledger state, API just to mention a few.
GoShimmer modularity is based on a combination of event-driven and layer-based approaches.
Each module is defined in the
packagesdirectory, with the exceptions for the dApps (e.g., value transfer, network delay and the faucet) that are under the
dappsfolder. Each module can be enabled using the
Note: See the
main.gofile to see which plugins are currently supported.
masterbranch is the stable version of the GoShimmer software, which includes a minimal set of modules to allow you to send and gossip the following types of object:
masterbranch includes the following Coordicide modules:
Parallel-reality-based Ledger State (using the UTXO model).
Work-in-progress modules are typically kept on a different branch such as
mana, and are not compatible with the
masterbranch. Therefore, nodes that run these branches cannot join the current network because the code either is still too experimental or it includes breaking changes. The same goes for the
The following Coordicide modules are a work in progress:
manabranch contains a first implementation of the mana module in the
Cellular Consensus: The
cabranch contains a first implementation of the Cellular Consensus module in the
You can use the Go client-library to interact with GoShimmer (located under
You can find more info about this on our client-lib wiki page.
When creating a pull request, we recommend that you do the following:
git checkout -b fix/my-fixor
git checkout -b feat/my-feature.
go fmtcommand to make sure your code is well formatted
If you want to get involved in the community, need help getting started, have any issues related to the repository or just want to discuss blockchain, distributed ledgers, and IoT with other people, feel free to join our Discord.