Go Node and SDK for the NEO blockchain
Find a file
Evgeniy Kulikov 96169ef266
Merge pull request #317 from nspcc-dev/fix/data-race-in-memeory-store
Fix DataRace in MemoryStore
- Add RWMutex to MemoryStore struct
- Use Lock/Unlock for writing
- Use RLock/RUnlock for reading
- Fix #313 issue
2019-08-27 16:51:54 +03:00
.circleci circleci: update tag specs in workflows 2019-08-21 20:02:43 +03:00
.github Remove mention of the bump version (#112) 2018-12-06 11:31:41 +01:00
_pkg.dev Use our RFC6979 fork 2019-08-27 13:07:02 +03:00
cli Change the way to receive version 2019-08-26 19:32:09 +03:00
config fixed8: switch to more uniform function naming 2019-08-26 13:32:19 +03:00
docs docs: drop contribution.md from dev 2019-08-20 19:09:17 +03:00
examples interop: move into pkg/interop, replace pkg/vm/api 2019-08-15 19:41:51 +03:00
pkg Merge pull request #317 from nspcc-dev/fix/data-race-in-memeory-store 2019-08-27 16:51:54 +03:00
.dockerignore Fix build node and docker-image 2019-08-26 19:32:09 +03:00
.gitignore Merge branch 'dev-prepared-for-master' into mastev 2019-08-20 18:44:09 +03:00
.travis.yml [travis] add verbose flag to test 2019-03-30 23:52:28 +00:00
CONTRIBUTING.md CONTRIBUTING: adapt to new reality a bit 2019-08-20 19:07:58 +03:00
docker-compose.yml Adds basic docker-compose support for standing up a cluster (#74) 2018-04-28 20:20:27 +02:00
Dockerfile Fix build node and docker-image 2019-08-26 19:32:09 +03:00
go.mod Use our RFC6979 fork 2019-08-27 13:07:02 +03:00
go.sum Use our RFC6979 fork 2019-08-27 13:07:02 +03:00
LICENSE.md LICENSE.md: rename from LICENCE.md 2019-08-20 18:47:08 +03:00
Makefile Fix build node and docker-image 2019-08-26 19:32:09 +03:00
README.md Update Readme 2019-08-26 19:32:09 +03:00
ROADMAP.md Create ROADMAP.md 2019-01-25 12:41:43 -05:00

Go Node and SDK for the NEO blockchain.


codecov CircleCI Report 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:

Getting started

Installation

Go: 1.11+

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

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 -seed 127.0.0.1:20333,127.0.0.1:20334

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

If you want in-depth customization for your node, there are yaml config files for each network available in the config directory. Those files are automatically loaded, corresponding the provided netmode flag.

ProtocolConfiguration:
  Magic: 56753
  AddressVersion: 23
  StandbyValidators:
  - 02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2
  - 02103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e
  - 03d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699
  - 02a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd62
  SeedList:
  - 127.0.0.1:20333
  - 127.0.0.1:20334
  - 127.0.0.1:20335
  - 127.0.0.1:20336
  SystemFee:
    EnrollmentTransaction: 1000
    IssueTransaction: 500
    PublishTransaction: 500
    RegisterTransaction: 10000

ApplicationConfiguration:
  DataDirectoryPath: "./chains/privnet"
  RPCPort: 20332
  NodePort: 20333
  Relay: true
  DialTimeout: 3
  ProtoTickInterval: 2
  MaxPeers: 50

Writing smart contracts in Go

In depth documentation about the neo-go compiler and smart contract examples can be found inside the compiler package.

Compile a smart contract

./bin/neo-go contract compile -i mycontract.go

By default the filename will be the name of your .go file with the .avm extension, the file will be located in the same directory where you called the command from. If you want another location for your compiled contract:

./bin/neo-go contract compile -i mycontract.go --out /Users/foo/bar/contract.avm

Debugging your smart contract

You can dump the opcodes generated by the compiler with the following command:

./bin/neo-go contract inspect -i mycontract.go

This will result in something like this:

INDEX    OPCODE    DESC
0        0x54      PUSH4
1        0xc5      NEWARRAY
2        0x6b      TOALTSTACK
3        0x5a      PUSH10
4        0x6a      DUPFROMALTSTACK
5        0x0       PUSH0
6        0x52      PUSH2
7        0x7a      ROLL
8        0xc4      SETITEM
9        0x6a      DUPFROMALTSTACK
10       0x0       PUSH0
11       0xc3      PICKITEM
12       0x5a      PUSH10
13       0xa2      GTE
14       0x64      JMPIFNOT
15       0x7       7
15       0x0       0
17       0x51      PUSH1
18       0x6c      FROMALTSTACK
19       0x75      DROP
20       0x66      RET
21       0x0       PUSH0
22       0x6c      FROMALTSTACK
23       0x75      DROP
24       0x66      RET

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