neoneo-go/pkg/vm
Anthony De Meulemeester 69c3e645b6
VM improvements, tests + bugfixes (#61)
* changed vm commands to match more of the standard

* fixed Uint16 jmp bug in VM

* moved test to vm + fixed numnotequal bug

* fixed broken tests

* moved compiler tests to vm tests

* added basic for support + inc and dec stmts

* bumped version
2018-04-02 17:04:42 +02:00
..
cli VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
compiler VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
smartcontract Compiler (#37) 2018-03-02 16:49:10 +01:00
test VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
context.go VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
interop.go Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
opcode.go Smartcontract (#39) 2018-03-04 14:56:49 +01:00
opcode_string.go Update compiler (#22) 2018-02-19 10:24:28 +01:00
opcode_test.go VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
output.go VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
README.md VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
script_builder.go Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
script_builder_test.go Smartcontract (#39) 2018-03-04 14:56:49 +01:00
stack.go VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
stack_item.go VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
stack_test.go VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00
state.go Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
syscall.go Compiler (#37) 2018-03-02 16:49:10 +01:00
vm.go VM improvements, tests + bugfixes (#61) 2018-04-02 17:04:42 +02:00

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
step       step (n) instruction in the program (> step 10)
ops        show the opcodes of the current loaded program
ip         show the current instruction
estack     show evaluation stack details
astack     show alt stack details
istack     show invocation stack details
run        execute the current loaded script
cont       continue execution of the current loaded script
help       show available commands
exit       exit the VM prompt
break      place a breakpoint (> break 1)
load       load a script into the VM (> load /path/to/script.avm)

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..