> ## 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.

# evmDecoder

> Decode smart contract events as a pipe

See the [Handling contract events](../../guides/basic-development/handling-events) guide for usage examples and event specification routes.

## evmDecoder

Returns a query-transformer combo that instructs the [source](../basic-components/source) to fetch and decode smart contract event logs.

```ts theme={"system"}
evmDecoder<T>(config: EvmDecoderConfig<T>): Transformer
```

**Parameters:**

* `range`: Block range `{ from: number | 'latest', to?: number }` (required)
* `contracts`: Array of contract addresses or a [factory](./factory) (optional — omit to receive events from all contracts)
* `events`: Map of event names to ABI event objects or `{ event, params }` filter objects (required)
* `profiler`: Profiler config shard for labeling the transformer in profiling data `{ name: string }` (optional)
* `onError`: Error handler (optional)

**Example:**

```ts theme={"system"}
import { evmDecoder, commonAbis } from "@subsquid/pipes/evm";

const decoder = evmDecoder({
  range: { from: 20000000, to: 20100000 },
  contracts: ["0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"],
  events: {
    transfer: commonAbis.erc20.events.Transfer,
  },
});

await evmPortalSource({
  portal: "https://portal.sqd.dev/datasets/ethereum-mainnet",
  outputs: decoder,
}).pipeTo(target);
```

## Decoded event structure

Each entry in the output arrays is a `DecodedEvent` object:

| Field       | Type                               | Description                                                                                                        |
| ----------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `event`     | decoded event type                 | Decoded event data fields                                                                                          |
| `contract`  | `string`                           | Address of the contract that emitted the event                                                                     |
| `block`     | `{ number: number, hash: string }` | Block number and hash                                                                                              |
| `timestamp` | `Date`                             | Block timestamp                                                                                                    |
| `rawEvent`  | `Log`                              | Raw log with `address`, `topics`, `data`, `transactionHash`, `logIndex`, `transactionIndex`                        |
| `factory`   | `{ contract, blockNumber, event }` | Present only when using a [factory](./factory); carries the factory deployment event that discovered this contract |

## commonAbis

```ts theme={"system"}
import { commonAbis } from '@subsquid/pipes/evm'
```

`commonAbis` is a built-in collection of typed ABI modules. See the [Handling contract events guide](../../guides/basic-development/handling-events#commonabis) for usage examples.

### commonAbis.erc20

**Events:**

|                                    | Signature                                                                 |
| ---------------------------------- | ------------------------------------------------------------------------- |
| `commonAbis.erc20.events.Transfer` | `Transfer(address indexed from, address indexed to, uint256 value)`       |
| `commonAbis.erc20.events.Approval` | `Approval(address indexed owner, address indexed spender, uint256 value)` |

**Functions:**

|                                           | Signature                                                         |
| ----------------------------------------- | ----------------------------------------------------------------- |
| `commonAbis.erc20.functions.name`         | `name() → string`                                                 |
| `commonAbis.erc20.functions.symbol`       | `symbol() → string`                                               |
| `commonAbis.erc20.functions.decimals`     | `decimals() → uint8`                                              |
| `commonAbis.erc20.functions.totalSupply`  | `totalSupply() → uint256`                                         |
| `commonAbis.erc20.functions.balanceOf`    | `balanceOf(address _owner) → uint256`                             |
| `commonAbis.erc20.functions.allowance`    | `allowance(address _owner, address _spender) → uint256`           |
| `commonAbis.erc20.functions.transfer`     | `transfer(address _to, uint256 _value) → bool`                    |
| `commonAbis.erc20.functions.approve`      | `approve(address _spender, uint256 _value) → bool`                |
| `commonAbis.erc20.functions.transferFrom` | `transferFrom(address _from, address _to, uint256 _value) → bool` |
