281 lines
5.8 KiB
Markdown
281 lines
5.8 KiB
Markdown
# HyperIndex Configuration Reference
|
|
|
|
Complete reference for `config.yaml` options.
|
|
|
|
## Basic Structure
|
|
|
|
```yaml
|
|
# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
|
|
name: indexer-name
|
|
|
|
# Global options
|
|
preload_handlers: true # Enable preload optimizations
|
|
unordered_multichain_mode: true # For multichain indexing
|
|
|
|
networks:
|
|
- id: 1 # Chain ID
|
|
start_block: 12345678
|
|
contracts:
|
|
- name: ContractName
|
|
address: 0x...
|
|
handler: src/EventHandlers.ts
|
|
events:
|
|
- event: EventSignature(...)
|
|
```
|
|
|
|
## Network Configuration
|
|
|
|
### start_block
|
|
|
|
The `start_block` field specifies where indexing begins.
|
|
|
|
**With HyperSync (default):** Setting `start_block: 0` is perfectly fine. HyperSync is extremely fast and can sync millions of blocks in minutes, so there's no performance penalty for starting from genesis.
|
|
|
|
**With RPC:** If using RPC as the data source (for unsupported networks), consider setting `start_block` to the contract deployment block to avoid slow sync times.
|
|
|
|
```yaml
|
|
networks:
|
|
- id: 1
|
|
start_block: 0 # Fine with HyperSync - it's fast!
|
|
contracts:
|
|
- name: MyContract
|
|
address: 0xContractAddress
|
|
```
|
|
|
|
### Single Network
|
|
|
|
```yaml
|
|
networks:
|
|
- id: 1
|
|
start_block: 0
|
|
contracts:
|
|
- name: MyContract
|
|
address: 0xContractAddress
|
|
handler: src/EventHandlers.ts
|
|
events:
|
|
- event: Transfer(address indexed from, address indexed to, uint256 value)
|
|
```
|
|
|
|
### Multiple Networks (Multichain)
|
|
|
|
```yaml
|
|
# Global contract definitions
|
|
contracts:
|
|
- name: Factory
|
|
handler: src/factory.ts
|
|
events:
|
|
- event: ContractCreated(address indexed contract, address indexed token)
|
|
|
|
networks:
|
|
- id: 1 # Ethereum
|
|
start_block: 12345678
|
|
contracts:
|
|
- name: Factory
|
|
address:
|
|
- 0xFactoryAddress1
|
|
- id: 10 # Optimism
|
|
start_block: 98765432
|
|
contracts:
|
|
- name: Factory
|
|
address:
|
|
- 0xFactoryAddress2
|
|
```
|
|
|
|
**Important:** When using multichain, define handlers and events in global `contracts` section. Network sections only specify addresses.
|
|
|
|
## Contract Configuration
|
|
|
|
### Single Address
|
|
|
|
```yaml
|
|
contracts:
|
|
- name: MyContract
|
|
address: 0xContractAddress
|
|
handler: src/EventHandlers.ts
|
|
events:
|
|
- event: Transfer(...)
|
|
```
|
|
|
|
### Multiple Addresses
|
|
|
|
```yaml
|
|
contracts:
|
|
- name: MyContract
|
|
address:
|
|
- 0xAddress1
|
|
- 0xAddress2
|
|
- 0xAddress3
|
|
handler: src/EventHandlers.ts
|
|
events:
|
|
- event: Transfer(...)
|
|
```
|
|
|
|
### Dynamic Contracts (No Address)
|
|
|
|
For contracts created by factories, omit the address field:
|
|
|
|
```yaml
|
|
contracts:
|
|
- name: Pair
|
|
handler: src/core.ts
|
|
events:
|
|
- event: Mint(address sender, uint256 amount0, uint256 amount1)
|
|
- event: Burn(address sender, uint256 amount0, uint256 amount1)
|
|
```
|
|
|
|
Register dynamically in handler:
|
|
|
|
```typescript
|
|
Factory.PairCreated.contractRegister(({ event, context }) => {
|
|
context.addPair(event.params.pair);
|
|
});
|
|
```
|
|
|
|
## Event Configuration
|
|
|
|
### Basic Event
|
|
|
|
```yaml
|
|
events:
|
|
- event: Transfer(address indexed from, address indexed to, uint256 value)
|
|
```
|
|
|
|
### With Transaction Fields
|
|
|
|
```yaml
|
|
events:
|
|
- event: Transfer(address indexed from, address indexed to, uint256 value)
|
|
field_selection:
|
|
transaction_fields:
|
|
- hash
|
|
- from
|
|
- to
|
|
- value
|
|
```
|
|
|
|
### With Block Fields
|
|
|
|
```yaml
|
|
events:
|
|
- event: Transfer(...)
|
|
field_selection:
|
|
block_fields:
|
|
- number
|
|
- timestamp
|
|
- hash
|
|
```
|
|
|
|
## Advanced Options
|
|
|
|
### Preload Handlers
|
|
|
|
Enable for Effect API usage and performance optimization:
|
|
|
|
```yaml
|
|
preload_handlers: true
|
|
```
|
|
|
|
When enabled:
|
|
- Handlers run twice (preload + execution)
|
|
- External calls MUST use Effect API
|
|
- Use `!context.isPreload` to skip logic during preload
|
|
|
|
### Unordered Multichain Mode
|
|
|
|
For multichain indexing without cross-chain ordering:
|
|
|
|
```yaml
|
|
unordered_multichain_mode: true
|
|
```
|
|
|
|
Benefits:
|
|
- Faster indexing
|
|
- Each chain processes independently
|
|
|
|
Tradeoffs:
|
|
- No guaranteed cross-chain event order
|
|
- Use when chains are independent
|
|
|
|
### Wildcard Indexing
|
|
|
|
Index by event signature across all addresses:
|
|
|
|
```yaml
|
|
contracts:
|
|
- name: ERC20
|
|
handler: src/erc20.ts
|
|
events:
|
|
- event: Transfer(address indexed from, address indexed to, uint256 value)
|
|
# No address = wildcard indexing
|
|
```
|
|
|
|
## Common Configurations
|
|
|
|
### DEX Indexer
|
|
|
|
```yaml
|
|
name: dex-indexer
|
|
preload_handlers: true
|
|
unordered_multichain_mode: true
|
|
|
|
contracts:
|
|
- name: Factory
|
|
handler: src/factory.ts
|
|
events:
|
|
- event: PairCreated(address indexed token0, address indexed token1, address pair)
|
|
|
|
- name: Pair
|
|
handler: src/core.ts
|
|
events:
|
|
- event: Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to)
|
|
- event: Mint(address sender, uint256 amount0, uint256 amount1)
|
|
- event: Burn(address sender, uint256 amount0, uint256 amount1)
|
|
- event: Sync(uint112 reserve0, uint112 reserve1)
|
|
field_selection:
|
|
transaction_fields:
|
|
- hash
|
|
|
|
networks:
|
|
- id: 1
|
|
start_block: 10000835
|
|
contracts:
|
|
- name: Factory
|
|
address: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
|
|
```
|
|
|
|
### Token Tracker
|
|
|
|
```yaml
|
|
name: token-tracker
|
|
|
|
networks:
|
|
- id: 1
|
|
start_block: 12345678
|
|
contracts:
|
|
- name: ERC20
|
|
address:
|
|
- 0xToken1
|
|
- 0xToken2
|
|
handler: src/EventHandlers.ts
|
|
events:
|
|
- event: Transfer(address indexed from, address indexed to, uint256 value)
|
|
field_selection:
|
|
transaction_fields:
|
|
- hash
|
|
- event: Approval(address indexed owner, address indexed spender, uint256 value)
|
|
```
|
|
|
|
## Validation
|
|
|
|
Use the schema for validation:
|
|
|
|
```yaml
|
|
# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
|
|
```
|
|
|
|
Run codegen to validate:
|
|
|
|
```bash
|
|
pnpm codegen
|
|
```
|