272 lines
5.1 KiB
Markdown
272 lines
5.1 KiB
Markdown
# 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
|
|
|
|
1. **Bot Engine** (`bot.ts`)
|
|
- Main event loop
|
|
- Strategy coordination
|
|
- Opportunity detection
|
|
|
|
2. **Strategies**
|
|
- **Amortization**: Executes amortization cycles
|
|
- **Arbitrage**: Finds arbitrage opportunities
|
|
- **Deleverage**: Protects positions with low HF
|
|
|
|
3. **Utilities**
|
|
- **Invariant Checker**: Verifies invariants before execution
|
|
- **Position Calculator**: Calculates position metrics
|
|
- **Bundle Builder**: Builds Flashbots bundles
|
|
|
|
4. **Providers**
|
|
- **Flash Router Client**: Interacts with FlashLoanRouter
|
|
- **Aave Client**: Reads Aave position data
|
|
- **Uniswap Client**: Executes swaps
|
|
|
|
## Setup
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
cd mev-bot
|
|
npm install
|
|
```
|
|
|
|
### 2. Configure Environment
|
|
|
|
Create `.env` in `mev-bot/`:
|
|
|
|
```env
|
|
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
|
|
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
### 4. Run
|
|
|
|
```bash
|
|
npm start
|
|
```
|
|
|
|
## Strategies
|
|
|
|
### Amortization Strategy
|
|
|
|
**Purpose**: Execute profitable amortization cycles
|
|
|
|
**Detection**:
|
|
1. Check current position
|
|
2. Calculate potential improvement
|
|
3. Estimate gas costs
|
|
4. Determine profitability
|
|
|
|
**Execution**:
|
|
1. Verify invariants
|
|
2. Build transaction
|
|
3. Submit via Flashbots (if enabled)
|
|
4. Monitor execution
|
|
|
|
### Arbitrage Strategy
|
|
|
|
**Purpose**: Find arbitrage opportunities
|
|
|
|
**Detection**:
|
|
1. Compare prices across DEXs
|
|
2. Calculate potential profit
|
|
3. Account for gas and fees
|
|
4. Determine if profitable
|
|
|
|
**Execution**:
|
|
1. Execute arbitrage trade
|
|
2. Capture profit
|
|
3. Update position
|
|
|
|
### Deleverage Strategy
|
|
|
|
**Purpose**: Protect position when HF is low
|
|
|
|
**Trigger**: Health factor < 1.10
|
|
|
|
**Action**:
|
|
1. Reduce leverage
|
|
2. Improve health factor
|
|
3. Prevent liquidation risk
|
|
|
|
## Bundle Building
|
|
|
|
### Flashbots Integration
|
|
|
|
For private transaction submission:
|
|
|
|
```typescript
|
|
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
|
|
|
|
```typescript
|
|
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:
|
|
```typescript
|
|
private pollInterval = 5000; // 5 seconds
|
|
```
|
|
|
|
### Profitability Thresholds
|
|
Minimum profit to execute:
|
|
```typescript
|
|
const minProfit = ethers.parseEther("0.01"); // 0.01 ETH
|
|
```
|
|
|
|
### Gas Price Management
|
|
Set max gas price:
|
|
```typescript
|
|
const maxGasPrice = ethers.parseUnits("100", "gwei");
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
### Retry Logic
|
|
```typescript
|
|
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:
|
|
|
|
```typescript
|
|
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
|
|
|
|
1. **Batch Operations**: Group multiple checks
|
|
2. **Caching**: Cache position data
|
|
3. **Async Processing**: Parallel opportunity detection
|
|
4. **Connection Pooling**: Reuse RPC connections
|
|
|
|
## Security
|
|
|
|
1. **Private Key Management**: Use secure key storage
|
|
2. **Access Control**: Limit bot permissions
|
|
3. **Rate Limiting**: Prevent spam
|
|
4. **Monitoring**: Track all bot actions
|
|
|
|
## Deployment
|
|
|
|
### Docker
|
|
|
|
```dockerfile
|
|
FROM node:18
|
|
WORKDIR /app
|
|
COPY package*.json ./
|
|
RUN npm install
|
|
COPY . .
|
|
CMD ["npm", "start"]
|
|
```
|
|
|
|
### Systemd Service
|
|
|
|
```ini
|
|
[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
|
|
|