neo-go/pkg/vm
Anthony De Meulemeester 931388b687
Cross platform virtual machine implementation (#60)
* 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
2018-03-30 18:15:06 +02:00
..
cli Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
compiler Fix compile output name (#58) 2018-03-29 08:24:45 +02:00
smartcontract Compiler (#37) 2018-03-02 16:49:10 +01:00
context.go Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +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 Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
output.go Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
README.md Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +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 Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
stack_item.go Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +02:00
stack_test.go Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +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 Cross platform virtual machine implementation (#60) 2018-03-30 18:15:06 +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
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..