All Projects → second-state → Ssvm

second-state / Ssvm

SSVM is a high performance, extensible, and hardware optimized WebAssembly Virtual Machine for cloud, AI, and blockchain applications.

Projects that are alternatives of or similar to Ssvm

Octopus
Security Analysis tool for WebAssembly module (wasm) and Blockchain Smart Contracts (BTC/ETH/NEO/EOS)
Stars: ✭ 261 (-65.25%)
Mutual labels:  blockchain, ethereum, webassembly, wasm
0xdeca10b
Sharing Updatable Models (SUM) on Blockchain
Stars: ✭ 285 (-62.05%)
Mutual labels:  artificial-intelligence, blockchain, ethereum
Hardhat
Hardhat is a development environment to compile, deploy, test, and debug your Ethereum software. Get Solidity stack traces & console.log.
Stars: ✭ 727 (-3.2%)
Mutual labels:  blockchain, ethereum
Graphql Client
Typed, correct GraphQL requests and responses in Rust
Stars: ✭ 620 (-17.44%)
Mutual labels:  webassembly, wasm
Awesome Blockchain
区块链白皮书、书籍、交易所、币种、自媒体等资源汇总 💯
Stars: ✭ 747 (-0.53%)
Mutual labels:  blockchain, ethereum
Ethlance
Ethlance is the first job market platform built entirely on the Ethereum blockchain. Free to use forever!
Stars: ✭ 598 (-20.37%)
Mutual labels:  blockchain, ethereum
Wasm Loader
✨ WASM webpack loader
Stars: ✭ 604 (-19.57%)
Mutual labels:  webassembly, wasm
Pib
PHP in Browser (powered by WebAssembly)
Stars: ✭ 649 (-13.58%)
Mutual labels:  webassembly, wasm
Status Go
The Status module that consumes go-ethereum
Stars: ✭ 579 (-22.9%)
Mutual labels:  blockchain, ethereum
Client
(Aragon 1) Create and manage decentralized organizations on Ethereum.
Stars: ✭ 733 (-2.4%)
Mutual labels:  blockchain, ethereum
Blockchain guide
Introduce blockchain related technologies, from theory to practice with bitcoin, ethereum and hyperledger.
Stars: ✭ 5,897 (+685.22%)
Mutual labels:  blockchain, ethereum
Ethermint Archive
Ethereum on Tendermint using Cosmos-SDK!
Stars: ✭ 667 (-11.19%)
Mutual labels:  blockchain, ethereum
Ethereum Org Website
Ethereum.org is a primary online resource for the Ethereum community.
Stars: ✭ 591 (-21.3%)
Mutual labels:  blockchain, ethereum
Astro
A fun safe language for rapid prototyping and high performance applications
Stars: ✭ 588 (-21.7%)
Mutual labels:  webassembly, wasm
Token Core Android
a blockchain private key management library on android
Stars: ✭ 613 (-18.38%)
Mutual labels:  blockchain, ethereum
Kelp
Kelp is a free and open-source trading bot for the Stellar DEX and 100+ centralized exchanges
Stars: ✭ 580 (-22.77%)
Mutual labels:  blockchain, ethereum
Intellij Solidity
Solidity plugin for IntelliJ
Stars: ✭ 646 (-13.98%)
Mutual labels:  blockchain, ethereum
Rotki
A portfolio tracking, analytics, accounting and tax reporting application that protects your privacy
Stars: ✭ 689 (-8.26%)
Mutual labels:  blockchain, ethereum
Awesome Blockchain Articles
A collection of awesome blockchain articles. Good learning resources about blockchain.
Stars: ✭ 552 (-26.5%)
Mutual labels:  blockchain, ethereum
Webassemblyjs
Toolchain for WebAssembly
Stars: ✭ 566 (-24.63%)
Mutual labels:  webassembly, wasm

Introduction

SSVM is a high performance and enterprise-ready WebAssembly (WASM) Virtual Machine for cloud, AI, and Blockchain applications. Its use cases include the following.

For the information on related tools and the SSVM ecosystem, please refer to the SSVM ecosystem documentation.

build Total alerts Language grade: C/C++ codecov

Getting Started

Get Source Code

$ git clone [email protected]:second-state/SSVM.git
$ cd SSVM
$ git checkout 0.7.3

Prepare the environment

Use our docker image

Our docker image use ubuntu 20.04 as the base.

$ docker pull secondstate/ssvm

Or setup the environment manually

# Tools and libraries
$ sudo apt install -y \
	software-properties-common \
	cmake \
	libboost-all-dev

# And you will need to install llvm for ssvmc tool
$ sudo apt install -y \
	llvm-dev \
	liblld-10-dev

# SSVM supports both clang++ and g++ compilers
# You can choose one of them for building this project
$ sudo apt install -y gcc g++
$ sudo apt install -y clang

Support for legacy operating systems

Our development environment requires libLLVM-10 and >=GLIBCXX_3.4.26.

If users are using the older operating system than Ubuntu 20.04, please use our special docker image to build SSVM. If you are looking for the pre-built binaries for the older operatoring system, we also provide several pre-built binaries based on manylinux* distribution.

Portable Linux Built Distributions Tags Base Image Provided Requirements Docker Image
manylinux1 CentOS 5.11 GLIBC <= 2.5
CXXABI <= 3.4.8
GLIBCXX <= 3.4.9
GCC <= 4.2.0
secondstate/ssvm:manylinux1_x86_64
manylinux2010 CentOS 6 GLIBC <= 2.12
CXXABI <= 1.3.3
GLIBCXX <= 3.4.13
GCC <= 4.5.0
secondstate/ssvm:manylinux2010_x86_64
manylinux2014 CentOS 7 GLIBC <= 2.17
CXXABI <= 1.3.7
GLIBCXX <= 3.4.19
GCC <= 4.8.0
secondstate/ssvm:manylinux2014_x86_64

