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): CategorizedAbi

Parameters

ParameterTypeDescription
abiAbi (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 TypestateMutabilityCategory
functionview or purereads
functionnonpayable or payablewrites
eventevents
errorerrors
constructorIgnored
fallbackIgnored
receiveIgnored

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): string

The 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/sdksrc/abi.ts.