225 lines
6.4 KiB
Markdown
225 lines
6.4 KiB
Markdown
---
|
|
description: Initialize a new HyperIndex indexer project with guided setup
|
|
argument-hint: [contract-address-or-type]
|
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, WebSearch
|
|
---
|
|
|
|
Initialize a new Envio HyperIndex indexer project using `envio init` with **non-interactive CLI flags**.
|
|
|
|
IMPORTANT: The interactive CLI does not work well with agents. Always use the fully-specified command-line flags to avoid interactive prompts.
|
|
|
|
## Step 1: Gather Required Information
|
|
|
|
Check $ARGUMENTS for:
|
|
- A contract address (starts with `0x`)
|
|
- A template name (e.g., `erc20`, `greeter`)
|
|
|
|
**If NO contract address or template provided:**
|
|
1. Ask the user what protocol/contract they want to index
|
|
2. If they provide a name (e.g., "Uniswap V2", "Aave V3"), use WebSearch to find the contract address:
|
|
- Search for: "[protocol name] [network] contract address"
|
|
- Example: "Uniswap V2 Factory ethereum mainnet contract address"
|
|
3. Ask which network (default: `eth` for Ethereum mainnet)
|
|
4. Ask for project directory name (default: `envio-indexer`)
|
|
|
|
**If contract address IS provided:**
|
|
- Proceed directly to Step 2
|
|
|
|
## Step 2: Initialize with Contract Import (Primary Method)
|
|
|
|
Use the fully non-interactive command with all flags specified:
|
|
|
|
```bash
|
|
pnpx envio init contract-import explorer \
|
|
-c <CONTRACT_ADDRESS> \
|
|
-b <NETWORK_ID> \
|
|
-n <PROJECT_NAME> \
|
|
-l typescript \
|
|
-d <DIRECTORY_NAME> \
|
|
--single-contract \
|
|
--all-events \
|
|
--api-token ""
|
|
```
|
|
|
|
### Example - Uniswap V2 Factory on Ethereum:
|
|
```bash
|
|
pnpx envio init contract-import explorer \
|
|
-c 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f \
|
|
-b ethereum-mainnet \
|
|
-n uniswap-v2-indexer \
|
|
-l typescript \
|
|
-d uniswap-v2-indexer \
|
|
--single-contract \
|
|
--all-events \
|
|
--api-token ""
|
|
```
|
|
|
|
### CLI Flag Reference:
|
|
| Flag | Description | Required |
|
|
|------|-------------|----------|
|
|
| `-c, --contract-address` | Contract address to import | Yes |
|
|
| `-b, --blockchain` | Network ID (see network list below) | Yes |
|
|
| `-n, --name` | Project name | Yes |
|
|
| `-l, --language` | Handler language: `typescript`, `javascript`, `rescript` | Yes |
|
|
| `-d, --directory` | Output directory for the project | Yes |
|
|
| `--single-contract` | Skip prompt for additional contracts | Recommended |
|
|
| `--all-events` | Index all events without prompting | Recommended |
|
|
| `--api-token` | HyperSync API token (use `""` for public access) | Recommended |
|
|
|
|
## Step 3: Fallback - Template Initialization
|
|
|
|
If contract import fails (e.g., unverified contract, network issues), use template initialization:
|
|
|
|
```bash
|
|
pnpx envio init template \
|
|
-t erc20 \
|
|
-n <PROJECT_NAME> \
|
|
-l typescript \
|
|
-d <DIRECTORY_NAME> \
|
|
--api-token ""
|
|
```
|
|
|
|
### Available Templates:
|
|
| Template | Description | Use Case |
|
|
|----------|-------------|----------|
|
|
| `erc20` | ERC20 token transfers | Token tracking, balances |
|
|
| `greeter` | Simple example | Learning, testing |
|
|
|
|
After template init, you'll need to manually update `config.yaml` with the actual contract address and network.
|
|
|
|
## Step 4: Post-Initialization Setup
|
|
|
|
After init completes successfully:
|
|
|
|
```bash
|
|
cd <DIRECTORY_NAME>
|
|
pnpm install
|
|
pnpm codegen
|
|
```
|
|
|
|
## Step 5: Verify Generated Files
|
|
|
|
Check that these files were created:
|
|
- `config.yaml` - Contract addresses, networks, events
|
|
- `schema.graphql` - GraphQL entity definitions
|
|
- `src/EventHandlers.ts` - Event handler stubs
|
|
|
|
Read and review each file to understand what was generated.
|
|
|
|
## Step 6: Start Development
|
|
|
|
```bash
|
|
pnpm dev
|
|
```
|
|
|
|
This starts the indexer locally with hot reload and Hasura GraphQL console.
|
|
|
|
---
|
|
|
|
## Network IDs
|
|
|
|
Use these values for the `-b` / `--blockchain` flag.
|
|
|
|
### Mainnets
|
|
| Network | CLI Value |
|
|
|---------|-----------|
|
|
| Ethereum | `ethereum-mainnet` |
|
|
| Polygon | `polygon` |
|
|
| Arbitrum One | `arbitrum-one` |
|
|
| Arbitrum Nova | `arbitrum-nova` |
|
|
| Optimism | `optimism` |
|
|
| Base | `base` |
|
|
| Avalanche | `avalanche` |
|
|
| BSC | `bsc` |
|
|
| Gnosis | `gnosis` |
|
|
| Fantom | `fantom` |
|
|
| Linea | `linea` |
|
|
| Scroll | `scroll` |
|
|
| zkSync Era | `zksync-era` |
|
|
| Blast | `blast` |
|
|
| Mode | `mode` |
|
|
| Manta | `manta` |
|
|
| Mantle | `mantle` |
|
|
| Moonbeam | `moonbeam` |
|
|
| Celo | `celo` |
|
|
| Aurora | `aurora` |
|
|
| Harmony | `harmony` |
|
|
| Sonic | `sonic` |
|
|
| Berachain | `berachain` |
|
|
| Monad | `monad` |
|
|
| Abstract | `abstract` |
|
|
| Worldchain | `worldchain` |
|
|
| Unichain | `unichain` |
|
|
| Zora | `zora` |
|
|
|
|
### Testnets
|
|
| Network | CLI Value |
|
|
|---------|-----------|
|
|
| Sepolia | `sepolia` |
|
|
| Holesky | `holesky` |
|
|
| Base Sepolia | `base-sepolia` |
|
|
| Arbitrum Sepolia | `arbitrum-sepolia` |
|
|
| Optimism Sepolia | `optimism-sepolia` |
|
|
| Scroll Sepolia | `scroll-sepolia` |
|
|
| Linea Sepolia | `linea-sepolia` |
|
|
| Blast Sepolia | `blast-sepolia` |
|
|
| Mode Sepolia | `mode-sepolia` |
|
|
| Monad Testnet | `monad-testnet` |
|
|
| Polygon Amoy | `amoy` |
|
|
|
|
### Full List
|
|
Run `pnpx envio init contract-import explorer --help` to see all supported networks.
|
|
|
|
## Common Contract Addresses
|
|
|
|
**Ethereum Mainnet:**
|
|
- Uniswap V2 Factory: `0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f`
|
|
- Uniswap V3 Factory: `0x1F98431c8aD98523631AE4a59f267346ea31F984`
|
|
- WETH: `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
|
|
- USDC: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`
|
|
- USDT: `0xdAC17F958D2ee523a2206206994597C13D831ec7`
|
|
- DAI: `0x6B175474E89094C44Da98b954EescdeCB5BE3bE`
|
|
|
|
**Polygon:**
|
|
- Uniswap V3 Factory: `0x1F98431c8aD98523631AE4a59f267346ea31F984`
|
|
- QuickSwap Factory: `0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32`
|
|
|
|
**Arbitrum:**
|
|
- Uniswap V3 Factory: `0x1F98431c8aD98523631AE4a59f267346ea31F984`
|
|
- GMX Vault: `0x489ee077994B6658eAfA855C308275EAd8097C4A`
|
|
|
|
**Base:**
|
|
- Uniswap V3 Factory: `0x33128a8fC17869897dcE68Ed026d694621f6FDfD`
|
|
- Aerodrome Factory: `0x420DD381b31aEf6683db6B902084cB0FFECe40Da`
|
|
|
|
**Always verify addresses** with the user or official documentation before indexing.
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Contract Import Fails
|
|
1. Check if the contract is verified on the block explorer
|
|
2. Try using a different block explorer or network
|
|
3. Fall back to template init and manually add the ABI
|
|
|
|
### Network Not Found
|
|
- Check the full network list: `pnpx envio init contract-import explorer --help`
|
|
- Use the exact CLI value from the list (e.g., `ethereum-mainnet`, `arbitrum-one`)
|
|
|
|
### ABI Not Available
|
|
Use local ABI import instead:
|
|
```bash
|
|
pnpx envio init contract-import local \
|
|
-a ./path/to/abi.json \
|
|
-c <CONTRACT_ADDRESS> \
|
|
-b <NETWORK_ID> \
|
|
--contract-name <NAME> \
|
|
-n <PROJECT_NAME> \
|
|
-l typescript \
|
|
-d <DIRECTORY_NAME> \
|
|
--single-contract \
|
|
--all-events \
|
|
--api-token ""
|
|
```
|