0.1.13 • Published 3 months ago

evmabiless v0.1.13

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

GoDoc

ABI-less contract invocation

This is based on a known list of ABIs, and the contract's bytecode.

Usage

abiList

abiList returns a list of all known ABIs in a contract in human readable format.

Parameter is the contract's bytecode (hex encoded).

For a very basic sample:

import { abiObjectList } from 'evmabiless';

// ...

const erc20 = new ethers.Contract(address, abiObjectList(await provider.getCode(address)), provider);

scanContract

scanContract will return all methods in a contract, and hashes for unknown methods.

Parameter is the contract's bytecode (hex encoded).

Bytecode

EVM contracts will have a entry point that will read the function being called from the stack and go to the right part of the code. The bytecode involved is fairly simple, and while it might be prefixed from some range checks (in order to make the code run faster) it will always perform the same checks:

DUP1
PUSH4 0xAAAAAAAA
EQ
PUSH2 0xBBBB
JUMPI

This code will check if the calldata starts with AAAAAAAA (the keccak256 hash of the method signature), and go to BBBB if that's the case. This pattern can be easily recognized and made into a regexp:

/8063([0-9a-fA-F]{8})1461([0-9a-fA-F]{4})57/

A future version of this library will actually parse bytecode and return more information such as whether a contract is payable or not, and possibly recognize methods having the same 4 bytes keccak256 hash, but for now this should work with all contracts generated by Solidity (to be tested).

0.1.10

3 months ago

0.1.11

3 months ago

0.1.12

3 months ago

0.1.13

3 months ago

0.1.9

3 months ago

0.1.8

4 months ago

0.1.7

2 years ago

0.1.6

2 years ago

0.1.4

2 years ago

0.1.5

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago