An implementation of the Nano protocol written from scratch in Go (golang).
A crypto currency has to be resilient to survive, and the network is only as resilient as the weakest link. With only one implementation of the protocol, any bugs that are found affect the entire network. The aim of this project is to create an alternative implementation that is 100% compatible with the reference implementation to create a more robust network.
Additionally, there is no reference specification for the Nano protocol, only a high level overview. I've had to learn the protocol from reading the source-code. I'm hoping a second implementation will be useful for others to learn the protocol.
Eventually the project will contain the following components:
- GoNano
A support library containing common functions, e.g. block validation, hashing, proof of work, etc
- Nano Vanity
A tool to generate vanity addresses (See https://en.bitcoin.it/wiki/Vanitygen)
- GoNano Node - Coming Soon...
A full node implementation compatible with the official Nano wallet, but with faster initial sync times out of the box.
- GoNano Wallet - Coming Soon...
A GUI Wallet that can either run as a node or as a light wallet.
Vanity Address GeneratorA simple project to get the basic public-key cryptography functions working and tested.
- Done! (Nano Vanity)
- GoNano Node
- A basic node that can validate and store blocks sent to it
Data structuresDatabaseProof of workCryptographic functionsBasic wallet functions- Networking
Receiving keepalives and blockskeepalivespublishconfirm_ack
- Sending keepalives
- Add broadcasting and discovery
- Add RPC interface
- Add voting
- Add compatibility with existing Nano Nodes
- Add spam defence and blacklisting of bad nodes
- Add complete testing harness
- Add fast syncing
- A basic node that can validate and store blocks sent to it
- GoNano Wallet
- Basic UI, creating/sending/receiving transactions
- Add seed restore, account generation, changing representatives
- Add bundled node and light wallet/node selection option
- UI Polish and distributables
Any pull requests would be welcome!
I haven't been using Go for very long so any style/organisation fixes would be greatly appreciated.
Feel free to donate some Nano to xrb_1frankh36p3e4cy4xrtj79d5rmcgce9wh4zke366gik19gifb5kxcnoju3y5 to help keep me motivated 🍻