5.1 KiB
5.1 KiB
MEV Bot Documentation
Overview
The DBIS MEV Bot is a TypeScript application that monitors positions and executes profitable atomic amortization cycles, arbitrage opportunities, and protective deleveraging.
Architecture
Core Components
-
Bot Engine (
bot.ts)- Main event loop
- Strategy coordination
- Opportunity detection
-
Strategies
- Amortization: Executes amortization cycles
- Arbitrage: Finds arbitrage opportunities
- Deleverage: Protects positions with low HF
-
Utilities
- Invariant Checker: Verifies invariants before execution
- Position Calculator: Calculates position metrics
- Bundle Builder: Builds Flashbots bundles
-
Providers
- Flash Router Client: Interacts with FlashLoanRouter
- Aave Client: Reads Aave position data
- Uniswap Client: Executes swaps
Setup
1. Install Dependencies
cd mev-bot
npm install
2. Configure Environment
Create .env in mev-bot/:
RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY
PRIVATE_KEY=your_bot_private_key
FLASH_ROUTER_ADDRESS=0x...
VAULT_ADDRESS=0x...
KERNEL_ADDRESS=0x...
AAVE_POOL_ADDRESS=0x...
UNISWAP_ROUTER_ADDRESS=0x...
3. Build
npm run build
4. Run
npm start
Strategies
Amortization Strategy
Purpose: Execute profitable amortization cycles
Detection:
- Check current position
- Calculate potential improvement
- Estimate gas costs
- Determine profitability
Execution:
- Verify invariants
- Build transaction
- Submit via Flashbots (if enabled)
- Monitor execution
Arbitrage Strategy
Purpose: Find arbitrage opportunities
Detection:
- Compare prices across DEXs
- Calculate potential profit
- Account for gas and fees
- Determine if profitable
Execution:
- Execute arbitrage trade
- Capture profit
- Update position
Deleverage Strategy
Purpose: Protect position when HF is low
Trigger: Health factor < 1.10
Action:
- Reduce leverage
- Improve health factor
- Prevent liquidation risk
Bundle Building
Flashbots Integration
For private transaction submission:
import { FlashbotsBundleProvider } from "@flashbots/ethers-provider-bundle";
const bundle = await bundleBuilder.buildBundle(transactions);
await flashbotsProvider.sendBundle(bundle, targetBlockNumber);
Benefits
- No front-running
- Atomic execution
- Priority inclusion
Monitoring
Position Monitoring
const position = await positionCalculator.getPosition();
console.log(`HF: ${position.healthFactor}`);
console.log(`LTV: ${position.ltv}`);
console.log(`Collateral: ${position.collateral}`);
console.log(`Debt: ${position.debt}`);
Alert Conditions
- Health factor < 1.10
- Position at risk
- Policy denial
- Transaction failure
- Bot downtime
Multi-Region Deployment
Deploy in multiple regions for redundancy:
- US East
- EU
- Singapore
Use leader election or load balancing.
Configuration
Poll Interval
Adjust how often bot checks for opportunities:
private pollInterval = 5000; // 5 seconds
Profitability Thresholds
Minimum profit to execute:
const minProfit = ethers.parseEther("0.01"); // 0.01 ETH
Gas Price Management
Set max gas price:
const maxGasPrice = ethers.parseUnits("100", "gwei");
Error Handling
Retry Logic
async executeWithRetry(operation, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await operation();
} catch (error) {
if (i === maxRetries - 1) throw error;
await sleep(1000 * (i + 1)); // Exponential backoff
}
}
}
Failure Notifications
Send alerts on:
- Transaction failures
- Invariant violations
- Policy denials
- Bot crashes
Logging
Use Winston for structured logging:
import winston from "winston";
const logger = winston.createLogger({
level: "info",
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: "error.log", level: "error" }),
new winston.transports.File({ filename: "combined.log" })
]
});
Performance Optimization
- Batch Operations: Group multiple checks
- Caching: Cache position data
- Async Processing: Parallel opportunity detection
- Connection Pooling: Reuse RPC connections
Security
- Private Key Management: Use secure key storage
- Access Control: Limit bot permissions
- Rate Limiting: Prevent spam
- Monitoring: Track all bot actions
Deployment
Docker
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
Systemd Service
[Unit]
Description=DBIS MEV Bot
After=network.target
[Service]
Type=simple
User=dbis
WorkingDirectory=/opt/dbis-mev-bot
ExecStart=/usr/bin/npm start
Restart=always
[Install]
WantedBy=multi-user.target
Metrics
Track:
- Opportunities detected
- Cycles executed
- Profit generated
- Gas costs
- Success rate
- Average HF improvement