Replaced hardcoded router map with externalized DEX configuration from
config/dex.yaml for flexibility and maintainability.
## Changes Made
### pkg/sequencer/decoder.go
- Added pkg/config import
- Added package-level dexConfig variable
- Created InitDEXConfig() function to load config from file
- Modified GetSwapProtocol() to use config.Routers map instead of hardcoded map
- Removed 12 hardcoded router addresses
- Config fallback: uses function selector matching if config not loaded
## Benefits
- Configuration external from code
- Easy to add new DEX routers without code changes
- Centralized router configuration in config/dex.yaml
- Backward compatible: falls back to selector matching
## Usage
```go
// At startup:
if err := sequencer.InitDEXConfig("config/dex.yaml"); err != nil {
log.Fatal(err)
}
```
## Testing
- ✅ Compilation verified: go build ./pkg/sequencer/...
- ✅ Backward compatible with existing code
- ✅ Config loading from config/dex.yaml
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
CRITICAL FIX: Eliminated blocking RPC call in reader.go that was fetching
transaction data we already had from the sequencer feed.
Changes for consistency and reusability:
1. Added RawBytes field to DecodedTransaction to store RLP-encoded transaction
2. Created reusable ToEthereumTransaction() method for type conversion
3. Changed channel from 'chan string' (txHashes) to 'chan *SwapEvent' (swapEvents)
4. Updated processSwapEvent to use transaction from swap event instead of RPC
Impact:
- REMOVES blocking RPC call from hot path (pkg/sequencer/reader.go:357)
- Eliminates network latency from transaction processing pipeline
- Uses data already available from Arbitrum sequencer feed
- Improves throughput and reduces RPC dependency
This fixes the #1 CRITICAL blocker for production deployment identified in
PRODUCTION_READINESS.md.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>