Skip to main content

Overview

Event.getSelector returns the keccak256 hash of the event signature. This value is used as topic0 for non-anonymous events.

Quick Start

import { Abi } from '@tevm/voltaire/Abi';
import { Hex } from '@tevm/voltaire/Hex';

const Transfer = {
  type: 'event',
  name: 'Transfer',
  inputs: [
    { type: 'address', name: 'from', indexed: true },
    { type: 'address', name: 'to', indexed: true },
    { type: 'uint256', name: 'value' }
  ]
} as const;

const topic0 = Abi.Event.getSelector(Transfer);
const topicHex = Hex.fromBytes(topic0);

Use in Log Filters

const logs = await provider.getLogs({
  address: tokenAddress,
  topics: [Hex.fromBytes(Abi.Event.getSelector(Transfer))]
});

Multiple Event Types

const Approval = {
  type: 'event',
  name: 'Approval',
  inputs: [
    { type: 'address', name: 'owner', indexed: true },
    { type: 'address', name: 'spender', indexed: true },
    { type: 'uint256', name: 'value' }
  ]
} as const;

const topics = [[
  Hex.fromBytes(Abi.Event.getSelector(Transfer)),
  Hex.fromBytes(Abi.Event.getSelector(Approval))
]];

const logs = await provider.getLogs({ address: tokenAddress, topics });

Anonymous Events

Anonymous events do not include topic0. You should not filter on a selector for anonymous events.

See Also