* Fix setup wiki article link in readme (#594) * add snapshot file to releaser archives (#592) * Double spend check (#606) * Fix: added a check for doublespends * Fix: added a check for double spends * Fix: fixed iport cycle * Feat: replaced error with error variable * Feat: store tangle in factory * Update dapps/faucet/packages/faucet.go Co-authored-by:Wolfgang Welz <welzwo@gmail.com> * makes send tx web API handler synced Co-authored-by:
Hans Moog <hm@mkjc.net> Co-authored-by:
Wolfgang Welz <welzwo@gmail.com> Co-authored-by:
Luca Moser <moser.luca@gmail.com> * Adds tips broadcaster to gossip plugin (#608) * adds tips broadcaster to gossip plugin * adds missing for loop * addresses review comments * bumps network and database versions (#610) * Revert "bumps network and database versions (#610)" This reverts commit 3e626eac. * Revert "Revert "bumps network and database versions (#610)"" This reverts commit 9aa3d1bb. * Adds blacklist and PoW requirement to the faucet (#609) * adds blacklist and PoW requirement to the faucet * fixes wrong condition to check pow * fix faucet payload marhsaling * don't test payload data if not payload data set * updates changelog for v0.2.1 (#611) Co-authored-by:
Rajiv Shah <rajivshah1@icloud.com> Co-authored-by:
Wolfgang Welz <welzwo@gmail.com> Co-authored-by:
Hans Moog <3293976+hmoog@users.noreply.github.com> Co-authored-by:
Hans Moog <hm@mkjc.net>
Prototype node software for an IOTA network without the Coordinator
About ◈ Design ◈ Implemented Coordicide modules ◈ Work-in-progress modules ◈ Getting started ◈ Client-Library and HTTP API reference ◈ Supporting the project ◈ Joining the discussion
About
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.
Design
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 packages
directory, with the exceptions for the dApps (e.g., value transfer, network delay and the faucet) that are under the dapps
folder. Each module can be enabled using the plugins
directory.
Note: See the main.go
file to see which plugins are currently supported.
Implemented Coordicide modules
The master
branch 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:
- Generic data object, and more in general, any non-value transfer can be supported with its own dApp/App.
- Value objects to issue transactions.
- Faucet funding request objects.
The master
branch includes the following Coordicide modules:
-
Autopeering. We also have a standalone autopeering simulator in this repository.
-
Fast Probabilistic Consensus. We also have a standalone FPC simulator in this repository.
-
Parallel-reality-based Ledger State (using the UTXO model).
Work-in-progress modules
Work-in-progress modules are typically kept on a different branch such as mana
, and are not compatible with the master
branch. 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 develop
branch.
The following Coordicide modules are a work in progress:
-
Mana: The
mana
branch contains a first implementation of the mana module in thepackages
directory. -
Cellular Consensus: The
ca
branch contains a first implementation of the Cellular Consensus module in thepackages
directory. -
Spam Protection: You can find the initial simulation source code of the rate control in this repository and the source code of the Adaptive Proof of Work simulator here.
Client-Library and HTTP API reference
You can use the Go client-library to interact with GoShimmer (located under github.com/iotaledger/goshimmer/client
).
You can find more info about this on our client-lib wiki page.
Getting started
You can find tutorials on how to setup a GoShimmer node, writing a dApp, obtaining tokens from the faucet and more on our wiki.
Supporting the project
If you want to contribute to the code, consider posting a bug report, feature request or a pull request.
When creating a pull request, we recommend that you do the following:
- Clone the repository
- Create a new branch for your fix or feature. For example,
git checkout -b fix/my-fix
orgit checkout -b feat/my-feature
. - Run the
go fmt
command to make sure your code is well formatted - Document any exported packages
- Target your pull request to be merged with
dev
Joining the discussion
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.