mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-23 23:25:22 +00:00
57c7df4dff
README update partially reverts c8d7671d26
and
updates it with current commands and sample output.
198 lines
5.3 KiB
Markdown
198 lines
5.3 KiB
Markdown
<p align="center">
|
|
<img
|
|
src="http://res.cloudinary.com/vidsy/image/upload/v1503160820/CoZ_Icon_DARKBLUE_200x178px_oq0gxm.png"
|
|
width="125px"
|
|
>
|
|
</p>
|
|
|
|
<h1 align="center">neo-go</h1>
|
|
|
|
<p align="center">
|
|
<b>Go</b> Node and SDK for the <a href="https://neo.org">NEO</a> blockchain.
|
|
</p>
|
|
|
|
<p align="center">
|
|
<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">
|
|
</a>
|
|
</p>
|
|
|
|
# Overview
|
|
|
|
This project aims to be a full port of the original C# [NEO project](https://github.com/neo-project).
|
|
A complete toolkit for the NEO blockchain, including:
|
|
|
|
- consensus node
|
|
- [RPC node & client](https://github.com/CityOfZion/neo-go/tree/master/pkg/rpc/README.md)
|
|
- RPC client
|
|
- CLI tool
|
|
- Smart contract compiler
|
|
- NEO virtual machine
|
|
|
|
# Getting started
|
|
|
|
## Installation
|
|
|
|
Install dependencies.
|
|
|
|
`neo-go` uses [dep](https://github.com/golang/dep) as its dependency manager. After installing `deps` you can run:
|
|
|
|
```
|
|
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:
|
|
|
|
```bash
|
|
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](https://hub.docker.com/r/cityofzion/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.
|
|
|
|
```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
|
|
```
|
|
|
|
## 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).
|
|
|
|
### 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](https://github.com/CityOfZion/neo-go/blob/master/CONTRIBUTING.md).
|
|
|
|
Before starting to work on a certain topic, create an new issue first,
|
|
describing the feature/topic you are going to implement.
|
|
|
|
# Contact
|
|
|
|
- [@anthdm](https://github.com/anthdm) on Github
|
|
- [@anthdm](https://twitter.com/anthdm) on Twitter
|
|
- Reach out to me on the [NEO Discord](https://discordapp.com/invite/R8v48YA) channel
|
|
- Send me an email anthony@cityofzion.io
|
|
|
|
# License
|
|
|
|
- Open-source [MIT](https://github.com/CityOfZion/neo-go/blob/master/LICENCE.md)
|