evm-selector-extractor
v0.1.0
Published
Lightweight Ethereum Virtual Machine (EVM) bytecode selector extractor (Node + Browser, zero dependencies)
Maintainers
Readme
evm-selector-extractor
Lightweight Ethereum Virtual Machine (EVM) bytecode selector extractor.
- Zero dependencies
- Works in Node.js and Browser
- ESM + CommonJS compatible
- Extracts
PUSH4function selectors directly from raw bytecode
Installation
npm install evm-selector-extractorUsage (Node.js + ethers v6)
This example:
- Creates a provider
- Fetches bytecode of PEPE (ERC-20)
- Extracts function selectors
- Prints them to console
import { JsonRpcProvider } from "ethers";
import { EVM } from "evm-selector-extractor";
const provider = new JsonRpcProvider("https://ethereum-rpc.publicnode.com");
const address = "0x6982508145454ce325ddbe47a25d4ec3d2311933"; // PEPE ERC-20
async function main() {
const bytecode = await provider.getCode(address);
const evm = new EVM(bytecode);
const selectors = evm.getSelectors();
console.log("Extracted selectors:");
console.log(selectors);
}
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());No Node.js APIs are used internally. The library relies only on
Uint8Array.
API
new EVM(bytecode: string)
Creates an EVM bytecode parser instance.
- Accepts hex string with or without
0x - Throws if invalid hex
getOpcodes(): EvmOpcode[]
Returns parsed opcode list.
interface EvmOpcode {
name: string;
opcode: number;
pc: number;
pushData?: Uint8Array;
}getSelectors(): string[]
Extracts unique PUSH4 selectors.
Returns:
string[] // e.g. ["0xa9059cbb", "0x095ea7b3"]Hidden internal selectors are automatically filtered.
Why not use ethereum.js / ethers ABI parsing?
This library:
- Does not require ABI
- Does not depend on heavy EVM stacks
- Works directly on raw bytecode
- Designed for lightweight analysis tools and browser environments
Build
npm run buildRepository
https://github.com/snipe-dev/evm-selector-extractor
