Go Node and SDK for the NEO blockchain
Find a file
Roman Khimov a1c4d7ce26 core: do MPT compaction every once in a while
We need to compact our in-memory MPT from time to time, otherwise it quickly
fills up all available memory. This raises two obvious quesions --- when to do
that and to what level do that.

As for 'when', I think it's quite easy to use our regular persistence interval
as an anchor (and it also frees up some memory), but we can't do that in the
persistence routine itself because of synchronization issues (adding some
synchronization primitives would add some cost that I'd also like to avoid),
so do it indirectly by comparing persisted and current height in `storeBlock`.

Choosing proper level is another problem, but if we're to roughly estimate one
full branch node to use 1K of memory (usually it's way less than that) then we
can easily store 1K of these nodes and that gives us a depth of 10 for our
trie.
2020-06-04 17:25:57 +03:00
.circleci .circleci: add go1.14 tests 2020-03-25 17:56:06 +03:00
.docker Add possibility to import different dump of chains 2020-01-28 13:29:13 +03:00
.github add new neo logo with gopher 2019-10-22 19:48:22 +03:00
cli Merge pull request #990 from nspcc-dev/feature/mpt 2020-06-01 18:58:35 +03:00
config rpc/server: start and shutdown Server in tests 2020-05-12 17:42:34 +03:00
docs docs: update RPC document, add notifications spec 2020-05-19 13:13:15 +03:00
examples examples: Use "or" operator in transfer check of NEP5 token 2020-05-12 16:33:24 +03:00
integration config: move config.go out of config/ 2020-03-31 17:55:59 +03:00
pkg core: do MPT compaction every once in a while 2020-06-04 17:25:57 +03:00
scripts cli: add script for comparing storage dumps 2020-02-12 12:16:31 +03:00
.dockerignore Fix build node and docker-image 2019-08-26 19:32:09 +03:00
.gitignore gitignore: don't ignore blockchain(s) directories 2020-05-19 13:13:15 +03:00
.gitmodules vm: implement json tests from neoVM 2019-11-06 16:22:56 +03:00
.travis.yml update minimum supported version of Go to 1.12 2019-09-10 20:30:54 +03:00
CHANGELOG.md CHANGELOG: release v0.75.0 2020-05-28 18:54:14 +03:00
CONTRIBUTING.md *: move all packages from CityOfZion to nspcc-dev 2020-03-03 17:21:42 +03:00
Dockerfile clean docker build 2020-05-22 13:56:26 +03:00
go.mod Merge pull request #1006 from nspcc-dev/interop/crypto 2020-06-03 14:39:44 +03:00
go.sum Merge pull request #1006 from nspcc-dev/interop/crypto 2020-06-03 14:39:44 +03:00
LICENSE.md LICENSE.md: rename from LICENCE.md 2019-08-20 18:47:08 +03:00
Makefile Makefile: add neox suffix to neox-2.x branch 2020-05-30 16:01:35 +03:00
neo-go.service.template service file templating 2019-11-13 15:05:13 +03:00
README.md docs: update compiler.md, bring it up to date 2020-05-19 13:13:15 +03:00
ROADMAP.md update CHANGELOG and ROADMAP, release 0.72.0 2020-02-06 21:35:43 +03:00

logo

Go Node and SDK for the NEO blockchain.


codecov CircleCI GitHub release (latest SemVer) License

Overview

This project aims to be a full port of the original C# Neo project. A complete toolkit for the NEO blockchain, including:

This branch (master-2.x) is a stable version of the project compatible with Neo 2, it only receives bug fixes and minor updates. For the Neo 3 development version please refer to the master branch and releases after 0.90.0. Releases before 0.80.0 (0.7X.Y track) are made from this branch and only contain Neo 2 code.

Getting started

Installation

Go: 1.12+

Install dependencies.

neo-go uses GoModules as dependency manager:

make deps

How to setup a node

Docker

Each tagged build is built to docker hub and the :latest tag pointing at the latest tagged build.

By default the CMD is set to run a node on testnet, so to do this simply run:

 docker run -d --name neo-go -p 20332:20332 -p 20333:20333 cityofzion/neo-go

Which will start a node on testnet and expose the nodes port 20333 and 20332 for the JSON-RPC server.

Building

Build the neo-go CLI:

make build

Running

Quick start a NEO node on the private network. This requires the neo-privatenet Docker image running on your machine.

make run

To run the binary directly:

./bin/neo-go node

By default the node will run on the private network, to change his:

./bin/neo-go node --mainnet

Available network flags:

  • --mainnet, -m
  • --privnet, -p
  • --testnet, -t

Importing mainnet/testnet dump files

If you want to jump-start your mainnet or testnet node with chain archives provided by NGD follow these instructions:

$ wget .../chain.acc.zip # chain dump file
$ unzip chain.acc.zip
$ ./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.

Smart contract development

Please refer to neo-go smart contract development workshop that shows some simple contracts that can be compiled/deployed/run using neo-go compiler, SDK and private network. For details on how Go code is translated to Neo VM bytecode and what you can and can not do in smart contract please refer to the compiler documentation.

Developer notes

Nodes have such features as Prometheus and Pprof in order to have additional information about them for debugging.

How to configure Prometheus or Pprof: In config/protocol.*.yml there is

  Prometheus:
    Enabled: true
    Port: 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.

Before starting to work on a certain topic, create an new issue first, describing the feature/topic you are going to implement.

Contact

License

  • Open-source MIT