> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sqd.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Event logs

> Subscribe to EVM event log data with addLog() — filter by contract address, topic, and signature for efficient EVM event indexing.

#### `addLog(options)`

Get event logs emitted by some *or all* contracts in the network. `options` has the following structure:

```typescript theme={"system"}
{
  // data requests
  address?: string[]
  topic0?: string[]
  topic1?: string[]
  topic2?: string[]
  topic3?: string[]
  range?: {from: number, to?: number}

  // related data retrieval
  transaction?: boolean
  transactionLogs?: boolean
  transactionTraces?: boolean
}
```

Data requests:

* `address`: the set of addresses of contracts emitting the logs. Omit to subscribe to events from all contracts in the network.
* `topicN`: the set of values of topicN.
* `range`: the range of blocks to consider.

Related data retrieval:

* `transaction = true`: the processor will retrieve all parent transactions and add them to the `transactions` iterable within the [block data](/en/sdk/squid-sdk/reference/processors/evm-batch/context-interfaces). Additionally it will expose them via the `.transaction` field of each log item.
* `transactionLogs = true`: the processor will retrieve all "sibling" logs, that is, all logs emitted by transactions that emitted at least one matching log. The logs will be exposed through the regular `logs` block data iterable and via `.transaction.logs` for matching logs.
* `transactionTraces = true`: the processor will retrieve the traces for all transactions that emitted at least one matching log. The traces will be exposed through the regular `traces` block data iterable and via `.transaction.traces`.

Note that logs can also be requested by [`addTransaction()`](/en/sdk/squid-sdk/reference/processors/evm-batch/transactions) and [`addTrace()`](/en/sdk/squid-sdk/reference/processors/evm-batch/traces) method as related data.

Selection of the exact data to be retrieved for each log and its optional parent transaction is done with the `setFields()` method documented on the [Field selection](/en/sdk/squid-sdk/reference/processors/evm-batch/field-selection) page. Some examples are available below.

## Examples

1. Fetch `NewGravatar(uint256,address,string,string)` and `UpdateGravatar(uint256,address,string,string)` event logs emitted by `0x2E645469f354BB4F5c8a05B3b30A929361cf77eC`. For each log, fetch topic set, log data. Fetch parent transactions with their inputs.

```ts theme={"system"}
const processor = new EvmBatchProcessor()
  .setGateway('https://v2.archive.subsquid.io/network/ethereum-mainnet')
  .setRpcEndpoint('<my_eth_rpc_url>')
  .setFinalityConfirmation(75)
  .addLog({
    address: ['0x2e645469f354bb4f5c8a05b3b30a929361cf77ec'],
    topic0: [
      // topic: 'NewGravatar(uint256,address,string,string)'
      '0x9ab3aefb2ba6dc12910ac1bce4692cf5c3c0d06cff16327c64a3ef78228b130b',
      // topic: 'UpdatedGravatar(uint256,address,string,string)'
      '0x76571b7a897a1509c641587568218a290018fbdc8b9a724f17b77ff0eec22c0c',
    ],
    transaction: true
  })
  .setFields({
    log: {
      topics: true,
      data: true
    },
    transaction: {
      input: true
    }
  })
```

<Tip>
  Typescript ABI modules generated by [`squid-evm-typegen`](/en/sdk/squid-sdk/resources/tools/typegen/state-queries) provide event signatures/topic0 values as constants, e.g.

  ```ts theme={"system"}
    import * as gravatarAbi from './abi/gravatar'
    // ...
      topic0: [
        gravatarAbi.events.NewGravatar.topic,
        gravatarAbi.events.UpdatedGravatar.topic,
      ],
    // ...
  ```
</Tip>

2. Fetch every `Transfer(address,address,uint256)` event on Ethereum mainnet where *topic2* is set to the destination address (a common but [non-standard](https://eips.ethereum.org/EIPS/eip-20) practice) and the destination is `vitalik.eth` a.k.a. `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045`. For each log, fetch transaction hash.

```ts theme={"system"}
const processor = new EvmBatchProcessor()
  .setGateway('https://v2.archive.subsquid.io/network/ethereum-mainnet')
  .setRpcEndpoint('<my_eth_rpc_url>')
  .setFinalityConfirmation(75)
  .addLog({
    topic0: [
      // topic0: 'Transfer(address,address,uint256)'
      '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
    ],
    topic2: [
      // vitalik.eth
      '0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045'
    ]
  })
  .setFields({
    log: {
      transactionHash: true
    }
  })
```

<Tip>
  As you may observe, the address in the `topic2` is a bit longer than usual (`0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045`, 42 chars).
  This is caused by the fact that Squid SDK expects `Bytes32[]`; therefore, the length has to be 66 chars long.
  The possible quick fix is to pad the original address with zeros and prepend `0x`.

  ```ts theme={"system"}
    const address = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
    const topic = '0x' + address.replace('x', '0').padStart(64, '0').toLowerCase()
  ```
</Tip>
