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

# EventLog.matchesAddress

> Check if log matches address filter

<Card title="Try it Live" icon="play" href="https://playground.tevm.sh?example=primitives/event-log.ts">
  Run EventLog examples in the interactive playground
</Card>

<Tabs />

## Filter Semantics

### Single Address

Checks exact address equality using constant-time comparison:

```typescript theme={null}
import { EventLog, Address } from 'tevm';

const usdcAddress = Address('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48');

// Filter logs from USDC contract
const usdcLogs = allLogs.filter(log => log.matchesAddress(usdcAddress));

console.log(`Found ${usdcLogs.length} USDC logs`);
```

### Multiple Addresses (OR Logic)

Matches if log address equals ANY of the filter addresses:

```typescript theme={null}
import { EventLog, Address } from 'tevm';

const stablecoins = [
  Address('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), // USDC
  Address('0x6B175474E89094C44Da98b954EedeAC495271d0F'), // DAI
  Address('0xdAC17F958D2ee523a2206206994597C13D831ec7'), // USDT
];

// Filter logs from any stablecoin
const stablecoinLogs = allLogs.filter(log =>
  log.matchesAddress(stablecoins)
);

console.log(`Found ${stablecoinLogs.length} stablecoin logs`);
```

## Usage Patterns

### Filtering Single Contract

```typescript theme={null}
import { EventLog, Address } from 'tevm';

const wethAddress = Address('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2');

// Get all WETH logs
const wethLogs = allLogs.filter(log => log.matchesAddress(wethAddress));

// Process WETH events
for (const log of wethLogs) {
  const sig = log.getTopic0();
  // ... decode event
}
```

### Multi-Contract Monitoring

```typescript theme={null}
import { EventLog, Address } from 'tevm';

// Monitor multiple DEX contracts
const dexContracts = [
  Address('0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'), // Uniswap V2
  Address('0xE592427A0AEce92De3Edee1F18E0157C05861564'), // Uniswap V3
  Address('0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F'), // Sushiswap
];

const dexLogs = allLogs.filter(log => log.matchesAddress(dexContracts));

console.log(`Found ${dexLogs.length} DEX logs across ${dexContracts.length} contracts`);
```

### Token Portfolio Tracking

```typescript theme={null}
import { EventLog, Address } from 'tevm';

// User's token portfolio
const portfolio = [
  Address('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'), // USDC
  Address('0x6B175474E89094C44Da98b954EedeAC495271d0F'), // DAI
  Address('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), // WETH
  Address('0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599'), // WBTC
];

// Get all events from portfolio tokens
const portfolioLogs = allLogs.filter(log => log.matchesAddress(portfolio));

// Group by contract
const byContract = new Map();
for (const log of portfolioLogs) {
  const addr = Address.toHex(log.address);
  if (!byContract.has(addr)) {
    byContract.set(addr, []);
  }
  byContract.get(addr).push(log);
}

console.log('Events per token:', byContract.size);
```

### Excluding Specific Contracts

```typescript theme={null}
import { EventLog, Address } from 'tevm';

const excludedContract = Address('0x...');

// Filter OUT logs from specific contract
const filtered = allLogs.filter(log => !log.matchesAddress(excludedContract));
```

### Combining with Topic Filters

```typescript theme={null}
import { EventLog, Address, Hash } from 'tevm';

const TRANSFER_SIG = Hash('0xddf252ad...');
const tokens = [usdcAddress, daiAddress, wethAddress];

// Transfer events from any of these tokens
const transfers = allLogs.filter(log =>
  log.matchesAddress(tokens) &&
  log.matchesTopics([TRANSFER_SIG])
);

console.log(`Found ${transfers.length} transfers`);
```

## Performance

Uses constant-time address comparison to prevent timing attacks:

```typescript theme={null}
import { EventLog } from 'tevm';

// Comparison time doesn't leak whether addresses match
const matches = log.matchesAddress(targetAddress);

// Safe for filtering sensitive addresses
const sensitiveAddresses = [userWallet, exchangeAddress];
const sensitiveL ogs = allLogs.filter(log =>
  log.matchesAddress(sensitiveAddresses)
);
```

### Batch Filtering

For large log arrays, use `filterLogs` for optimized batch filtering:

```typescript theme={null}
import { EventLog } from 'tevm';

// Efficient: Uses optimized internal filtering
const filtered = EventLog.filterLogs(allLogs, {
  address: [usdc, dai, weth],
});

// Less efficient: Filters in JavaScript loop
const filtered2 = allLogs.filter(log =>
  log.matchesAddress([usdc, dai, weth])
);
```

## See Also

* [matchesTopics](/primitives/eventlog/matchestopics) - Filter by topics
* [matchesFilter](/primitives/eventlog/matchesfilter) - Complete filter matching
* [filterLogs](/primitives/eventlog/filterlogs) - Batch filtering with optimization
* [Address](/primitives/address) - Address primitive documentation
