ABI Utilities
Functions for parsing, categorizing, and querying Solidity contract ABIs. These utilities are used internally by the codegen pipeline and can also be used directly for custom tooling.
import {
categorizeAbi,
getReadFunctions,
getWriteFunctions,
getEvents,
formatFunctionName,
} from '@web3marketlabs/sdk'categorizeAbi(abi)
Splits a complete ABI into four categories: read functions, write functions, events, and errors.
function categorizeAbi(abi: Abi): CategorizedAbiParameters
| Parameter | Type | Description |
|---|---|---|
abi | Abi (from Viem) | A Solidity contract ABI array |
Returns
interface CategorizedAbi {
/** View and pure functions (state-reading) */
reads: AbiFunction[]
/** Nonpayable and payable functions (state-mutating) */
writes: AbiFunction[]
/** Event definitions */
events: AbiEvent[]
/** Error definitions */
errors: AbiErrorItem[]
}Categorization Rules
| ABI Item Type | stateMutability | Category |
|---|---|---|
function | view or pure | reads |
function | nonpayable or payable | writes |
event | — | events |
error | — | errors |
constructor | — | Ignored |
fallback | — | Ignored |
receive | — | Ignored |
Example
import { categorizeAbi } from '@web3marketlabs/sdk'
const abi = [
{ type: 'function', name: 'balanceOf', stateMutability: 'view', inputs: [...], outputs: [...] },
{ type: 'function', name: 'transfer', stateMutability: 'nonpayable', inputs: [...], outputs: [...] },
{ type: 'event', name: 'Transfer', inputs: [...] },
{ type: 'error', name: 'InsufficientBalance', inputs: [...] },
{ type: 'constructor', inputs: [...] },
]
const { reads, writes, events, errors } = categorizeAbi(abi)
// reads: [{ name: 'balanceOf', ... }]
// writes: [{ name: 'transfer', ... }]
// events: [{ name: 'Transfer', ... }]
// errors: [{ name: 'InsufficientBalance', ... }]getReadFunctions(abi)
Extracts all view and pure (read-only) functions from an ABI.
function getReadFunctions(abi: Abi): AbiFunction[]Returns only ABI items where type === 'function' and stateMutability is 'view' or 'pure'.
import { getReadFunctions } from '@web3marketlabs/sdk'
const reads = getReadFunctions(abi)
// [{ name: 'balanceOf', stateMutability: 'view', ... }, ...]getWriteFunctions(abi)
Extracts all state-mutating functions from an ABI.
function getWriteFunctions(abi: Abi): AbiFunction[]Returns only ABI items where type === 'function' and stateMutability is 'nonpayable' or 'payable'.
import { getWriteFunctions } from '@web3marketlabs/sdk'
const writes = getWriteFunctions(abi)
// [{ name: 'transfer', stateMutability: 'nonpayable', ... }, ...]getEvents(abi)
Extracts all event definitions from an ABI.
function getEvents(abi: Abi): AbiEvent[]Returns only ABI items where type === 'event'.
import { getEvents } from '@web3marketlabs/sdk'
const events = getEvents(abi)
// [{ name: 'Transfer', inputs: [...], ... }, ...]formatFunctionName(name)
Converts a Solidity function name to PascalCase. This is used internally by the codegen pipeline to generate React hook names (e.g., useReadToken + BalanceOf).
function formatFunctionName(name: string): stringThe function splits on camelCase boundaries and underscores, then capitalizes each word.
Examples
import { formatFunctionName } from '@web3marketlabs/sdk'
formatFunctionName('balanceOf') // 'BalanceOf'
formatFunctionName('totalSupply') // 'TotalSupply'
formatFunctionName('name') // 'Name'
formatFunctionName('get_value') // 'GetValue'Types
All types used by these utilities come from Viem:
import type { Abi, AbiFunction, AbiEvent } from 'viem'The AbiErrorItem type is extracted from the Abi union internally:
type AbiErrorItem = Extract<Abi[number], { type: 'error' }>Source
Defined in @web3marketlabs/sdk — src/abi.ts.