https://github.com/nspcc-dev/neo-go
Go Node and SDK for the Neo blockchain
https://github.com/nspcc-dev/neo-go
blockchain go golang neo smartcontracts
Last synced: 3 months ago
JSON representation
Go Node and SDK for the Neo blockchain
- Host: GitHub
- URL: https://github.com/nspcc-dev/neo-go
- Owner: nspcc-dev
- License: mit
- Created: 2018-01-31T12:02:17.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2025-05-06T10:23:48.000Z (11 months ago)
- Last Synced: 2025-05-06T11:33:23.345Z (11 months ago)
- Topics: blockchain, go, golang, neo, smartcontracts
- Language: Go
- Homepage:
- Size: 29.6 MB
- Stars: 126
- Watchers: 15
- Forks: 85
- Open Issues: 193
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Codeowners: .github/CODEOWNERS
- Roadmap: ROADMAP.md
Awesome Lists containing this project
- awesome-neo - neo-go - Golang Node and SDK for the NEO blockchain. (SDKs / MainNet and TestNet (2.7.6+))
README
Go Node and SDK for the Neo blockchain.
[](https://codecov.io/gh/nspcc-dev/neo-go)
[](https://github.com/nspcc-dev/neo-go/actions/workflows/tests.yml)
[](https://goreportcard.com/report/github.com/nspcc-dev/neo-go)
[](https://godoc.org/github.com/nspcc-dev/neo-go)


# Overview
NeoGo is a complete platform for distributed application development built on
top of and compatible with the [Neo project](https://github.com/neo-project).
This includes, but not limited to (see documentation for more details):
- [Consensus node](docs/consensus.md)
- [RPC node & client](docs/rpc.md)
- [CLI tool](docs/cli.md)
- [Smart contract compiler](docs/compiler.md)
- [Neo virtual machine](docs/vm.md)
- [Smart contract examples](examples/README.md)
- [Oracle service](docs/oracle.md)
- [State validation service](docs/stateroots.md)
The protocol implemented is compatible with the latest C# node releases, but
has some experimental extensions as well.
# Getting started
## Installation
NeoGo is distributed as a single binary that includes all the functionality
provided (but smart contract compiler requires Go compiler to operate). You
can grab it from [releases
page](https://github.com/nspcc-dev/neo-go/releases), use a Docker image (see
[Docker Hub](https://hub.docker.com/r/nspccdev/neo-go) for various releases of
NeoGo, `latest` points to the latest release) or build yourself.
### Building
Building NeoGo requires modern Go (any officially supported version, see
[NeoSPCC Go policy](https://github.com/nspcc-dev/.github/blob/master/go.md)
for how we manage Go updates) and `make`:
```
make
```
The resulting binary is `bin/neo-go`. Notice that using some random revision
from the `master` branch is not recommended (it can have any number of
incompatibilities and bugs depending on the development stage), please use
tagged released versions.
#### Building on Windows
To build NeoGo on Windows platform we recommend you to install `make` from [MinGW
package](https://osdn.net/projects/mingw/). Then, you can build NeoGo with:
```
make
```
The resulting binary is `bin/neo-go.exe`.
## Running a node
A node needs to connect to some network, either local one (usually referred to
as `privnet`) or public (like `mainnet` or `testnet`). Network configuration
is stored in a file and NeoGo allows you to store multiple files in one
directory (`./config` by default) and easily switch between them using network
flags.
To start Neo node on a private network, use:
```
./bin/neo-go node
```
Or specify a different network with an appropriate flag like this:
```
./bin/neo-go node --mainnet
```
Available network flags:
- `--mainnet, -m`
- `--privnet, -p`
- `--testnet, -t`
Or point NeoGo to a specific config with `--config-file` parameter like:
```
./bin/neo-go node --config-file ./config/protocol.mainnet.neofs.yml
```
To run a consensus/committee node, refer to [consensus
documentation](docs/consensus.md).
If you're running a node on Windows, please turn off or configure Windows
Firewall appropriately (allowing inbound connections to the P2P port).
### Docker
By default, the `CMD` is set to run a node on `privnet`. So, to do this, simply run:
```bash
docker run -d --name neo-go -p 20332:20332 -p 20331:20331 nspccdev/neo-go
```
Which will start a node on `privnet` and expose node's ports `20332` (P2P
protocol) and `20331` (JSON-RPC server).
### Importing mainnet/testnet dump files
If you want to jump-start your mainnet or testnet node with NEP-32 chain
archives [provided by NGD](https://sync.ngd.network/)
[or NeoSPCC](https://archive.fs.neo.org/), follow these instructions:
```
$ wget .../chain.acc.zip # chain dump file (not needed for NeoSPCC archives)
$ unzip chain.acc.zip # (not needed for NeoSPCC archives)
$ ./bin/neo-go db restore -m -i chain.acc # for testnet use '-t' flag instead of '-m'
```
The process differs from the C# node in that block importing is a separate
mode. After it ends, the node can be started normally.
## Running a private network
Refer to [consensus node documentation](docs/consensus.md).
## Smart contract development
Please refer to [NeoGo smart contract development
workshop](https://github.com/nspcc-dev/neo-go-sc-wrkshp) that shows some
simple contracts that can be compiled/deployed/run using NeoGo compiler, SDK
and a private network. For details on how Go code is translated to Neo VM
bytecode and what you can and can not do in a smart contract, please refer to the
[compiler documentation](docs/compiler.md).
Refer to [examples](examples/README.md) for more Neo smart contract examples
written in Go.
## Wallets
NeoGo wallet is just a
[NEP-6](https://github.com/neo-project/proposals/blob/68398d28b6932b8dd2b377d5d51bca7b0442f532/nep-6.mediawiki)
file that is used by CLI commands to sign various things. CLI commands are not
a direct part of the node, but rather a part of the NeoGo binary, their
implementations use RPC to query data from the blockchain and perform any
required actions. It's not required to open a wallet on an RPC node (unless
your node provides some service for the network like consensus or oracle nodes
do).
## Monitoring
NeoGo provides [Prometheus](https://prometheus.io/docs/guides/go-application) and
[Pprof](https://golang.org/pkg/net/http/pprof/) services that can be enabled
in the node in order to provide additional monitoring and debugging data.
Configuring any of the two services is easy, add the following section (`Pprof`
instead of `Prometheus` if you need that) to the respective `config/protocol.*.yml`:
```
Prometheus:
Enabled: true
Addresses:
- ":2112"
```
where you can switch on/off and define port. Prometheus is enabled and Pprof is disabled by default.
## Contributing
Feel free to contribute to this project after reading the
[contributing guidelines](CONTRIBUTING.md).
Before starting to work on a certain topic, create a new issue first
describing the feature/topic you are going to implement.
# Contact
- [@AnnaShaleva](https://github.com/AnnaShaleva) on GitHub
- [@roman-khimov](https://github.com/roman-khimov) on GitHub
- Reach out to us on the [Neo Discord](https://discordapp.com/invite/R8v48YA) channel
# License
- Open-source [MIT](LICENSE.md)