Skip to content

AbiEvent.encode

ABI-encodes the provided event input (inputs) into an array of Event Topics.

Imports

Named
import { AbiEvent } from 'ox'

Examples

import { AbiEvent } from 'ox'
 
const transfer = AbiEvent.from(
  'event Transfer(address indexed from, address indexed to, uint256 value)'
)
 
const { topics } = AbiEvent.encode(transfer)
['0x406dade31f7ae4b5dbc276258c28dde5ae6d5c2773c5745802c493a2360e55e0']

Passing Arguments

You can pass indexed parameter values to AbiEvent.encode.

TypeScript types will be inferred from the ABI Event, to guard you from inserting the wrong values.

For example, the Transfer event below accepts an address type for the from and to attributes.

import { AbiEvent } from 'ox'
 
const transfer = AbiEvent.from(
  'event Transfer(address indexed from, address indexed to, uint256 value)'
)
 
const { topics } = AbiEvent.encode(transfer, {
  from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', 
  to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8'
})
[
'0x406dade31f7ae4b5dbc276258c28dde5ae6d5c2773c5745802c493a2360e55e0',
'0x00000000000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266',
'0x0000000000000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8'
]

ABI-shorthand

You can also specify an entire ABI object and an event name as parameters to AbiEvent.encode:

import { Abi, AbiEvent } from 'ox'
 
const abi = Abi.from([...])
 
const { topics } = AbiEvent.encode(
  abi,
  'Transfer',
  {
    from: '0xf39fd6e51aad88f6f4ce6ab882779cfffb92266', 
    to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
  }
)
[
'0x406dade31f7ae4b5dbc276258c28dde5ae6d5c2773c5745802c493a2360e55e0',
'0x00000000000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266',
'0x0000000000000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8'
]

End-to-end

Below is an end-to-end example of using AbiEvent.encode to encode the topics of a Transfer event and query for events matching the encoded topics on the Wagmi Mint Example contract.

import 'ox/window'
import { AbiEvent, Hex } from 'ox'
 
// 1. Instantiate the `Transfer` ABI Event.
const transfer = AbiEvent.from(
  'event Transfer(address indexed from, address indexed to, uint256 value)',
)
 
// 2. Encode the ABI Event into Event Topics.
const { topics } = AbiEvent.encode(transfer)
 
// 3. Query for events matching the encoded Topics.
const logs = await window.ethereum!.request({
  method: 'eth_getLogs',
  params: [
    {
      address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',
      fromBlock: Hex.fromNumber(19760235n),
      toBlock: Hex.fromNumber(19760240n),
      topics,
    },
  ],
})
[
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1",
"0x000000000000000000000000000000000000000000000000000000000000025b",
]

Definition

function encode<abi, name, args, abiEvent, allNames>(
  abi: abi | Abi.Abi | readonly unknown[],
  name: Hex.Hex | (name extends allNames ? name : never),
  [args]: encode.Args<abiEvent>,
): encode.ReturnType

Source: src/core/AbiEvent.ts

Parameters

abi

  • Type: abi | Abi.Abi | readonly unknown[]

name

  • Type: Hex.Hex | (name extends allNames ? name : never)

[args]

  • Type: encode.Args<abiEvent>

Return Type

The encoded event topics.

encode.ReturnType