SVM - Spacemesh Virtual Machine

Overview

SVM - Spacemesh Virtual Machine

build license gitter

Project Goals

  • Self-contained. Should be hosted by the Spacemesh Golang full-node and future Spacemesh Rust full-node
  • Built on top of wasmer
  • Future compatible for the SMESH programming-language (the language is still in a research stage).

Rust

SVM depends on the single-pass compiler of wasmer which requires the rust nightly release channel. More information about installing rust nightly can be found here

Build & Tests

The SVM project is organized into a couple of crates. The root crate is called SVM and it's a workspace crate.

In order to build the SVM project crates at once and run their tests:

cargo build
cargo test

If you want to build & test in release mode execute:

cargo build --release --no-default-features
cargo test --all --release --no-default-features

Docker

In order to build the Docker image

docker build -t svm-build .

Then, for spawning a new container

docker run -it svm-build

Supported Operating-Systems

  • Mac
  • Linux
  • Windows

Got Questions?

Comments
  • svm-runtime-c-api: auto-generate

    svm-runtime-c-api: auto-generate "wasmer_svm.h" using cbindgen

    Overview / Motivation

    We'd like to auto-generate the svm_wasmer.h file for the svm-runtime-c-api

    The Task

    We'd like to auto-generate a svm_wasmer.h C-header file out of this Rust file: https://github.com/spacemeshos/svm/blob/develop/crates/svm-runtime-c-api/src/c_api.rs

    Implementation Notes

    1. Currently, the svm_wasmer.h C-header file is manually built: https://github.com/spacemeshos/svm/blob/master/crates/svm-runtime-c-api/examples/svm_wasmer.h

    2. Please use this link as a reference: https://doc.rust-lang.org/cargo/reference/build-scripts.html

    3. Please use cbindgen for the task.

    You may want to take a look at this code of wasmer as a good reference for using cbindgen https://github.com/wasmerio/wasmer/blob/master/lib/runtime-c-api/build.rs

    1. The svm_wasmer.h file should be auto-generated as part of cargo nightly build (SVM requires Rust nightly)

    2. If possible, please auto-copy the generated svm_wasmer.h C-header file also to: https://github.com/spacemeshos/svm/blob/develop/crates/svm-runtime-c-api/examples/

    Contribution Guidelines

    Important: Issue assignment to developers will be by the order of their application and proficiency level according to the tasks complexity. We will not assign tasks to developers who haven't introduced themselves on our Gitter dev channel

    1. Introduce yourself on svm dev chat channel - ask our team any question you may have about this task
    2. Fork branch develop to your own repo and work in your repo
    3. The code must be formatted using rust fmt
    4. You must write unit tests for all types and methods when submitting a component.
    5. When ready for code review, submit a PR from your repo back to branch develop
    6. Attach relevant issue to PR
    enhancement help wanted good first issue 
    opened by YaronWittenstein 6
  • Build pipelines

    Build pipelines

    Overview / Motivation

    Currently, we have a very basic build using Travis CI.

    We'd like to create a build-pipeline for Mac and Linux. SVM won't compile on Windows yet, but the preparation work can be done already.

    The Task

    We want to have the following build pipelines:

    • Linux Desired output: (both debug and release)
      • libsvm_runtime_c_api.so
      • svm_wasmer.h
      • wasmer
        • libwasmer_runtime_c_api.so
        • wasmer.h
    • Mac Desired output: (both debug and release)
      • libsvm_runtime_c_api.dylib
      • svm_wasmer.h
      • wasmer
        • libwasmer_runtime_c_api.dylib
        • wasmer.h
    • Windows (preparation since SVM doesn't work yet on Windows) Desired output: (both debug and release)
      • libsvm_runtime_c_api.dll
      • svm_wasmer.h
      • wasmer
        • libwasmer_runtime_c_api.dll
        • wasmer.h

    Implementation Notes

    1. Please implement the CI using Travis CI. If you'd like to use GitHub Actions we might go for it.
    2. Please create separate branches for Mac / Linux / Windows.
      • SVM require rust nightly, please build using this command: cargo +nightly build
    3. Tests shouldn't run in parallel (we'll explain why on the Gitter chat). Please run the tests using this command: RUST_TEST_THREADS=1 cargo +nightly test --all --release
    4. In case not all tests pass, the build must fail abruptly

    Contribution Guidelines

    Important: Issue assignment to developers will be by the order of their application and proficiency level according to the tasks complexity. We will not assign tasks to developers who haven't introduced themselves on our Gitter dev channel

    1. Introduce yourself on svm dev chat channel - ask our team any question you may have about this task
    2. Fork branch develop to your own repo and work in your repo
    3. The code must be formatted using rust fmt
    4. You must write unit tests for all types and methods when submitting a component.
    5. When ready for code review, submit a PR from your repo back to branch develop
    6. Attach relevant issue to PR
    enhancement help wanted good first issue 
    opened by YaronWittenstein 6
  • Error in building the SVM project crates

    Error in building the SVM project crates

    Overview / Motivation

    Trying to build svm project on local ubuntu 22.04

    The Task

    1. Rust nightly setup done from following link - https://doc.rust-lang.org/1.2.0/book/nightly-rust.html

    2. Cloned [svm] - git clone https://github.com/spacemeshos/svm.git

    3. Executed build command - cargo build

    4. Error Output for cargo build -

    error: couldn't read crates/host/genesis-config/src/../../../../simple-coin-transfer-template/simple_coin_transfer_template.wasm: No such file or directory (os error 2)

    --> crates/host/genesis-config/src/lib.rs:40:9 | 40 | / include_bytes!( 41 | | "../../../../simple-coin-transfer-template/simple_coin_transfer_template.wasm" 42 | | ) | |_________^ | = note: this error originates in the macro include_bytes

    1. Seeking guidance to build the svm repo successfully

    Implementation Notes

    Followed the project's readme

    opened by joyosive 4
  • Add C-API testing via C client

    Add C-API testing via C client

    Overview / Motivation

    We want to simulate a failed exec app transaction. The returned receipt should indicate that the transaction failed along with an error message.

    The Task

    The task will require decoding a raw receipt of a failed transaction and printing the failure reason.

    Implementation Notes

    1. The raw format of a receipt of a failed transaction can be found here: https://github.com/spacemeshos/svm/blob/develop/crates/svm-runtime-c-api/src/receipt.rs#L15
    2. Add a file named panic.wasm under examples/c/wasm

    Contribution Guidelines

    Important: Issue assignment to developers will be by the order of their application and proficiency level according to the tasks complexity. We will not assign tasks to developers who haven't introduced themselves on our Gitter dev channel

    1. Introduce yourself on svm dev chat channel - ask our team any question you may have about this task
    2. Fork branch develop to your own repo and work in your repo
    3. The code must be formatted using rustfmt
    4. You must write unit tests for all types and methods when submitting a component.
    5. When ready for code review, submit a PR from your repo back to branch develop
    6. Attach relevant issue to PR
    enhancement 
    opened by YaronWittenstein 4
  • Safety improvements: mitigation for PR #390

    Safety improvements: mitigation for PR #390

    This is a follow-up PR to https://github.com/spacemeshos/svm/pull/411.

    https://github.com/spacemeshos/svm/pull/390 fixed a Fixed-Gas regression in svm-abi-decoder, meaning that some code had been merged into master which caused the compiled .wasm artifacts to contain illegal loop instructions. This broke SVM Fixed-Gas mode, so we reverted back to using pointers within Cursor.

    This PR mitigates the two issues:

    • It doesn't compile into any loop instructions and invalid WASM code.
    • It reverts some of the safety improvements applied before breaking Fixed-Gas. In particular, we introduce back explicit lifetimes, which help the compiler check for some useful invariants and reduces the UB surface.
    bug svm-core svm 
    opened by neysofu 3
  • Implement `Increase Balance` for an `Account`

    Implement `Increase Balance` for an `Account`

    One of the requirements raised as part of the integration with go-spacemesh is that an Account should get a reward. This is a printing coins like functionality doesn't involve any sender party.

    The task is to implement an increase_balance functionality for the Global State and have it exposed in the FFI layer (to be consumed by go-svm)

    go-svm svm-c-api must-for-mainnet small svm 
    opened by YaronWittenstein 3
  • Return `Touched Accounts` inside the `Spawn` and `Call` Receipts

    Return `Touched Accounts` inside the `Spawn` and `Call` Receipts

    Notes

    Before working on this issue, please make sure this one is addressed #406

    Details

    While calling an existing Account (i.e., executing a Call transaction) and spawning new ones (involves running a constructor), we might transfer coins between different Accounts.

    go-spacemesh would like to be notified which accounts were involved in coins transfers as part of executing a transaction.

    In other words, each time the svm_transfer host function is being called, we'd like to append the source and destination into the Touched Accounts set.

    The logged source will always be the same Address - the currently executing Account. So the implementation can optimize that, but keeping things simple and stupid in the solution might be a better approach.

    The task of the issue is to make sure that Spawn and Call receipts will have a new touched_accounts field that will contain this list of Account Addresses.

    Encoding

    Lastly, this field should also be encoded in the returned Receipts.

    See the svm-codec code here: https://github.com/spacemeshos/svm/tree/master/crates/codec/src/receipt

    go-svm must-for-mainnet medium svm 
    opened by YaronWittenstein 3
  • Fix the SVM Windows Artifact

    Fix the SVM Windows Artifact

    @sudachen has pointed out that the current SVM Windows Artifact is corrupted and he suggested two ways to tackle it:

    • Use dlltool @sudachen - can you please elaborate what commands need to be used here?

    • Use the x86_64-pc-windows-gnu toolchain explicitly when compiling to Windows. @sudachen - is anything missing here?

    @neysofu @moshababo @noamnelke FYI

    must-for-mainnet small svm 
    opened by YaronWittenstein 3
  • `load160/store160` and `load256/store256` vmcalls

    `load160/store160` and `load256/store256` vmcalls

    Motivation

    An Address and PublicKey take 20 and 32 bytes respectively. Supporting these two primitives efficiently (and elegantly) is essential.

    Also, the fact that Wasm Memory lays-out in Little-Endian order should not matter. 

    The mechanism for feeding an app's method with raw data is using the function buffer (func_buf for short). SVM copies the func_buf data in the Wasm Instance Memory (i.e App's Memory).

    From that point, an application may want to store part of the func_buf for long-term use (i.e Applications' storage).

    Using the existing get160 and set160 will result in messing the raw data. Here is an explanation. We start from having 20 bytes in Memory (the data copied from func_buf).

    1) Address (20 bytes) = A1A2A3A4A5A6A7A8    B1B2B3B4B5B6B7B8    C1C2C3C4
    
    2) Loading from Memory the Address into 3 integers using will result in:
    (using wasm Memory load opcodes)
    
    a = A8A7A6A5A4A3A2A1
    b = B8B7B6B5B4B3B2B1
    c = C4C3C2C1
    
    3) Storing these integers using `set160(var_id, a, b, c)` will give us:
    
    A8A7A6A5A4A3A2A1 B8B7B6B5B4B3B2B1 C4C3C2C1
    
    Now the 20 bytes are laid out in a different order than the original one
    
    4) Now, reading from the storage `get160 -> (a: i64, b: i64, c: i64)`
    
    a = A8A7A6A5A4A3A2A1
    b = B8B7B6B5B4B3B2B1
    c = C4C3C2C1
    

    Instead of the above - by using the this PR new store160 will do a plain copy of memory raw data into storage. The data stored will be the same as the original one.

    Having the existing get160/set160 has there place too. They are great when we'd like to compare Address-es faster by doing integer comparisons (Instead of looping-over memory and having many compares).

    That's why I think there is room for both get160/set160 and load160/store160. (The same applies for 256-bit of course).

    medium 
    opened by YaronWittenstein 3
  • Implementation of `svm_transfer` host function

    Implementation of `svm_transfer` host function

    This PR addresses issue#406, i.e. introducing a new host function that sends coins from the current executing account to a destination account.

    TODO:

    • Investigate why loading the source account succeeds, but doing same for the destination account fails.
    opened by kobby-pentangeli 2
  • Transition away from conflicting feature flags in favor of separate crates

    Transition away from conflicting feature flags in favor of separate crates

    Follow-up PR to #416. This PR fixes many of the problems that we've had in the past related to mutually exclusive Cargo features. In particular, it refactors conditional compilation of the ffi and mock flags into their own separate crates, which allows Cargo to easily avoid conflicts automatically and prepares the ground for fixing #414.

    • svm-sdk is split into svm-sdk and svm-sdk-mock. One can easily extern crate svm_sdk_mock as svm_sdk to avoid rewriting lots of examples and tests.
    • svm-sdk-host is split into three crates: svm-sdk-host (core trait definition), svm-sdk-host-ffi and svm-sdk-host-mock.
    • Same goes for svm-sdk-storage.
    • svm-sdk-macros is agnostic to both svm-sdk and svm-sdk-mock with its macros template and template_mock.
    enhancement big svm sdk 
    opened by neysofu 2
  • Bump minimatch and mocha in /crates/host/codec/examples

    Bump minimatch and mocha in /crates/host/codec/examples

    Bumps minimatch to 5.0.1 and updates ancestor dependency mocha. These dependencies need to be updated together.

    Updates minimatch from 3.0.4 to 5.0.1

    Commits
    • 9f49616 5.0.1
    • cdc3188 don't load the whole path module just for the sep
    • dfa4f22 test unix path so win32 has full coverage
    • a000988 remove unused npmignore file
    • 0b2d3ba mention fnmatch(3) in impl comparison
    • 8c3f5f4 skip tests on windows that rely on \ being a valid path char
    • fc44f5f 5.0.0
    • 9104d8d Expect exclusively forward slash as path sep, same as node-glob
    • 58b72d3 fix(brace-expansion): ignore only blocks that begins with $
    • 048ada0 4.2.1
    • Additional commits viewable in compare view

    Updates mocha from 8.3.2 to 10.1.0

    Release notes

    Sourced from mocha's releases.

    v10.1.0

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    v10.0.0

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    Also thanks to @​ea2305 and @​SukkaW for improvements to our documentation.

    v9.2.2

    9.2.2 / 2022-03-11

    Please also note our announcements.

    :bug: Fixes

    ... (truncated)

    Changelog

    Sourced from mocha's changelog.

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    Also thanks to @​ea2305 and @​SukkaW for improvements to our documentation.

    9.2.2 / 2022-03-11

    :bug: Fixes

    :nut_and_bolt: Other

    ... (truncated)

    Commits
    • 5f96d51 build(v10.1.0): release
    • ed74f16 build(v10.1.0): update CHANGELOG
    • 51d4746 chore(devDeps): update 'ESLint' to v8 (#4926)
    • 4e06a6f fix(browser): increase contrast for replay buttons (#4912)
    • 41567df Support prefers-color-scheme: dark (#4896)
    • 61b4b92 fix the regular expression for function clean in utils.js (#4770)
    • 77c18d2 chore: use standard 'Promise.allSettled' instead of polyfill (#4905)
    • 84b2f84 chore(ci): upgrade GH actions to latest versions (#4899)
    • 023f548 build(v10.0.0): release
    • 62b1566 build(v10.0.0): update CHANGELOG
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • https://canto.io/

    https://canto.io/

    Overview / Motivation

    TODO: Describe the motivation and goals for the issue here...

    The Task

    TODO: Clearly describe the issue requirements here...

    Implementation Notes

    TODO: Add links to relevant resources, specs, related issues, etc...

    Contribution Guidelines

    Important: Issue assignment to developers will be by the order of their application and proficiency level according to the tasks complexity. We will not assign tasks to developers who haven't introduced themselves on our Gitter dev channel

    1. Introduce yourself on svm dev chat channel - ask our team any question you may have about this task
    2. Fork branch develop to your own repo and work in your repo
    3. The code must be formatted using rustfmt
    4. You must write unit tests for all types and methods when submitting a component.
    5. When ready for code review, submit a PR from your repo back to branch develop
    6. Attach relevant issue to PR
    opened by PinkDiamond1 0
  • Bump regex from 1.5.4 to 1.5.6

    Bump regex from 1.5.4 to 1.5.6

    Bumps regex from 1.5.4 to 1.5.6.

    Changelog

    Sourced from regex's changelog.

    1.5.6 (2022-05-20)

    This release includes a few bug fixes, including a bug that produced incorrect matches when a non-greedy ? operator was used.

    1.5.5 (2022-03-08)

    This releases fixes a security bug in the regex compiler. This bug permits a vector for a denial-of-service attack in cases where the regex being compiled is untrusted. There are no known problems where the regex is itself trusted, including in cases of untrusted haystacks.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 0
  • Bump crossbeam-utils from 0.8.6 to 0.8.8

    Bump crossbeam-utils from 0.8.6 to 0.8.8

    Bumps crossbeam-utils from 0.8.6 to 0.8.8.

    Release notes

    Sourced from crossbeam-utils's releases.

    crossbeam-utils 0.8.8

    • Fix a bug when unstable loom support is enabled. (#787)

    crossbeam-utils 0.8.7

    • Add AtomicCell<{i*,u*}>::{fetch_max,fetch_min}. (#785)
    • Add AtomicCell<{i*,u*,bool}>::fetch_nand. (#785)
    • Fix unsoundness of AtomicCell<{i,u}64> arithmetics on 32-bit targets that support Atomic{I,U}64 (#781)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 0
  • Adopt SHA3 & drop usage of BLAKE3

    Adopt SHA3 & drop usage of BLAKE3

    SVM currently uses BLAKE3 in all places where we need a cryptographic hash function. I believe go-spacemesh uses SHA3, which is quite a bit slower but probably fast enough for our needs. I suggest replacing BLAKE3 with SHA3 everywhere within the SVM so that both the node and SVM can perform account and template address computation using SHA3.

    good first issue small svm 
    opened by neysofu 0
Releases(v0.0.35)
Owner
Spacemesh
A programmable cryptocurrency. Get started here: https://product.spacemesh.io/#/platform
Spacemesh
vore is a virtual machine management tool focused on VFIO set ups.

vore is a virtual machine management tool focused on VFIO set ups. with a minimal TOML file you should be able to get you should be able to create a VFIO-focused VM.

eater 8 Mar 20, 2022
Ethereum Virtual Machine implementation

Fast EVM implementation with full async support. Port of evmone to Rust.

Artem Vorotnikov 147 Dec 9, 2022
An LC-3 virtual machine written in Rust for learning purposes.

LC-3 written in Rust An LC-3 virtual machine written in Rust for learning purposes.

Rodrigo Araújo 30 Dec 11, 2022
crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor

crosvm - The Chrome OS Virtual Machine Monitor crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor, with a focus on simplicity,

Google 454 Dec 31, 2022
🍄 A disassembler for the UEFI Bytecode Virtual Machine.

?? A disassembler for the UEFI Bytecode Virtual Machine.

Samuel Wilder 51 Dec 6, 2022
STARK-based virtual machine

Polygon Miden A STARK-based virtual machine. WARNING: This project is in an alpha stage. It has not been audited and may contain bugs and security fla

Polygon (previously Matic) 415 Dec 28, 2022
Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors

Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors. The crates here are considered to be the downstream of rust-vmm.

OpenAnolis Community 62 Dec 30, 2022
Virtual Machine Language - Yet another stack-based programming language

Virtual Machine Language - Yet another stack-based programming language

null 2 Feb 26, 2022
A Rust implementation of the Lox programming language. Based on clox, the bytecode virtual machine.

A Rust implementation of the Lox programming language. Based on clox, the bytecode virtual machine.

Diego Freijo 23 Dec 26, 2022
BM - a basic virtual machine written in rust

A basic virtual machine implementation with it's own binary format and assembly, as a learning experience.

KaviiSuri 1 May 8, 2022
LC3 Virtual Machine written in Rust 🦀

LC3 - Emulator LC3-rust is a virtual machine for the Little Computer 3 architecture, written using the Rust programming language. The VM has been writ

Gabriele Pappalardo 2 Oct 25, 2022
little computer 3 (lc3) virtual machine written in Rust

Little Computer 3 (LC3) Virtual Machine (by @lowlevelers) What is Little Computer 3? Little Computer 3, or LC-3, is a type of computer educational pro

LowLevelers 3 Oct 25, 2023
Solana SVM, modularized.

The Case for a Modular SVM An effort is underway at Anza to extract most of the transaction processing pipeline out of the validator and into what wil

Joe C 42 Jul 26, 2024
Revolutionary Machine (revm) is a fast Ethereum virtual machine written in rust.

revm - Revolutionary Machine Is Rust Ethereum Virtual Machine with great name that is focused on speed and simplicity.

null 513 Dec 31, 2022
Wait, another virtual machine ?

WAVM WAVM, Wait, another virtual machine ?, is a register based 64 bits virtual machine written in Rust. It relies on 32 registers and 31 opcodes that

Wafelack 61 May 2, 2022
vore is a virtual machine management tool focused on VFIO set ups.

vore is a virtual machine management tool focused on VFIO set ups. with a minimal TOML file you should be able to get you should be able to create a VFIO-focused VM.

eater 8 Mar 20, 2022
Detect if code is running inside a virtual machine (x86 and x86-64 only).

inside-vm Detect if code is running inside a virtual machine. Only works on x86 and x86-64. How does it work Measure average cpu cycles when calling c

null 34 Oct 3, 2022
Ethereum Virtual Machine implementation

Fast EVM implementation with full async support. Port of evmone to Rust.

Artem Vorotnikov 147 Dec 9, 2022
An LC-3 virtual machine written in Rust for learning purposes.

LC-3 written in Rust An LC-3 virtual machine written in Rust for learning purposes.

Rodrigo Araújo 30 Dec 11, 2022
crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor

crosvm - The Chrome OS Virtual Machine Monitor crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor, with a focus on simplicity,

Google 454 Dec 31, 2022