Skip to content

Destiner/abi-coder

Repository files navigation

ABI Coder

This package is not maintained and will be archived. Use viem's ABI utils.

A set of high-level ABI encoding and decoding utils.

Motivation

There are several packages that provide ABI coding utils. However, there is no a high-level solution in the Ethers ecosystem. web3-eth-abi and abi-decoder depend on web3.js. @ethersproject/abi is pretty low-level. ethereumjs-abi works only with functions. Many other packages provide encoding or decoding only.

Features

  • Function coding
  • Event coding
  • Constructor coding
  • TS support

Installation

npm install abi-coder

This package requires ethers V6. If you use ethers V5, you need to install abi-coder V4.

This package is a pure ESM package. Follow this guide for more info.

Example

import { Coder } from 'abi-coder';

import * as erc20Abi from './abi/erc20.json';

const erc20Coder = new Coder(erc20Abi);

erc20Coder.getFunctionSelector('totalSupply');
// 0x18160ddd

erc20Coder.decodeEvent(
  [
    '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
    '0x000000000000000000000000b5cfcb4d4745cbbd252945856e1b6eaadcf2fc4e',
    '0x000000000000000000000000694c6aea9444876d4fa9375fc9089c370f8e9eda',
  ],
  '0x0000000000000000000000000000000000000000000000370c9b5ef669c35300',
);
/*
{
	name: 'Transfer',
	inputs: [...],
	values: [
		'0xb5CFcb4D4745cBBD252945856E1B6eaadCf2fC4E',
		'0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
		BigNumber('1015479348216300000000'),
	],
}
*/

erc20Coder.encodeFunction({
  name: 'transfer',
  inputs: [
    {
      name: 'from',
      type: 'address',
    },
    {
      name: 'amount',
      type: 'uint256',
    },
  ],
  values: [
    '0x694c6aea9444876d4fA9375fC9089C370F8E9edA',
    '1015479348216300000000',
  ],
});
// '0xa9059cbb000000000000000000000000694c6aea9444876d4fa9375fc9089c370f8e9eda0000000000000000000000000000000000000000000000370c9b5ef669c35300'

API

  • Coder(abi)
    • utils
      • getFunctionSelector(name: string): string
      • getEventTopic(name: string): string
    • decoding
      • decodeConstructor(data: string): Constructor
      • decodeEvent(topics: string[], data: string): Event
      • decodeFunction(data: string): FunctionData
      • decodeFunctionOutput(name: string, data: string): FunctionOutputData
    • encoding
      • encodeConstructor(constructorData: Constructor): string
      • encodeEvent(eventData: Event): EventEncoding
      • encodeFunction(functionData: FunctionData): string
      • encodeFunctionOutput(functionData: FunctionOutputData): string

About

Ethereum ABI encoding and decoding utils

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •