Web3 module encode and decode EVM in/output.
—
Low-level parameter encoding and decoding operations for individual values and parameter arrays. Supports all Solidity data types including complex structs, arrays, and custom types.
Encodes a parameter based on its type to its ABI representation.
/**
* Encodes a parameter based on its type to its ABI representation
* @param abi - The type of the parameter (Solidity type)
* @param param - The actual parameter to encode
* @returns The ABI encoded parameter
*/
function encodeParameter(abi: AbiInput, param: unknown): string;Usage Examples:
import { encodeParameter } from "web3-eth-abi";
// Encode uint256
const encoded1 = encodeParameter("uint256", "2345675643");
console.log(encoded1);
// 0x000000000000000000000000000000000000000000000000000000008bd02b7b
// Encode bytes32
const encoded2 = encodeParameter("bytes32", "0xdf3234");
console.log(encoded2);
// 0xdf32340000000000000000000000000000000000000000000000000000000000
// Encode dynamic bytes
const encoded3 = encodeParameter("bytes", "0xdf3234");
console.log(encoded3);
// 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003df32340000000000000000000000000000000000000000000000000000000000
// Encode array
const encoded4 = encodeParameter("bytes32[]", ["0xdf3234", "0xfdfd"]);
console.log(encoded4);
// 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002df32340000000000000000000000000000000000000000000000000000000000fdfd000000000000000000000000000000000000000000000000000000000000
// Encode struct
const encoded5 = encodeParameter(
{
ParentStruct: {
propertyOne: "uint256",
propertyTwo: "uint256",
childStruct: {
propertyOne: "uint256",
propertyTwo: "uint256"
}
}
},
{
propertyOne: 42,
propertyTwo: 56,
childStruct: {
propertyOne: 45,
propertyTwo: 78
}
}
);
console.log(encoded5);
// 0x000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004eEncodes multiple parameters based on their types to ABI representation.
/**
* Encodes multiple parameters based on their types to ABI representation
* @param abi - Array of parameter types
* @param params - Array of parameter values to encode
* @returns The ABI encoded parameters
*/
function encodeParameters(
abi: AbiInput[] | ReadonlyArray<AbiInput>,
params: unknown[]
): string;Usage Examples:
import { encodeParameters } from "web3-eth-abi";
// Encode multiple basic types
const encoded1 = encodeParameters(
["uint256", "string"],
["2345675643", "Hello!%"]
);
console.log(encoded1);
// 0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000
// Encode with named parameters
const encoded2 = encodeParameters(
[
{ type: "uint256", name: "myNumber" },
{ type: "string", name: "myString" }
],
["2345675643", "Hello!%"]
);
console.log(encoded2);
// Same output as aboveAutomatically infers parameter types and encodes them. Useful when working with JavaScript values without explicit type definitions.
/**
* Infers parameter types from values and encodes them
* @param params - Array of parameter values to infer types from and encode
* @returns The ABI encoded parameters with inferred types
*/
function inferTypesAndEncodeParameters(params: unknown[]): string;Decodes an ABI encoded parameter to its JavaScript type.
/**
* Decodes an ABI encoded parameter to its JavaScript type
* @param abi - The type of the parameter
* @param bytes - The ABI byte code to decode
* @returns The decoded parameter
*/
function decodeParameter(abi: AbiInput, bytes: HexString): unknown;Usage Examples:
import { decodeParameter } from "web3-eth-abi";
// Decode uint256
const result1 = decodeParameter(
"uint256",
"0x0000000000000000000000000000000000000000000000000000000000000010"
);
console.log(result1); // 16n
// Decode string
const result2 = decodeParameter(
"string",
"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000"
);
console.log(result2); // "Hello!%!"
// Decode struct
const result3 = decodeParameter(
{
ParentStruct: {
propertyOne: "uint256",
propertyTwo: "uint256",
childStruct: {
propertyOne: "uint256",
propertyTwo: "uint256"
}
}
},
"0x000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e"
);
console.log(result3);
// {
// '0': 42n,
// '1': 56n,
// '2': {
// '0': 45n,
// '1': 78n,
// __length__: 2,
// propertyOne: 45n,
// propertyTwo: 78n
// },
// __length__: 3,
// propertyOne: 42n,
// propertyTwo: 56n,
// childStruct: {
// '0': 45n,
// '1': 78n,
// __length__: 2,
// propertyOne: 45n,
// propertyTwo: 78n
// }
// }Decodes ABI encoded parameters to their JavaScript types.
/**
* Decodes ABI encoded parameters to their JavaScript types
* @param abi - Array of parameter types
* @param bytes - The ABI byte code to decode
* @returns Object containing decoded parameters with numeric and named keys
*/
function decodeParameters(
abi: AbiInput[] | ReadonlyArray<AbiInput>,
bytes: HexString
): { [key: string]: unknown; __length__: number };Usage Examples:
import { decodeParameters } from "web3-eth-abi";
// Decode multiple basic types
const result1 = decodeParameters(
["string", "uint256"],
"0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000"
);
console.log(result1);
// { '0': 'Hello!%!', '1': 234n, __length__: 2 }
// Decode with named parameters
const result2 = decodeParameters(
[
{ type: "string", name: "myString" },
{ type: "uint256", name: "myNumber" }
],
"0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000"
);
console.log(result2);
// {
// '0': 'Hello!%!',
// '1': 234n,
// __length__: 2,
// myString: 'Hello!%!',
// myNumber: 234n
// }
// Decode complex structure with array and struct
const result3 = decodeParameters(
[
"uint8[]",
{
ParentStruct: {
propertyOne: "uint256",
propertyTwo: "uint256",
childStruct: {
propertyOne: "uint256",
propertyTwo: "uint256"
}
}
}
],
"0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000018"
);
console.log(result3);
// Complex nested structure with array and structDecodes parameters with optional loose mode for more permissive decoding.
/**
* Decodes parameters with loose mode option
* @param abis - Array of parameter types
* @param bytes - The ABI byte code to decode
* @param loose - Enable loose mode for permissive decoding
* @returns Object containing decoded parameters
*/
function decodeParametersWith(
abis: AbiInput[] | ReadonlyArray<AbiInput>,
bytes: HexString,
loose: boolean
): { [key: string]: unknown; __length__: number };interface AbiInput {
name?: string;
type: string;
indexed?: boolean;
components?: AbiInput[];
}
type HexString = string;Install with Tessl CLI
npx tessl i tessl/npm-web3-eth-abi