How to contribute to the nano network (without knowing C++)
Nano is a currency that was created in the spirit of fairness and built by collective endeavour. Today, its success and constant improvement is testament to the talent and commitment of people around the world who believe there is a better way of thinking about and using money.
Nano’s amazing community contributors know that a sustainable, instant, no-fee digital currency has the potential to improve the lives of countless people around the world. And they’re willing to devote their time and energy to prove it.
We always need more people to lend a hand.
Below are seven ways to contribute something new and meaningful to Nano node development beyond C++ programming. Although not critical tasks, they are incredibly valuable and are the first step on the pathway that leads to Nano protocol development.
So, if you have the skills and drive to help us realise anything on this list, get in touch via our development Discord!
1. Ledger formatting
Currently, we publish the whole ledger every two days. This is approximately 100GB of data each time, without support for incremental patching.
We need: A format for the import and export of ledgers, with support for incremental deltas that would work in both directions, enabling us to go forwards and backwards in time.
Why we need it: By adopting a system which enables us to publish the whole ledger once a month, followed by a series of patches per day, we could…
- Make the whole process far more efficient
- Generate the ledger from ten days ago more easily
- Enable better solutions for keeping Nano nodes in sync
2. The Wireshark dissector
The current Wireshark dissector is written in C but can also be written in higher level languages. Right now, it only does basic message parsing.
We need: To improve the Wireshark dissector by adding more features to make analysis easier.
Why we need it: Wireshark allows us to monitor messages exchanged between two nodes and understand what they’re doing in a readable way. It’s incredibly helpful during debugging and learning processes.
Adding more features would enable us to:
- Display accounts in hex and account form
- Display node IDs in node and hex form
- Calculate and display the block hash of a block
- Display nano values in easier formats
3. Windows development environment
We’re keen to improve our Windows continuous integration processes and would love some specialist support in making this happen. Most devs do not use Windows as their primary O/S, running it instead inside a virtual machine.
- A way to create a Windows development virtual machine dynamically, at the push of a button, using Infrastructure as code techniques such as Vagrant files.
- Help to improve the design of our Windows build scripts.
- To enhance the way our Qt libraries are installed and used.
Why we need it: Your Windows expertise could help us be more productive when working on the windows domain.
4. UI to manually create and validate raw blocks
There are two websites that allow for inspection and generation of raw nano network material (blocks, signatures, hashes, POW, etc):
These are currently unmaintained and have not been updated recently.
We need: To perform maintenance on these sites and bring them up to date.
Why we need it: With the right improvements in this area, we could…
- Switch between live, beta and test network modes
- Copy a json block and have the tool verify it (in a way that works with live, beta, test)
- Create a tool for manual elections
- Remove dynamic difficulty concepts
If you’re someone with HTML UI skills, who is comfortable working with raw bytes and cryptography, this could be the perfect project.
Rsnano is an alternative Nano node implementation in Rust. At the moment, our Rust developer, Gustav, is converting the Nano node from C++ to Rust single handedly.
This graph shows his progress to date:
We need: Help to convert the Nano node from C++ to Rust.
Why we need it: Your support would…
- Improve security - Two different implementations of the Nano node are unlikely to have the same bugs and will better withstand attacks.
- Improve code quality - Rsnano progressively converts from C++ to Rust, whilst always having a working code. The insights gained from this process help the C++ team.
6. Automatic testing / Continuous integration
Testing and integrating Nano software is a mammoth task!
We need: Help to improve our test scripts and build automation tools, run our GitHub CI test runners and attack scripts.
Why we need it: Your support here would help us…
- Improve existing test projects and integrate them with Nano node CI
- Create swarms of dockers in whatever topology we choose and run tests
If you have experience in Docker, infrastructure as code, Python scripting and Unix scripting, this would be an ideal opportunity to lend a hand!
7. Software for graph visualisation (ledger, node topology)
We are looking for someone with expertise in the above to advise us on the possibilities in this area.
We need: To be able to visualise the block lattice in graph form to see how blocks connect to each other. We’d like to be able to zoom in and out and move around when analysing subsets.
Similarly, with node topology, we want to see how nodes connect to each other.
So there we have it! There are so many ways for committed people to make their mark on the Nano network.
Contributing is a great way to apply your skills, learn new ones, make useful connections and further a good cause. You can do the work in your spare time and we never expect anyone to give more than they feel comfortable with.
If you would like to help in any of the ways outlined here, or if you have a different set of skills you think we can use, join our friendly development Discord!
Nano Foundation does not endorse or approve products and/or services used or developed by third parties. Any links to third party software or sites are for informational purposes only. Nano Foundation bears no responsibility for the operability, accuracy, legality or content of third party products and/or services. Any questions regarding third party material should be directed to that party.