2018-01-28 18:05:06 +00:00
< p align = "center" >
2018-02-24 07:23:02 +00:00
< img
src="http://res.cloudinary.com/vidsy/image/upload/v1503160820/CoZ_Icon_DARKBLUE_200x178px_oq0gxm.png"
2018-01-31 12:50:11 +00:00
width="125px"
>
2018-01-28 18:05:06 +00:00
< / p >
2018-02-01 17:40:04 +00:00
< h1 align = "center" > neo-go< / h1 >
2018-01-28 18:05:06 +00:00
< p align = "center" >
2018-02-01 17:40:04 +00:00
< b > Go< / b > Node and SDK for the < a href = "https://neo.org" > NEO< / a > blockchain.
2018-01-28 18:05:06 +00:00
< / p >
2018-01-29 07:42:49 +00:00
< p align = "center" >
2018-02-02 19:04:56 +00:00
< a href = "https://github.com/CityOfZion/neo-go/releases" >
< img src = "https://img.shields.io/github/tag/CityOfZion/neo-go.svg?style=flat" >
< / a >
< a href = "https://circleci.com/gh/CityOfZion/neo-go/tree/master" >
< img src = "https://circleci.com/gh/CityOfZion/neo-go/tree/master.svg?style=shield" >
< / a >
< a href = "https://goreportcard.com/report/github.com/CityOfZion/neo-go" >
< img src = "https://goreportcard.com/badge/github.com/CityOfZion/neo-go" >
2018-01-29 07:42:49 +00:00
< / a >
< / p >
2018-01-28 18:05:06 +00:00
# Overview
2018-01-31 12:50:11 +00:00
2018-03-25 14:03:38 +00:00
This project aims to be a full port of the original C# [NEO project ](https://github.com/neo-project ).
2018-02-01 17:40:04 +00:00
A complete toolkit for the NEO blockchain, including:
2018-03-25 14:03:38 +00:00
- consensus node
2018-03-30 06:15:03 +00:00
- [RPC node & client ](https://github.com/CityOfZion/neo-go/tree/master/pkg/rpc/README.md )
2018-01-28 18:05:06 +00:00
- RPC client
2018-02-01 18:08:54 +00:00
- CLI tool
2018-02-01 17:40:04 +00:00
- Smart contract compiler
2018-03-25 14:03:38 +00:00
- NEO virtual machine
2018-02-01 17:40:04 +00:00
2018-03-25 14:03:38 +00:00
# Getting started
2018-01-31 11:51:02 +00:00
2018-03-25 14:03:38 +00:00
## Installation
2018-01-31 11:51:02 +00:00
2018-03-25 14:03:38 +00:00
Install dependencies.
2018-01-28 18:37:03 +00:00
2018-03-25 14:03:38 +00:00
`neo-go` uses [dep ](https://github.com/golang/dep ) as its dependency manager. After installing `deps` you can run:
2018-02-01 17:40:04 +00:00
2018-02-01 18:06:17 +00:00
```
make deps
```
2018-03-25 14:03:38 +00:00
## How to setup a node
2018-02-01 18:06:17 +00:00
Build the **neo-go** CLI:
```
make build
```
2018-02-01 17:40:04 +00:00
2018-03-25 14:03:38 +00:00
Quick start a NEO node on the private network. This requires the [neo-privatenet ](https://hub.docker.com/r/cityofzion/neo-privatenet/ ) Docker image running on your machine.
2018-01-28 18:37:03 +00:00
2018-02-01 17:40:04 +00:00
```
2018-03-03 07:16:05 +00:00
make run
2018-02-01 17:40:04 +00:00
```
2018-01-28 18:37:03 +00:00
2018-03-03 07:16:05 +00:00
To run the binary directly:
2018-02-01 17:40:04 +00:00
```
2018-03-25 14:03:38 +00:00
./bin/neo-go node -seed 127.0.0.1:20333,127.0.0.1:20334
2018-02-01 17:40:04 +00:00
```
2018-02-01 08:00:42 +00:00
2018-03-25 14:03:38 +00:00
By default the node will run on the `private network` , to change his:
2018-02-01 08:00:42 +00:00
2018-02-01 17:40:04 +00:00
```
2018-03-25 14:03:38 +00:00
./bin/neo-go node --mainnet
2018-02-01 17:40:04 +00:00
```
2018-02-01 08:00:42 +00:00
2018-03-25 14:03:38 +00:00
Available network flags:
- `--mainnet, -m`
- `--privnet, -p`
- `--testnet, -t`
2018-01-31 11:51:02 +00:00
2018-03-25 14:03:38 +00:00
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.
2018-01-31 11:51:02 +00:00
2018-03-25 14:03:38 +00:00
```yaml
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
2018-02-01 17:40:04 +00:00
```
2018-03-25 14:03:38 +00:00
## Writing smart contracts in Go
In depth documentation about the **neo-go** compiler and smart contract examples can be found inside the [compiler package ](https://github.com/CityOfZion/neo-go/tree/master/pkg/vm/compiler ).
2018-02-15 15:35:49 +00:00
### Compile a smart contract
2018-02-01 17:40:04 +00:00
```
2018-02-24 09:10:45 +00:00
./bin/neo-go contract compile -i mycontract.go
2018-02-15 15:35:49 +00:00
```
2018-03-25 14:03:38 +00:00
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:
2018-02-15 15:35:49 +00:00
```
2018-02-24 09:10:45 +00:00
./bin/neo-go contract compile -i mycontract.go --out /Users/foo/bar/contract.avm
2018-02-15 15:35:49 +00:00
```
### Debugging your smart contract
You can dump the opcodes generated by the compiler with the following command:
```
2018-02-24 09:10:45 +00:00
./bin/neo-go contract opdump -i mycontract.go
2018-02-15 15:35:49 +00:00
```
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
2018-02-01 17:40:04 +00:00
```
2018-01-28 18:37:03 +00:00
2018-01-29 07:11:08 +00:00
# Contributing
2018-01-31 11:51:02 +00:00
2018-02-24 07:23:02 +00:00
Feel free to contribute to this project after reading the
[contributing guidelines ](https://github.com/CityOfZion/neo-go/blob/master/CONTRIBUTING.md ).
2018-02-01 17:40:04 +00:00
2018-02-24 07:23:02 +00:00
Before starting to work on a certain topic, create an new issue first,
2018-02-01 17:40:04 +00:00
describing the feauture/topic you are going to implement.
2018-01-29 07:11:08 +00:00
2018-01-31 10:58:19 +00:00
# Contact
2018-02-01 17:40:04 +00:00
2018-01-31 10:58:19 +00:00
- [@anthdm ](https://github.com/anthdm ) on Github
- [@anthdm ](https://twitter.com/anthdm ) on Twitter
2018-03-25 14:03:38 +00:00
- Reach out to me on the [NEO Discord ](https://discordapp.com/invite/R8v48YA ) channel
2018-01-31 12:50:11 +00:00
- Send me an email anthony@cityofzion.io
# License
2018-02-01 17:40:04 +00:00
2018-03-25 14:03:38 +00:00
- Open-source [MIT ](https://github.com/CityOfZion/neo-go/blob/master/LICENCE.md )