npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@gxchain2/evmc

v2.0.3

Published

Ethereum EVMC bindings for node.js

Downloads

6

Readme

☔️🔗 EVMC bindings for node.js

This project includes node.js bindings for the Ethereum VM Connector API. It is capable of loading EVM implementations such as aleth-interpreter, evmjit and Hera and enables interop with javascript code.

Usage

Install evmc-js to your project using npm:

npm i evmc

You'll need to extend the provided EVMC class and implement the various abstract function calls. You'll also need to pass the path to the EVMC shared library you're targeting in the constructor. See the unit test for an example, but an abbreviated version of the class would look like:

import {Evmc} from 'evmc';

class MyEVM extends Evmc {

async getAccountExists(account: bigint) {
    // check if account exists and return..
    return doesAccountExists(account);
}

// and so on for all the callbacks...
}

Callbacks can be asynchronous (i.e., return a Promise), or synchronous. See the documentation for full details on the API you need to implement.

When you're ready to execute, you instantiate a instance of your Evmc class and call the execute function using the message and code you with to execute, as below:

const evm = new MyEVM(evmPath);
const result = await evm.execute(message, code));

Execution is asynchronous, but (for now), you should not call execute concurrently. However, you may instantiate multiple EVMs and run them concurrently. Each EVM runs on its own thread outside of the main event loop, so you can take full advantage of the parallelism available on the machine.

Roadmap

Currently, the C part of the binding could use a lot of cleanup and it does have a lot of repetitive code.

In addition, there are a lot of assertions which kill the Node process, which should probably throw an error back to javascript so the error can be handled gracefully.

Tracing is not yet supported, but could be easily added for EVMs with support.