mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-23 13:38:35 +00:00
141 lines
2.6 KiB
Markdown
141 lines
2.6 KiB
Markdown
|
# 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..
|