Deploy Prebuilt Adapters on Railway
Total time: ~20-30 minutes (assuming you have accounts set up)
Time Breakdown
| Phase | Time | What You'll Do |
|---|---|---|
| 1. Gather Credentials | ~10 min | Get API keys and RPC URL |
| 2. Generate Config | ~5 min | Fill form, select trackables, generate |
| 3. Deploy on Railway | ~5 min | Set env vars, click deploy |
| 4. Verify | ~5 min | Check logs and dashboard |
Why Railway?
Railway is the recommended deployment platform for Absinthe adapters because:
- One-Click Deployment: Use pre-configured templates for instant setup
- Automatic Scaling: Railway handles infrastructure automatically
- Easy Environment Variables: Simple UI for managing secrets
- Built-in Logging: Monitor your adapter in real-time
- Cost-Effective: Pay only for what you use
- No DevOps Required: Focus on your adapter config, not infrastructure
Phase 1: Gather Credentials (~10 min)
Before you start, collect these four items. If you already have them, skip to Phase 2.
1.1 Absinthe API Key (~2 min)
⚠️ IMPORTANT: Get your API key from the CMO request query that has been shared with you.
The API key will be provided in the integration brief link shared by your CMO. This link contains all the necessary campaign context and API credentials.
If you need to access it directly:
- Visit app.absinthe.network and log in
- Go to your organization → Campaigns
- Select your campaign → API Key Access
- Copy your API key
1.2 RPC URL (~3 min)
You need an RPC endpoint for your blockchain. Sign up for one if you don't have it:
| Chain | Providers |
|---|---|
| Ethereum | Alchemy, Infura, QuickNode |
| Base | Alchemy, QuickNode |
| Arbitrum | Alchemy, Infura |
| Polygon | Alchemy, Infura |
Your RPC URL will look like:
https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY1.3 CoinGecko API Key (~3 min)
Required for price feed functionality:
- Go to coingecko.com/api/pricing
- Sign up for a Pro account
- Copy your API key
1.4 Railway Account (~2 min)
- Sign up at railway.app
- Connect your GitHub account (optional but recommended)
Checkpoint: You should now have:
- Absinthe API Key
- RPC URL
- CoinGecko API Key
- Railway account
Phase 2: Generate Config (~5 min)
2.1 Open the Config Generator
Go to: Config Generator
2.2 Select Your Adapter Type
Choose the adapter that matches your protocol:
| Adapter | Use For |
|---|---|
| ERC20 Holdings | Track token balances |
| Uniswap V2 | AMM with fungible LP tokens (swaps + LP positions) |
| Uniswap V3 | AMM with NFT positions (swaps) |
2.3 Fill in the Required Fields
- Contract/Pool address: Your protocol's main contract
- Chain: Select the blockchain
- From Block: Auto-detected for most chains, or enter manually
2.4 Select Trackables
After filling in the required fields, you'll be prompted to select which activities you want to track:
Available trackables by adapter:- ERC20 Holdings: Token Holdings
- Uniswap V2: Swap Trackable, LP Trackable
- Uniswap V3: Swap Trackable
Select the trackables you want to monitor. All trackables are selected by default, but you can uncheck any you don't need.
2.5 Generate the Configuration
Click "Generate Config" → Copy the INDEXER_CONFIG (base64 encoded)
Checkpoint: You should now have:
-
INDEXER_CONFIGvalue copied
Phase 3: Deploy on Railway (~5 min)
3.1 Open Railway Template
Click: Railway Template

3.2 Set Environment Variables
Add these four required environment variables:
| Variable | Value | Where You Got It |
|---|---|---|
INDEXER_CONFIG | (paste your base64 config) | Config Generator (Phase 2) |
RPC_URL | (your RPC endpoint) | Alchemy/Infura (Phase 1) |
ABSINTHE_API_KEY | (your API key) | Absinthe Dashboard (Phase 1) |
COINGECKO_API_KEY | (your CoinGecko key) | CoinGecko (Phase 1) |
3.3 Deploy
Click "Deploy" in Railway.
Railway will:
- Build a Docker container (~2-3 min)
- Inject your environment variables
- Start the adapter
Checkpoint: Deployment started. Proceed to Phase 4.
Phase 4: Verify (~5 min)
4.1 Check Railway Logs
- Go to your project in Railway
- Click on the deployment
- View logs
- ✅ "Indexer started"
- ✅ "Processing block X"
- ✅ "Connected to RPC"

4.2 Monitor Indexer Status
Once you see the indexer running successfully in Railway logs, monitor it for 2-5 minutes to ensure it's processing blocks without errors.
Once verified:- ✅ Indexer is running green (no errors in logs)
- ✅ Processing blocks continuously
- ✅ Connected to RPC successfully
You can now inform your CMO to check the adapter directly in the app-dashboard. The CMO will verify that events are being received and the adapter is visible in the campaign.
4.3 Initial Sync
Checkpoint: You should see:
- Railway logs show "Indexer started"
- No errors in logs
- Indexer running green for 2-5 minutes
- CMO notified to verify in app-dashboard
You're Done!
Your adapter is now:
- Monitoring new blocks in real-time
- Processing events as they occur
- Sending data to Absinthe continuously
Next step: Once you've verified the indexer is running green for 2-5 minutes, inform your CMO to check the adapter in the app-dashboard. The CMO will handle the final verification and point distribution configuration.
Troubleshooting
If something went wrong, find your symptom below.
Quick Diagnosis
| Symptom | Likely Cause | Fix Time |
|---|---|---|
| Adapter not starting | Missing env vars | ~2 min |
| "Invalid API Key" error | Wrong API key source | ~2 min |
| "RPC Connection Failed" | Bad RPC URL | ~5 min |
| "Contract Not Found" | Wrong address or chain | ~2 min |
| No data in Absinthe | Adapter not synced yet | Wait 5-10 min |
| Slow sync | Large block range | Wait (can be hours) |
"Invalid API Key" Error (~2 min fix)
Cause: Using wrong API key
Fix:- Check the CMO request query link that was shared with you for the correct API key
- If needed, go to app.absinthe.network
- Navigate to your campaign → API Key Access
- Copy the API key
- Update
ABSINTHE_API_KEYin Railway - Redeploy
"RPC Connection Failed" (~5 min fix)
Cause: Invalid or expired RPC URL
Fix:- Verify your RPC URL includes your provider's API key
- Check your RPC provider account is active (not rate-limited)
- Test the RPC URL in your browser or with
curl - Try a different provider if needed
curl -X POST YOUR_RPC_URL \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'"Contract Not Found" (~2 min fix)
Cause: Wrong contract address or chain mismatch
Fix:- Verify the contract address is correct (check on block explorer)
- Ensure you selected the correct chain in the config generator
- Confirm the contract exists on that chain
"fromBlock Not Found" (~2 min fix)
Cause: Chain doesn't support automatic block lookup
Fix:- Find the contract creation block on a block explorer (e.g., Etherscan)
- Re-generate config with manual
fromBlockvalue - Update
INDEXER_CONFIGin Railway - Redeploy
Adapter Crashes After Deploy (~5-10 min fix)
Cause: Various — check logs for specifics
Fix:- Go to Railway → your deployment → Logs
- Look for the specific error message
- Common fixes:
- Missing env var → Add it and redeploy
- Invalid config → Re-generate config
- RPC rate limit → Upgrade RPC plan or use different provider
Quick Reference
Environment Variables Checklist
# All four are required
INDEXER_CONFIG=<base64_encoded_config> # From config generator
RPC_URL=<your_rpc_endpoint> # From Alchemy/Infura/QuickNode
ABSINTHE_API_KEY=<your_api_key> # From app.absinthe.network
COINGECKO_API_KEY=<your_cg_key> # From coingecko.comUseful Links
| Resource | Link |
|---|---|
| Config Generator | auto-adapter-forge.vercel.app |
| Railway Template | railway.com/new/template/zonal-gentleness |
| Absinthe Dashboard | app.absinthe.network |
| CoinGecko API | coingecko.com/api/pricing |
Summary
| Phase | Time | Status |
|---|---|---|
| 1. Gather Credentials | ~10 min | ☐ |
| 2. Generate Config | ~5 min | ☐ |
| 3. Deploy on Railway | ~5 min | ☐ |
| 4. Verify | ~5 min | ☐ |
| Total | ~20-30 min |
Once verified, return to the Absinthe App to configure point distribution rules.