https://github.com/findeth/abi
A zero-dependencies Solidity ABI encoder and decoder
https://github.com/findeth/abi
abi decoder encoder ethereum findeth hacktoberfest library solidity solidity-abi
Last synced: over 1 year ago
JSON representation
A zero-dependencies Solidity ABI encoder and decoder
- Host: GitHub
- URL: https://github.com/findeth/abi
- Owner: FindETH
- License: mit
- Created: 2020-06-04T18:58:11.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2023-01-06T07:55:33.000Z (over 3 years ago)
- Last Synced: 2024-03-23T19:21:37.175Z (over 2 years ago)
- Topics: abi, decoder, encoder, ethereum, findeth, hacktoberfest, library, solidity, solidity-abi
- Language: TypeScript
- Homepage: https://findeth.github.io/abi/
- Size: 1.31 MB
- Stars: 4
- Watchers: 3
- Forks: 3
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# `@findeth/abi`
  [](https://github.com/FindETH/abi/actions) [](https://codecov.io/gh/FindETH/abi)
`@findeth/abi` is a zero-dependencies ABI encoder and decoder library for FindETH. It supports both Node.js and web browsers. **This library is experimental**, and may not work with all contract interfaces. It is used in the FindETH applications, that can be found here:
- [Web](https://github.com/FindETH/web)
Currently, most types (except fixed-point numbers (`fixedx`), and fixed-length arrays `type`) are supported.
**Note**: This is a work-in-progress version of FindETH, and is **not** production-ready. For the current version of FindETH, please refer to [this repository](https://github.com/Mrtenz/FindETH/tree/master). The public API _may_ change in minor releases below 1.0.0 (though this is unlikely).
---
## Installation
You can install `@findeth/abi` with Yarn (recommended) or NPM:
```
$ yarn add @findeth/abi
```
```
$ npm install @findeth/abi
```
**Note**: If you are using TypeScript, `@findeth/abi` requires TypeScript 4.1 or newer. This is used for automatically inferring the types of the input and output, based on the specified `types`.
## Getting Started
You can use the `encode` and `decode` functions to encode and decode ABI respectively.
### Encode
The encode function takes an array of ABI types (e.g., `["string", "uint256"]`) and an array of values to encode. For example:
```ts
import { encode, toHex } from "@findeth/abi";
const buffer = encode(["string", "uint256"], ["foo bar", 12345]);
console.log(toHex(buffer));
// 000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000030390000000000000000000000000000000000000000000000000000000000000007666f6f2062617200000000000000000000000000000000000000000000000000
```
### Decode
The decode function takes an array of ABI types, and a buffer (`Uint8Array`) to decode. Note that Node.js `Buffer`s are compatible with `Uint8Array`, but in order to maintain full compatibility with web browsers (without the need for polyfills), this library does not use `Buffer`. Example:
```ts
import { decode, fromHex } from "@findeth/abi";
const value = fromHex("000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000030390000000000000000000000000000000000000000000000000000000000000007666f6f2062617200000000000000000000000000000000000000000000000000");
console.log(decode(["string", "uint256"], value));
// ["foo bar", 12345n]
```
## Development
Install dependencies with `yarn`:
```
$ yarn
```
To run automated tests, use the `test` script:
```
$ yarn test
```
To build the library, use the `build` script:
```
$ yarn build
```