Skip to main content
import * as Abi from 'voltaire-effect/primitives/Abi'
import { Effect } from 'effect'

const calldata = await Effect.runPromise(
  Abi.encodeFunctionData(abi, 'transfer', [to, amount])
)

Core Encoding

encode(abi, name, args) — Encodes function call data by name. Returns Effect<Uint8Array, AbiItemNotFoundError | AbiEncodingError>. encodePacked(types, values) — Compact encoding without padding. Returns Effect<HexType, AbiParameterMismatchError | AbiEncodingError>. encodeWrappedError(wrappedError) — Encodes ERC-7751 wrapped error. Returns Effect<Uint8Array, AbiEncodingError>.

Core Decoding

decode(abi, name, data) — Decodes function return values by name. Returns Effect<readonly unknown[], AbiItemNotFoundError | AbiDecodingError>. decodeData(abi, data) — Decodes calldata to { functionName, args }. Returns Effect<{ functionName: string; args: readonly unknown[] }, AbiItemNotFoundError | AbiInvalidSelectorError | AbiDecodingError>. decodeLog(abi, log) — Decodes log to { event, params }. Returns Effect<{ event: string; params: Record<string, unknown> }, AbiItemNotFoundError | AbiDecodingError>. decodeWrappedError(data) — Decodes ERC-7751 wrapped error. Returns Effect<WrappedErrorResult, AbiDecodingError | AbiInvalidSelectorError>.

Function Operations

encodeFunctionData(abi, name, args) — Encodes function call. Returns Effect<HexType, AbiItemNotFoundError | AbiEncodingError>. decodeFunctionData(abi, data) — Decodes calldata to { name, params }. decodeFunctionResult(abi, name, data) — Decodes return data. encodeFunction(abi, name, args) — Encodes function call as hex. decodeFunction(abi, data) — Decodes calldata.

Event Operations

decodeEventLog(abi, log) — Decodes event log to { event, params }. encodeEventLog(event, args) — Encodes event log topics and data. parseLogs(abi, logs) — Parses multiple logs, filtering unmatched. Returns Effect<readonly ParsedLog[], never>.

Lookup Functions

getFunction(abi, name) — Retrieves function definition. getEvent(abi, name) — Retrieves event definition. findFunction(abi, name) — Finds function or returns null. findEvent(abi, name) — Finds event or returns null. findError(abi, name) — Finds error definition or returns null.

Selector Analysis

findSelectorCollisions(abi) — Finds selector collisions. Returns Effect<readonly SelectorCollision[], never>. hasSelectorCollisions(abi) — Checks for collisions. Returns Effect<boolean, never>. getSelector(item) — Gets 4-byte selector for function/error.

Signatures

getFunctionSignature(fn) — Gets function signature string. getEventSignature(event) — Gets event signature string. getErrorSignature(error) — Gets error signature string.

Parsing

parse(signatures) — Parses human-readable ABI signatures. parseItem(signature) — Parses single ABI item signature.

Formatting

format(item) — Formats ABI item as signature string. formatWithArgs(item, args) — Formats with argument values.
const abi = [{
  type: 'function',
  name: 'transfer',
  inputs: [
    { name: 'to', type: 'address' },
    { name: 'amount', type: 'uint256' }
  ]
}]

// Decode function call
const { name, params } = await Effect.runPromise(
  Abi.decodeFunctionData(abi, '0xa9059cbb...')
)

// Encode packed for hashing
const packed = await Effect.runPromise(
  Abi.encodePacked(['address', 'uint256'], [address, amount])
)

// Check for selector collisions
const hasCollisions = await Effect.runPromise(
  Abi.hasSelectorCollisions(abi)
)

Errors

  • AbiItemNotFoundError — Function/event not in ABI
  • AbiEncodingError — Encoding failed
  • AbiDecodingError — Decoding failed
  • AbiInvalidSelectorError — Selector mismatch
  • AbiParameterMismatchError — Type/value count mismatch