neo-go/pkg/vm/README.md

141 lines
2.6 KiB
Markdown
Raw Normal View History

# NEO-GO-VM
A cross platform virtual machine implementation for `avm` compatible programs.
# Installation
## With neo-go
Install dependencies.
`neo-go` uses [dep](https://github.com/golang/dep) as its dependency manager. After installing `deps` you can run:
```
make deps
```
Build the `neo-go` cli:
```
make build
```
Start the virtual machine:
```
./bin/neo-go vm
```
```
_ ____________ __________ _ ____ ___
/ | / / ____/ __ \ / ____/ __ \ | | / / |/ /
/ |/ / __/ / / / /_____/ / __/ / / /____| | / / /|_/ /
/ /| / /___/ /_/ /_____/ /_/ / /_/ /_____/ |/ / / / /
/_/ |_/_____/\____/ \____/\____/ |___/_/ /_/
NEO-GO-VM >
```
## Standalone
More information about standalone installation coming soon.
# Usage
```
_ ____________ __________ _ ____ ___
/ | / / ____/ __ \ / ____/ __ \ | | / / |/ /
/ |/ / __/ / / / /_____/ / __/ / / /____| | / / /|_/ /
/ /| / /___/ /_/ /_____/ /_/ / /_/ /_____/ |/ / / / /
/_/ |_/_____/\____/ \____/\____/ |___/_/ /_/
NEO-GO-VM > help
COMMAND USAGE
run execute the current loaded script
exit exit the VM prompt
estack shows evaluation stack details
break place a breakpoint (> break 1)
astack shows alt stack details
istack show invocation stack details
load load a script into the VM (> load /path/to/script.avm)
resume resume the current loaded script
step step (n) instruction in the program (> step 10)
help show available commands
ip show the current instruction
opcode print the opcodes of the current loaded program
```
### Loading in your script
To load a script into the VM:
```
NEO-GO-VM > load ../contract.avm
READY
```
Run the script:
```
NEO-GO-VM > run
[
{
"value": 1,
"type": "BigInteger"
}
]
```
### Debugging
The `neo-go-vm` provides a debugger to inspect your program in-depth.
Step 4 instructions.
```
NEO-GO-VM > step 4
at breakpoint 4 (Opush4)
```
Using just `step` will execute 1 instruction at a time.
```
NEO-GO-VM > step
instruction pointer at 5 (Odup)
```
To place breakpoints:
```
NEO-GO-VM > break 10
breakpoint added at instruction 10
NEO-GO-VM > resume
at breakpoint 10 (Osetitem)
```
Inspecting the stack:
```
NEO-GO-VM > stack
[
{
"value": [
null,
null,
null,
null,
null,
null,
null
],
"type": "Array"
},
{
"value": 4,
"type": "BigInteger"
}
]
```
And a lot more features coming next weeks..