Skip to content

Lightweight ethereum virtual machine (EVM) bytecode selector extractor (Node + Browser, zero dependencies)

Notifications You must be signed in to change notification settings

snipe-dev/evm-selector-extractor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

evm-selector-extractor

npm version npm downloads

Lightweight Ethereum Virtual Machine (EVM) bytecode selector extractor.

  • Zero dependencies
  • Works in Node.js and Browser
  • ESM + CommonJS compatible
  • Extracts PUSH4 function selectors directly from raw bytecode

npm Package

https://www.npmjs.com/package/evm-selector-extractor


Installation

npm install evm-selector-extractor

Usage (Node.js + ethers v6)

import { JsonRpcProvider } from "ethers";
import { EVM } from "evm-selector-extractor";

const provider = new JsonRpcProvider("https://ethereum-rpc.publicnode.com");
const address = "0x6982508145454ce325ddbe47a25d4ec3d2311933";

async function main() {
    const bytecode = await provider.getCode(address);
    const evm = new EVM(bytecode);
    console.log(evm.getSelectors());
}

main();

Usage (CommonJS)

const { JsonRpcProvider } = require("ethers");
const { EVM } = require("evm-selector-extractor");

const provider = new JsonRpcProvider("https://ethereum-rpc.publicnode.com");

async function main() {
    const bytecode = await provider.getCode(
        "0x6982508145454ce325ddbe47a25d4ec3d2311933"
    );
    const evm = new EVM(bytecode);
    console.log(evm.getSelectors());
}

main();

Browser Example

import { EVM } from "evm-selector-extractor";

const bytecode = "0x63a9059cbb...";
const evm = new EVM(bytecode);

console.log(evm.getSelectors());

API

new EVM(bytecode: string)

  • Accepts hex string with or without 0x
  • Throws if invalid hex

getOpcodes(): EvmOpcode[]

interface EvmOpcode {
    name: string;
    opcode: number;
    pc: number;
    pushData?: Uint8Array;
}

getSelectors(): string[]

string[] // e.g. ["0xa9059cbb", "0x095ea7b3"]

Why this library?

  • No ABI required
  • No heavy EVM stacks
  • Works directly on raw bytecode
  • Suitable for static analysis and on-chain monitoring tools

Build

npm run build

About

Lightweight ethereum virtual machine (EVM) bytecode selector extractor (Node + Browser, zero dependencies)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published