An implementation of the Nano protocol written from scratch in Go (golang).

Go Nano

An implementation of the Nano protocol written from scratch in Go (golang).

About the Project

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.

Components

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.

Milestones

  • Vanity Address Generator

    A simple project to get the basic public-key cryptography functions working and tested.

  • GoNano Node
    • A basic node that can validate and store blocks sent to it
      • Data structures
      • Database
      • Proof of work
      • Cryptographic functions
      • Basic wallet functions
      • Networking
        • Receiving keepalives and blocks
          • keepalives
          • publish
          • confirm_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
  • 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

Contributing

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 nano_1frankh36p3e4cy4xrtj79d5rmcgce9wh4zke366gik19gifb5kxcnoju3y5 to help keep me motivated 🍻

Similar Resources

A research implementation of team rocket's leaderless consensus protocol

rocket A research implementation of team rocket's leaderless consensus protocol backlog Run consensus tests with agents that have corrupted configurat

Feb 1, 2022

Gmqtt is a flexible, high-performance MQTT broker library that fully implements the MQTT protocol V3.1.1 and V5 in golang

中文文档 Gmqtt News: MQTT V5 is now supported. But due to those new features in v5, there area lots of breaking changes. If you have any migration problem

Jan 5, 2023

Golang binary for data exfiltration with ICMP protocol

Golang binary for data exfiltration with ICMP protocol

QueenSono ICMP Data Exfiltration A Golang Package for Data Exfiltration with ICMP protocol. QueenSono tool only relies on the fact that ICMP protocol

Jan 3, 2023

Powerful golang network framework, supporting FFAX Protocol

X.NET framework Install $ go get github.com/RealFax/XNET This is a high-performance network framework, currently only supports tcp and FFAX protocol U

Nov 19, 2021

Estudos com Golang, GRPC e Protocol Buffers

Golang, GRPC e Protocol Buffers Estudos com Golang, GRPC e Protocol Buffers Projeto feito para fins de estudos. Para rodar basta seguir os passos abai

Feb 10, 2022

A simple FTP protocol with client and server implemented in TypeScript and Golang

websocket-ftp A simple FTP protocol with client and server implemented in TypeScript and Golang. Example (Client) const buffer: Uint8Array = (new Text

Apr 14, 2022

This is a golang C2 + Implant that communicates via Protocol Buffers (aka. protobufs).

Br4vo6ix DISCLAIMER: This tool is for educational, competition, and training purposes only. I am in no way responsible for any abuse of this tool This

Nov 9, 2022

Package arp implements the ARP protocol, as described in RFC 826. MIT Licensed.

arp Package arp implements the ARP protocol, as described in RFC 826. MIT Licensed. Portions of this code are taken from the Go standard library. The

Dec 20, 2022

A TCP Server Framework with graceful shutdown, custom protocol.

xtcp A TCP Server Framework with graceful shutdown,custom protocol. Usage Define your protocol format: Before create server and client, you need defin

Dec 7, 2022
Related tags
wire protocol for multiplexing connections or streams into a single connection, based on a subset of the SSH Connection Protocol

qmux qmux is a wire protocol for multiplexing connections or streams into a single connection. It is based on the SSH Connection Protocol, which is th

Dec 26, 2022
A simple tool to convert socket5 proxy protocol to http proxy protocol

Socket5 to HTTP 这是一个超简单的 Socket5 代理转换成 HTTP 代理的小工具。 如何安装? Golang 用户 # Required Go 1.17+ go install github.com/mritd/s2h@master Docker 用户 docker pull m

Jan 2, 2023
Implementation of the FTPS protocol for Golang.

FTPS Implementation for Go Information This implementation does not implement the full FTP/FTPS specification. Only a small subset. I have not done a

Mar 14, 2022
Official Golang implementation of the PANO protocol

Panoptis Official Golang implementation of the PANO protocol Building the source Building pano requires both a Go (version 1.14 or later) and a C comp

Dec 14, 2021
Official Go implementation of the Fixcoin protocol

XFSGO Official Go implementation of the XFS protocol. Usage To learn more about the available xfsgo commands, use xfsgo help or type a command followe

May 18, 2022
Fast implementation of the collectd network protocol for go.

go-cdclient A fast, dependency free implementation of the collectd binary network protocol. How fast? This package can form an encrypted metric packet

Feb 6, 2022
(Partial) Implementation of the EEBUS protocol in Go

EEBUS This is an open source implementation of parts of the EEBUS protocol Version 1.0.1 specification in Go WARNING The code in this repository is a

Dec 11, 2022
Implementation of Pinocchio Protocol in Go language

pinocchio-protocol-zksnarks Implementation of Pinocchio Protocol in Go language 1 零知识证明和zksnarks 1.1 为什么需要可证明的计算? 随着技术的发展,计算能力表现出不对称的特性,例如云计算等拥有大量的算力,

Nov 3, 2021
Official Go implementation of the Klaytn protocol

Klaytn Official golang implementation of the Klaytn protocol. Please visit KlaytnDocs for more details on Klaytn design, node operation guides and app

Dec 5, 2021
whatsup is the reference server implementation for the fmrl protocol

whatsup whatsup is the reference server implementation for the fmrl protocol. Currently whatsup has no web interface, but may gain one in the future.

Mar 25, 2022