ewasm-jsvm

"ewasm virtual machine for javascript"

Usage no npm install needed!

<script type="module">
  import ewasmJsvm from 'https://cdn.skypack.dev/ewasm-jsvm';
</script>

README

ewasm-jsvm

ewasm virtual machine for javascript

Specs: https://github.com/ewasm/design/blob/master/eth_interface.md.

! Use it only for testing. Not production ready.

Use

Needs peer dependencies: npm install ethers --save.

npm install ewasm-jsvm --save

Node

For i64 support, use a Node.js version which supports the --experimental-wasm-bigint flag. E.g. v13.10.1

Browser

A limited (Ethereum interface methods with args of type i64 are not supported by browsers), but easier to use version of the ewasm-jsvm can be found at https://observablehq.com/@loredanacirstea/ewasmjsvm.

Development

cd ewasm-jsvm
yarn

Run Tests

npm run test

To test a contract:

For contracts that only need to execute the constructor, check out the c1 contract, abi & test:

const ewmodule = ewasmjsvm.runtimeSim(contracts.c1.bin, c1Abi);
const answ = await ewmodule.main(DEFAULT_TX_INFO);

For contracts where the constructor returns a runtime wasm to be deployed (that only has a fallback/default function), check out c2 contract, abi & test:

const runtime = await ewasmjsvm.deploy(contracts.c2.bin, c2Abi)(DEFAULT_TX_INFO);
const answ = await runtime.main(DEFAULT_TX_INFO);

For contracts with functions, check out the c10 contract, abi & test:

const runtime = await ewasmjsvm.deploy(contracts.c10.bin, c10Abi)(DEFAULT_TX_INFO);
let answ = await runtime.sum(8, 2, DEFAULT_TX_INFO);