Go Node and SDK for the NEO blockchain
Find a file
Roman Khimov a187336830 rpc/server: fix error reporting in Start
This error message makes no sense when shutting down the server:
2020-06-25T19:29:53.251+0300    ERROR   failed to start RPC server      {"error": "http: Server closed"}

And ListenAndServer is documented to always return non-nil error one of which
is http.ErrServerClosed. This should also fix the following test failure:

==================
WARNING: DATA RACE
Read at 0x00c000254243 by goroutine 49:
  testing.(*common).logDepth()
      /usr/local/go/src/testing/testing.go:665 +0xa1
  testing.(*common).Logf()
      /usr/local/go/src/testing/testing.go:658 +0x8f
  testing.(*T).Logf()
      <autogenerated>:1 +0x75
  go.uber.org/zap/zaptest.testingWriter.Write()
      /go/pkg/mod/go.uber.org/zap@v1.10.0/zaptest/logger.go:130 +0x11f
  go.uber.org/zap/zaptest.(*testingWriter).Write()
      <autogenerated>:1 +0xa9
  go.uber.org/zap/zapcore.(*ioCore).Write()
      /go/pkg/mod/go.uber.org/zap@v1.10.0/zapcore/core.go:90 +0x1c3
  go.uber.org/zap/zapcore.(*CheckedEntry).Write()
      /go/pkg/mod/go.uber.org/zap@v1.10.0/zapcore/entry.go:215 +0x1e7
  go.uber.org/zap.(*Logger).Error()
      /go/pkg/mod/go.uber.org/zap@v1.10.0/logger.go:203 +0x95
  github.com/nspcc-dev/neo-go/pkg/rpc/server.(*Server).Start()
      /go/src/github.com/nspcc-dev/neo-go/pkg/rpc/server/server.go:179 +0x5c5

Previous write at 0x00c000254243 by goroutine 44:
  testing.tRunner.func1()
      /usr/local/go/src/testing/testing.go:900 +0x353
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:913 +0x1bb

Goroutine 49 (running) created at:
  github.com/nspcc-dev/neo-go/pkg/rpc/server.initClearServerWithInMemoryChain()
      /go/src/github.com/nspcc-dev/neo-go/pkg/rpc/server/server_helper_test.go:69 +0x305
  github.com/nspcc-dev/neo-go/pkg/rpc/server.initServerWithInMemoryChain()
      /go/src/github.com/nspcc-dev/neo-go/pkg/rpc/server/server_helper_test.go:78 +0x3c
  github.com/nspcc-dev/neo-go/pkg/rpc/server.testRPCProtocol()
      /go/src/github.com/nspcc-dev/neo-go/pkg/rpc/server/server_test.go:805 +0x53
  github.com/nspcc-dev/neo-go/pkg/rpc/server.TestRPC.func1()
      /go/src/github.com/nspcc-dev/neo-go/pkg/rpc/server/server_test.go:793 +0x44
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:909 +0x199

Goroutine 44 (finished) created at:
  testing.(*T).Run()
      /usr/local/go/src/testing/testing.go:960 +0x651
  github.com/nspcc-dev/neo-go/pkg/rpc/server.TestRPC()
      /go/src/github.com/nspcc-dev/neo-go/pkg/rpc/server/server_test.go:792 +0x5d
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:909 +0x199
==================
2020-06-25 19:35:27 +03:00
.circleci .circleci: count coverage only for cli/ and pkg/ 2020-04-14 16:10:24 +03:00
.docker *: change address to the new format 2020-06-17 15:58:21 +03:00
.github add new neo logo with gopher 2019-10-22 19:48:22 +03:00
cli cli/server: dump genesis block state when restoring 2020-06-24 16:09:54 +03:00
config *: use MaxTransactionsPerBlock from Policy native contract 2020-06-24 07:58:05 +03:00
docs core: fix Storage.Get to return Null when there is no value 2020-06-24 10:43:58 +03:00
examples core: fix Storage.Get to return Null when there is no value 2020-06-24 10:43:58 +03:00
integration block/transaction: add network magic into the hash 2020-06-18 12:39:50 +03:00
pkg rpc/server: fix error reporting in Start 2020-06-25 19:35:27 +03:00
scripts scripts: replace compare-dumps with go version 2020-06-24 16:11:34 +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-26 19:55:35 +03:00
.gitmodules vm: update json tests to neo3 branch 2020-04-17 11:46:31 +03:00
.travis.yml .circleci: count coverage only for cli/ and pkg/ 2020-04-14 16:10:24 +03:00
CHANGELOG.md CHANGELOG: release 0.74.0 2020-03-17 16:40:28 +03:00
CONTRIBUTING.md *: move all packages from CityOfZion to nspcc-dev 2020-03-03 17:21:42 +03:00
Dockerfile docker: drop default privnet-blocks bootstraps 2020-06-05 19:21:40 +03:00
go.mod *: use MaxTransactionsPerBlock from Policy native contract 2020-06-24 07:58:05 +03:00
go.sum *: use MaxTransactionsPerBlock from Policy native contract 2020-06-24 07:58:05 +03:00
LICENSE.md LICENSE.md: rename from LICENCE.md 2019-08-20 18:47:08 +03:00
Makefile .circleci: count coverage only for cli/ and pkg/ 2020-04-14 16:10:24 +03:00
neo-go.service.template service file templating 2019-11-13 15:05:13 +03:00
README.md README: update with block import examples 2020-05-27 12:01:50 +03:00
ROADMAP.md ROADMAP: update for Neo 3 development 2020-04-20 11:09:36 +03:00

logo

Go Node and SDK for the NEO blockchain.


codecov CircleCI Report GoDoc 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) is under active development now (read: won't work out of the box) and aims to be compatible with Neo 3. For the current stable version compatible with Neo 2 please refer to the master-2.x branch and releases before 0.80.0 (0.7X.Y track). Releases starting from 0.90.0 will contain Neo 3 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 (when they'd be available for 3.0 networks):

$ 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