Go Node and SDK for the NEO blockchain
Find a file
Anthony De Meulemeester 4bd5b2812e
Optimisations and API changes for smart contracts (#67)
* support VM to pass method and arguments to a script.

* added support for type assertions in smartcontracts.

* added native vm support for print.

* moved VM API packages to vm -> API

* reverted the native Print opcode in favor of runtime.Log

* added support for registering custom interop hooks in the VM.

* Updated README

* Updated compiler with @OPTIMIZE tags

* Moved more tests to VM package.

* optimized and refactored compiler and vm API

* updated README with new smartcontract apis

* bumped version
2018-04-10 11:45:31 +02:00
.github Release documentation (#13) 2018-02-02 19:04:56 +00:00
cli Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
config Persistance (#53) 2018-03-25 12:45:54 +02:00
pkg Optimisations and API changes for smart contracts (#67) 2018-04-10 11:45:31 +02:00
.gitignore ignore Goland and bump version (#59) 2018-04-02 18:49:14 +02:00
circle.yml Server configuration (#43) 2018-03-15 21:45:37 +01:00
CONTRIBUTING.md Release documentation (#13) 2018-02-02 19:04:56 +00:00
Gopkg.lock Tweaks for network and storage (#66) 2018-04-09 18:58:09 +02:00
Gopkg.toml Tweaks for network and storage (#66) 2018-04-09 18:58:09 +02:00
LICENCE.md Updated README and LICENSE according to other COZ repo’s. 2018-01-31 13:50:11 +01:00
Makefile Small RPC improvements (#57) 2018-03-30 08:15:03 +02:00
README.md Small RPC improvements (#57) 2018-03-30 08:15:03 +02:00
VERSION Optimisations and API changes for smart contracts (#67) 2018-04-10 11:45:31 +02:00

neo-go

Go Node and SDK for the NEO blockchain.

Overview

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

  • consensus node
  • RPC node & client
  • RPC client
  • CLI tool
  • Smart contract compiler
  • NEO virtual machine

Getting started

Installation

Install dependencies.

neo-go uses dep as its dependency manager. After installing deps you can run:

make deps

How to setup a node

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 automaticly 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 opdump -i mycontract.go

This will result in something like this:

INDEX    OPCODE    DESC
0        0x52      OpPush2
1        0xc5      OpNewArray
2        0x6b      OpToAltStack
3        0x 0      OpPush0
4        0x6c      OpFromAltStack
5        0x76      OpDup
6        0x6b      OpToAltStack
7        0x 0      OpPush0
8        0x52      OpPush2
9        0x7a      OpRoll
10       0xc4      OpSetItem

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 feauture/topic you are going to implement.

Contact

License

  • Open-source MIT