Skip to content
On this page

getLogs โ€‹

Returns a list of event logs matching the provided parameters.

Usage โ€‹

By default, getLogs returns all events. In practice, you must use scoping to filter for specific events.

ts
import { publicClient } from './client'

const logs = await publicClient.getLogs()  
// [{ ... }, { ... }, { ... }]
ts
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

export const publicClient = createPublicClient({
  chain: mainnet,
  transport: http()
})

Scoping โ€‹

You can also scope to a set of given attributes.

ts
import { parseAbiItem } from 'viem'
import { publicClient } from './client'

const logs = await publicClient.getLogs({  
  address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
  event: parseAbiItem('event Transfer(address indexed, address indexed, uint256)'),
  args: {
    from: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045',
    to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac'
  },
  fromBlock: 16330000n,
  toBlock: 16330050n
})
ts
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

export const publicClient = createPublicClient({
  chain: mainnet,
  transport: http()
})

By default, event accepts the AbiEvent type:

ts
import { publicClient } from './client'

const filter = await publicClient.getLogs(publicClient, {
  address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
  event: { 
    name: 'Transfer', 
    inputs: [
      { type: 'address', indexed: true, name: 'from' },
      { type: 'address', indexed: true, name: 'to' },
      { type: 'uint256', indexed: false, name: 'value' }
    ] 
  },
  args: {
    from: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045',
    to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac'
  },
  fromBlock: 16330000n,
  toBlock: 16330050n
})
ts
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

export const publicClient = createPublicClient({
  chain: mainnet,
  transport: http()
})

Address โ€‹

A Filter can be scoped to an address:

ts
import { publicClient } from './client'

const filter = await publicClient.getLogs({
  address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2' 
})
ts
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

export const publicClient = createPublicClient({
  chain: mainnet,
  transport: http()
})

Event โ€‹

A Filter can be scoped to an event.

The event argument takes in an event in ABI format โ€“ we have a parseAbiItem utility that you can use to convert from a human-readable event signature โ†’ ABI.

ts
import { parseAbiItem } from 'viem' 
import { publicClient } from './client'

const filter = await publicClient.getLogs({
  address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
  event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'), 
})
ts
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

export const publicClient = createPublicClient({
  chain: mainnet,
  transport: http()
})

Arguments โ€‹

A Filter can be scoped to given indexed arguments:

ts
const filter = await publicClient.getLogs({
  address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
  event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'),
  args: { 
    from: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045',
    to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac'
  }
})

Only indexed arguments in event are candidates for args.

A Filter Argument can also be an array to indicate that other values can exist in the position:

ts
const filter = await publicClient.getLogs({
  address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
  event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'),
  args: { 
    // '0xd8da...' OR '0xa5cc...' OR '0xa152...'
    from: [
      '0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 
      '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',
      '0xa152f8bb749c55e9943a3a0a3111d18ee2b3f94e',
    ],
  }
})

Block Range โ€‹

A Filter can be scoped to a block range:

ts
const filter = await publicClient.getLogs({
  address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
  event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'),
  fromBlock: 16330000n, 
  toBlock: 16330050n 
})

Returns โ€‹

Log[]

A list of event logs.

Parameters โ€‹

address โ€‹

A contract address or a list of contract addresses. Only logs originating from the contract(s) will be included in the result.

ts
const logs = await publicClient.getLogs({
  address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', 
})

event โ€‹

The event in ABI format.

A parseAbiItem utility is exported from viem that converts from a human-readable event signature โ†’ ABI.

ts
const logs = await publicClient.getLogs({
  event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'), 
})

args โ€‹

  • Type: Inferred.

A list of indexed event arguments.

ts
const logs = await publicClient.getLogs({
  event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'),
  args: { 
    from: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045',
    to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac'
  },
})

fromBlock โ€‹

  • Type: bigint | 'latest' | 'earliest' | 'pending' | 'safe' | 'finalized'

Block to start including logs from. Mutually exclusive with blockHash.

ts
const filter = await publicClient.createEventFilter({
  fromBlock: 69420n 
})

toBlock โ€‹

  • Type: bigint | 'latest' | 'earliest' | 'pending' | 'safe' | 'finalized'

Block to stop including logs from. Mutually exclusive with blockHash.

ts
const filter = await publicClient.createEventFilter({
  toBlock: 70120n 
})

blockHash โ€‹

  • Type: '0x${string}'

Block hash to include logs from. Mutually exclusive with fromBlock/toBlock.

ts
const logs = await publicClient.getLogs({
  blockHash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d' 
})

Live Example โ€‹

Check out the usage of getLogs in the live Event Logs Example below.

JSON-RPC Method โ€‹

eth_getLogs

Released under the MIT License.