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 |
||
---|---|---|
.. | ||
cli | ||
compiler | ||
smartcontract | ||
context.go | ||
interop.go | ||
opcode.go | ||
opcode_string.go | ||
opcode_test.go | ||
output.go | ||
README.md | ||
script_builder.go | ||
script_builder_test.go | ||
stack.go | ||
stack_item.go | ||
stack_test.go | ||
state.go | ||
syscall.go | ||
vm.go |
NEO-GO-VM
A cross platform virtual machine implementation for avm
compatible programs.
Installation
With neo-go
Install dependencies.
neo-go
uses 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..