decodeAbiParameters
Decodes ABI encoded data using the ABI specification, given a set of ABI parameters (inputs
/outputs
) and the encoded ABI data.
The decodeAbiParameters
function is used by the other contract decoding utilities (ie. decodeFunctionData
, decodeEventLog
, etc).
Install
ts
import { decodeAbiParameters } from 'viem'
import { decodeAbiParameters } from 'viem'
Usage
The decodeAbiParameters
function takes in two parameters:
- a set of ABI Parameters (
params
), that can be in the shape of theinputs
oroutputs
attribute of an ABI Item. - the ABI encoded data (
data
) that correspond to the givenparams
.
ts
import { decodeAbiParameters } from 'viem'
const values = decodeAbiParameters(
[
{ name: 'x', type: 'string' },
{ name: 'y', type: 'uint' },
{ name: 'z', type: 'bool' }
],
'0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',
)
// ['wagmi', 420n, true]
import { decodeAbiParameters } from 'viem'
const values = decodeAbiParameters(
[
{ name: 'x', type: 'string' },
{ name: 'y', type: 'uint' },
{ name: 'z', type: 'bool' }
],
'0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',
)
// ['wagmi', 420n, true]
Human Readable
You can also pass in Human Readable parameters with the parseAbiParameters
utility.
ts
import { decodeAbiParameters, parseAbiParameters } from 'viem'
const values = decodeAbiParameters(
parseAbiParameters('string x, uint y, bool z'),
'0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000'
)
// ['wagmi', 420n, true]
import { decodeAbiParameters, parseAbiParameters } from 'viem'
const values = decodeAbiParameters(
parseAbiParameters('string x, uint y, bool z'),
'0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000'
)
// ['wagmi', 420n, true]
Return Value
The decoded data. Type is inferred from the ABI.
Parameters
params
- Type:
AbiParameter[]
The set of ABI parameters to decode against data
, in the shape of the inputs
or outputs
attribute of an ABI event/function.
These parameters must include valid ABI types.
ts
const values = decodeAbiParameters(
[{ name: 'x', type: 'uint32' }],
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
)
const values = decodeAbiParameters(
[{ name: 'x', type: 'uint32' }],
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
)
data
- Type:
Hex
The ABI encoded data.
ts
const values = decodeAbiParameters(
[{ name: 'x', type: 'uint32' }],
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
)
const values = decodeAbiParameters(
[{ name: 'x', type: 'uint32' }],
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
)
More Examples
Simple struct
ts
import { abi } from './abi'
const values = decodeAbiParameters(
abi[0].outputs,
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
)
// { x: 420n, y: true, z: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC' }
import { abi } from './abi'
const values = decodeAbiParameters(
abi[0].outputs,
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
)
// { x: 420n, y: true, z: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC' }
ts
export const abi = [
{
name: 'staticStruct',
outputs: [
{
components: [
{
name: 'x',
type: 'uint256',
},
{
name: 'y',
type: 'bool',
},
{
name: 'z',
type: 'address',
},
],
name: 'foo',
type: 'tuple',
},
],
}
] as const
export const abi = [
{
name: 'staticStruct',
outputs: [
{
components: [
{
name: 'x',
type: 'uint256',
},
{
name: 'y',
type: 'bool',
},
{
name: 'z',
type: 'address',
},
],
name: 'foo',
type: 'tuple',
},
],
}
] as const
solidity
contract Example {
struct Foo {
uint256 x;
bool y;
address z;
}
function staticStruct(...) returns (Foo calldata foo) {
...
return foo;
}
}
contract Example {
struct Foo {
uint256 x;
bool y;
address z;
}
function staticStruct(...) returns (Foo calldata foo) {
...
return foo;
}
}