About Indy Node
This codebase embodies all the functionality to run nodes (validators and/or observers)
that provide a self-sovereign identity ecosystem on top of a
distributed ledger. It is the core project for Indy; over time, all other indy-* projects may
collapse into this one, except for indy-sdk.
Indy has its own distributed ledger based on RBFT.
Relationship with Sovrin
This code is independent from but commonly associated with The Sovrin Foundation. The Sovrin Foundation is a public utility
for identity, built on top of this codebase. People who install sovrin packages (e.g., with
sudo apt install sovrin) get prepackaged genesis transactions that integrate
with an Indy validator pool using Sovrin's governance and trust framework. However, it is possible to use Indy Node
with a different network, using whatever conventions a community chooses.
Getting Started Guide
We recommend that developers should explore
Indy Walk through to learn about Indy basics
or Getting Started Guide with VCX and
Getting Started Notebook.
If you haven't done so already, please visit the main resource for all things "Indy" to get acquainted with the code base, helpful resources, and up-to-date information: Hyperledger Wiki-Indy.
Technical Overview of Indy Blockchain
Indy Node Repository Structure
Indy Node repo consists of the following parts:
- indy-plenum-based implementation of distributed ledger
- Extends plenum's base pool functionality with specific transactions support (CLAIM_DEF, SCHEMA, POOL_UPGRADE, etc.)
- Common code for indy-node
- Some scripts that can be run for installed Node (in particular, scripts to start Nodes, generate keys, prepare test Network, etc.)
- A folder with documentation
- A folder with scripts helping to configure development environment (python, dependencies, projects, virtual environment)
- The heart of the distributed ledger technology inside Hyperledger Indy.
- Most probably you will need to make changes in Plenum if you want to contribute to Indy.
So, if you want to work with Indy Node, you will need to have the Plenum code as well in most of the cases
and work with two projects at the same time
(see How to Start Working with the Code below).
- An official SDK for Indy.
- It contains client and anoncreds implementation
- You don't need it to contribute to Indy-Node. But please use indy-sdk for your own applications dealing with Indy ecosystem.
- A shared crypto library
- It's based on AMCL
- In particular, it contains BLS multi-signature crypto needed for state proofs support in Indy.
How to Contribute
How to Install a Test Network
You can have a look at Start Nodes
to understand what needs to be done to create a Network, initialize and start Nodes, and what scripts are provided for this.
The described process is automated in one of the ways below (it allow to install a test Network):
Docker Start Pool with Docker
Docker-based pool using with new libindy-based CLI:
Also coming soon: Create virtual machines in AWS.
How to Start Working with the Code
Please have a look at Dev Setup
Continuous Integration and Delivery
Please have a look at Continuous integration/delivery
How to send a PR
- Make sure that you followed write code guideline before sending a PR
- Do not create big PRs; send a PR for one feature or bug fix only.
If a feature is too big, consider splitting a big PR to a number of small ones.
- Consider sending a design doc into
design folder (as markdown or PlantUML diagram) for a new feature before implementing it
- Make sure that a new feature or fix is covered by tests (try following TDD)
- Make sure that documentation is updated according to your changes
- Provide a full description of changes in the PR including Jira ticket number if any
- Make sure that all your commits have a DCO sign-off from the author
- Make sure that static code validation passed
(you can run
flake8 . on the project root to check it; you can install flake8 from pypi:
pip install flake8)
- Put the link to the PR into
#indy-pr-review channel in Rocket.Chat
- A reviewer needs to start your tests first (add
test this please comment to the PR)
- You need to make sure that all the tests pass
- A reviewer needs to review the code and approve the PR. If there are review comments, they will be put into the PR itself.
- You must process them (feel free to reply in the PR threads, or have a discussion in Rocket.Chat if needed)
- A reviewer or maintainer will merge the PR (we usually use Squash)
How to send a PR to both plenum and node
If you made changes in both indy-plenum and indy-node, you need to do the following:
- Raise a PR to indy-plenum's master and wait until code is reviewed and merged (see above)
- So, a new build of indy-plenum is created
- Note a just built version
X.Y.Z.devB of indy-plenum (you can check it in pypi or on CI server).
- Change indy-plenum's dependency version to the new one in indy-node's setup.py.
- Raise PR to indy-node's master and wait until code is reviewed and merged (see above)
- So, a new build of indy-node is created
Docs and links