If you don't want to build Ahead-of-Time runtime/compiler

If users don't need Ahead-of-Time runtime/compiler support, they can set the CMake option SSVM_DISABLE_AOT_RUNTIME to ON.

$ cmake -DCMAKE_BUILD_TYPE=Release -DSSVM_DISABLE_AOT_RUNTIME=ON ..

Build SSVM

SSVM provides various tools for enabling different runtime environments for optimal performance. After the build is finished, you can find there are several ssvm related tools:

  1. ssvm is for general wasm runtime.
    • ssvm executes a WASM file in interpreter mode or a compiled WASM so file in ahead-of-time compilation mode.
    • To disable building all tools, you can set the CMake option BUILD_TOOLS to OFF.
  2. ssvmc is for ahead-of-time WASM compiler.
    • ssvmc compiles a general WASM file into a so file.
    • To disable building the ahead-of-time compiler only, you can set the CMake option SSVM_DISABLE_AOT_RUNTIME to ON.
    • To disable building all tools, you can set the CMake option BUILD_TOOLS to OFF.
  3. ssvm-qitc is for AI application, supporting ONNC runtime for AI model in ONNX format.
# After pulling our ssvm docker image
$ docker run -it --rm \
    -v <path/to/your/ssvm/source/folder>:/root/ssvm \
    secondstate/ssvm:latest
(docker)$ cd /root/ssvm
(docker)$ mkdir -p build && cd build
(docker)$ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON .. && make -j

Run built-in tests

The following built-in tests are only available when the build flag BUILD_TESTS sets to ON.

Users can use these tests to verify the correctness of SSVM binaries.

$ cd <path/to/ssvm/build_folder>
$ ctest

Run ssvm (SSVM with general wasm runtime)

To run SSVM with general wasm runtime, users will need to provide the following parameters:

  1. (Optional) Reactor mode: use --reactor to enable reactor mode.
    • SSVM will execute the function which name should be given in ARG[0].
    • If there's exported function which names _initialize, the function will be executed with the empty parameter at first.
  2. (Optional) Binding directories into WASI virtual filesystem.
    • Each directory can be specified as --dir host_path:guest_path.
  3. (Optional) Environ variables.
    • Each variable can be specified as --env NAME=VALUE.
  4. Wasm file(/path/to/wasm/file).
  5. (Optional) Arguments.
    • In reactor mode, the first argument will be the function name, and the arguments after ARG[0] will be parameters of wasm function ARG[0].
    • In command mode, the arguments will be parameters of function _start.

Example: Fibonacci

# cd <path/to/ssvm/build_folder>
$ cd tools/ssvm
# ./ssvm [-h|--help] [-v|--version] [--reactor] [--dir PREOPEN_DIRS ...] [--env ENVS ...] [--enable-bulk-memory] [--enable-reference-types] [--enable-simd] [--enable-all] [--allow-command COMMANDS ...] [--allow-command-all] [--] WASM_OR_SO [ARG ...]
$ ./ssvm --reactor examples/fibonacci.wasm fib 10
89

When wrong number of parameter given, the following error message is printed.

$ ./ssvm --reactor examples/fibonacci.wasm fib 10 10
2020-08-21 06:30:37,304 ERROR [default] execution failed: function signature mismatch, Code: 0x83
2020-08-21 06:30:37,304 ERROR [default]     Mismatched function type. Expected: params{i32} returns{i32} , Got: params{i32 , i32} returns{i32}
2020-08-21 06:30:37,304 ERROR [default]     When executing function name: "fib"

When calling unknown exported function, the following error message is printed.

$ ./ssvm --reactor examples/fibonacci.wasm fib2 10
2020-08-21 06:30:56,981 ERROR [default] ssvm runtime failed: wasm function not found, Code: 0x04
2020-08-21 06:30:56,981 ERROR [default]     When executing function name: "fib2"

Example: Factorial

# ./ssvm [-h|--help] [-v|--version] [--reactor] [--dir PREOPEN_DIRS ...] [--env ENVS ...] [--enable-bulk-memory] [--enable-reference-types] [--enable-simd] [--enable-all] [--allow-command COMMANDS ...] [--allow-command-all] [--] WASM_OR_SO [ARG ...]
$ ./ssvm --reactor examples/factorial.wasm fac 5
120

Related tools

SSVM-EVMC

SSVM-EVMC provides support for Ewasm runtime which is compatible with EVMC.

This project provides a shared library that can initialize and execute by the EVMC interface.

SSVM nodejs addon

SSVM-napi provides support for accessing SSVM as a Node.js addon.

It allows Node.js applications to call WebAssembly functions written in Rust or other high-performance languages.

Why do you want to run WebAssembly on the server-side?

The SSVM addon could interact with the wasm files generated by the ssvmup compiler tool.

SSVM-TensorFlow

SSVM-TensorFlow provides support for accessing with TensorFlow C library.

This project provides a tool that can execute WASM with TensorFlow extension compiled from Rust ssvm_tensorflow_interface.

DevChain

The Second State DevChain features a powerful and easy-to-use virtual machine that can quickly get you started with the smart contract and DApp development.

SSVM-evmc is integrated into our DevChain. Click here to learn how to run an ewasm smart contract on a real blockchain.

Customized Host Functions

Design document shows how to register customized host functions into SSVM and execute with wasm files.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].