# abi-coder

> ABI function, event, and contrustor encoder/decoder

Latest version **5.0.0** (published 2023-02-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install abi-coder
pnpm add abi-coder
yarn add abi-coder
bun add abi-coder
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 5.0.0 |
| Published | 2023-02-21 |
| First published | 2021-12-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 28.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 10 |
| Author | Timur Badretdinov |
| Maintainers | destiner |
| Keywords | abi, ethers, ethereum |

## Links

- npm: https://www.npmjs.com/package/abi-coder
- Repository: https://github.com/Destiner/abi-coder
- Homepage: https://github.com/Destiner/abi-coder#readme
- Issues: https://github.com/Destiner/abi-coder/issues
- npm.io page: https://npm.io/package/abi-coder

## Recent versions

- 5.0.0 (latest) — 2023-02-21
- 4.1.1 — 2022-10-07
- 4.1.0 — 2022-10-05
- 4.0.0 — 2022-05-19
- 3.1.1 — 2022-05-07
- 3.0.0 — 2022-05-07
- 2.1.0 — 2022-02-14
- 2.0.4 — 2022-02-14
- 2.0.3 — 2022-01-04
- 2.0.2 — 2022-01-04
- 2.0.0 — 2022-01-04
- 1.1.0 — 2022-01-04
- 1.0.0 — 2021-12-29

## README

# ABI Coder

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](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) for more info.

## Example

```ts
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

---
_Source: https://npm.io/package/abi-coder · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
