931388b687
* Virtual machine for the NEO blockhain. * fixed big.Int numeric operation pointer issue. * added appcall * Added README for vm package. * removed main.go * started VM cli (prompt) integration * added support for printing the stack. * moved cli to vm package * fixed vet errors * updated readme * added more test for VM and fixed some edge cases. * bumped version -> 0.37.0 |
||
---|---|---|
.github | ||
cli | ||
config | ||
pkg | ||
.gitignore | ||
circle.yml | ||
CONTRIBUTING.md | ||
Gopkg.lock | ||
Gopkg.toml | ||
LICENCE.md | ||
Makefile | ||
README.md | ||
VERSION |
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
- @anthdm on Github
- @anthdm on Twitter
- Reach out to me on the NEO Discord channel
- Send me an email anthony@cityofzion.io
License
- Open-source MIT