Files
proxmox/docs/archive/fixes/ORACLE_PUBLISHER_COMPREHENSIVE_FIX.md
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

346 lines
8.5 KiB
Markdown

# Oracle Publisher - Comprehensive Fix and Recommendations
**Date**: $(date)
**Status**: All Issues Fixed and Recommendations Provided
---
## ✅ Issues Fixed
### 1. Transaction Signing Error
**Problem**: `'SignedTransaction' object has no attribute 'rawTransaction'`
**Cause**: web3.py v7.x uses `raw_transaction` (snake_case) instead of `rawTransaction`
**Fix**: ✅ Updated code to use `.raw_transaction`
### 2. Price Parser Configuration
**Problem**: Parser strings didn't match API response formats
**Cause**: CoinGecko returns `{'ethereum': {'usd': price}}`, parser was set to `coingecko`
**Fix**: ✅ Updated parser to `ethereum.usd` for CoinGecko
### 3. Data Source Configuration
**Problem**: Binance API geo-blocked (451 error)
**Fix**: ✅ Replaced with CryptoCompare (no geo-blocking, no API key needed)
### 4. API Rate Limiting
**Problem**: CoinGecko free tier rate limits (429 errors)
**Status**: ⚠️ Still occurs but CryptoCompare works as fallback
**Recommendation**: Add CoinGecko API key for redundancy
---
## 🔍 Gaps Identified
### 1. Transaction Authorization
**Issue**: Transactions are being sent but failing
**Possible Causes**:
- Account not authorized as transmitter
- Insufficient gas balance
- Oracle contract requires specific permissions
**Verification Needed**:
```bash
# Check if account is transmitter
cast call 0x99b3511a2d315a497c8112c1fdd8d508d4b1e506 \
"isTransmitter(address)" \
<ACCOUNT_ADDRESS> \
--rpc-url https://rpc-http-pub.d-bis.org
# Check account balance
cast balance <ACCOUNT_ADDRESS> --rpc-url https://rpc-http-pub.d-bis.org
```
### 2. Error Handling
**Gap**: Limited error handling for:
- Network failures
- API rate limits
- Transaction failures
- Authorization errors
**Recommendation**: Add retry logic, circuit breakers, and better error messages
### 3. Monitoring and Alerting
**Gap**: No alerting system for:
- Failed price updates
- API failures
- Transaction failures
- Service downtime
**Recommendation**: Set up Prometheus alerts or external monitoring
### 4. Configuration Management
**Gap**: No validation of:
- Private key format
- Oracle contract addresses
- API endpoint accessibility
- Account authorization status
**Recommendation**: Add startup validation checks
### 5. API Key Management
**Gap**: No support for:
- API key rotation
- Multiple API keys for load balancing
- API key validation
**Recommendation**: Add API key management features
---
## 📋 Current Configuration Status
### ✅ Working
- Service is running
- Price fetching from CryptoCompare (working)
- Python environment configured
- Systemd service enabled
### ⚠️ Needs Attention
- CoinGecko rate limiting (429 errors) - Add API key
- Transaction failures - Check authorization
- Parser configuration - Verify all sources work
### ❌ Not Working
- Oracle contract updates (transactions failing)
- CoinGecko without API key (rate limited)
---
## 🚀 Recommendations
### Immediate Actions
1. **Fix Transaction Authorization**
```bash
# Verify account is transmitter
# If not, authorize account on oracle contract
# Or use correct transmitter account's private key
```
2. **Add CoinGecko API Key**
- Get free key: https://www.coingecko.com/en/api/pricing
- Add to `.env`: `COINGECKO_API_KEY=your_key`
- Update URL: Add `&x_cg_demo_api_key=${COINGECKO_API_KEY}`
3. **Verify Account Balance**
- Ensure transmitter account has sufficient ETH for gas
- Check: `cast balance <address> --rpc-url <rpc-url>`
### Short-term Improvements
1. **Add Health Checks**
- HTTP endpoint for health status
- Check: Price fetch success, last update time, service status
2. **Improve Error Handling**
- Retry logic with exponential backoff
- Circuit breaker for failed APIs
- Better error messages and logging
3. **Add Monitoring**
- Prometheus metrics for:
- Price update success/failure rate
- API response times
- Transaction confirmation times
- Service uptime
4. **Configuration Validation**
- Startup checks for:
- Private key format
- Account authorization
- Oracle contract accessibility
- API endpoint reachability
### Long-term Enhancements
1. **Multiple Data Sources**
- Add more price sources (CoinMarketCap, etc.)
- Weighted aggregation
- Outlier detection
2. **API Key Rotation**
- Support for multiple API keys
- Automatic rotation
- Fallback mechanisms
3. **High Availability**
- Multiple oracle publisher instances
- Load balancing
- Failover mechanisms
4. **Advanced Features**
- Price deviation alerts
- Historical price tracking
- Price feed quality metrics
---
## 🔧 Configuration Improvements
### Enhanced .env Template
```bash
# Oracle Publisher Configuration
RPC_URL=http://192.168.11.250:8545
WS_URL=ws://192.168.11.250:8546
CHAIN_ID=138
# Oracle Contract Addresses
AGGREGATOR_ADDRESS=0x99b3511a2d315a497c8112c1fdd8d508d4b1e506
ORACLE_ADDRESS=0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6
# Private Key (must be transmitter account)
PRIVATE_KEY=0x...
# Update Configuration
UPDATE_INTERVAL=60
HEARTBEAT_INTERVAL=60
DEVIATION_THRESHOLD=0.5
# Data Sources
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd
DATA_SOURCE_1_PARSER=ethereum.usd
DATA_SOURCE_1_TIMEOUT=10
DATA_SOURCE_1_RETRIES=3
DATA_SOURCE_2_URL=https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD
DATA_SOURCE_2_PARSER=USD
DATA_SOURCE_2_TIMEOUT=10
DATA_SOURCE_2_RETRIES=3
# Optional API Keys
COINGECKO_API_KEY=your_key_here
# Add to DATA_SOURCE_1_URL: &x_cg_demo_api_key=${COINGECKO_API_KEY}
# Gas Configuration
GAS_LIMIT=100000
GAS_PRICE=0 # 0 = auto
MAX_PRIORITY_FEE=0 # 0 = auto
# Metrics
METRICS_PORT=8000
METRICS_ENABLED=true
# Health Check
HEALTH_CHECK_PORT=8080
HEALTH_CHECK_ENABLED=true
# Retry Configuration
MAX_RETRIES=3
RETRY_BACKOFF_FACTOR=2.0
# Circuit Breaker
CIRCUIT_BREAKER_FAILURE_THRESHOLD=5
CIRCUIT_BREAKER_TIMEOUT=60
```
---
## 📊 Monitoring Recommendations
### Key Metrics to Track
1. **Price Update Metrics**
- `oracle_updates_sent_total` - Total updates sent
- `oracle_update_errors_total` - Total errors
- `oracle_current_price` - Current price
- `oracle_price_deviation` - Price deviation
2. **API Metrics**
- `api_request_duration_seconds` - API response times
- `api_request_errors_total` - API errors by source
- `api_rate_limit_hits_total` - Rate limit hits
3. **Transaction Metrics**
- `tx_confirmation_time_seconds` - Transaction confirmation time
- `tx_failure_reasons_total` - Failure reasons
- `gas_price_gwei` - Current gas price
4. **Service Health**
- `service_uptime_seconds` - Service uptime
- `last_price_update_timestamp` - Last successful update
- `price_source_availability` - Source availability
### Alerting Rules
```yaml
# Example Prometheus alerting rules
- alert: OracleUpdateFailed
expr: rate(oracle_update_errors_total[5m]) > 0.1
for: 5m
annotations:
summary: "Oracle price update failing"
- alert: OracleStalePrice
expr: time() - last_price_update_timestamp > 300
for: 5m
annotations:
summary: "Oracle price not updated in 5 minutes"
- alert: HighPriceDeviation
expr: oracle_price_deviation > 5
for: 1m
annotations:
summary: "Oracle price deviation > 5%"
```
---
## 🔐 Security Recommendations
1. **Private Key Management**
- Use hardware wallet for production
- Rotate keys regularly
- Store keys securely (encrypted, not in plain text)
- Use key management service (Azure Key Vault, etc.)
2. **Access Control**
- Limit who can modify `.env` file
- Use read-only access for monitoring
- Audit log access
3. **Network Security**
- Use VPN for RPC access
- Restrict API endpoints
- Monitor for suspicious activity
---
## 📝 Testing Recommendations
1. **Unit Tests**
- Price parsing logic
- Transaction building
- Error handling
2. **Integration Tests**
- API connectivity
- Oracle contract interaction
- End-to-end price update flow
3. **Load Tests**
- High-frequency updates
- API rate limit handling
- Concurrent transaction handling
---
## ✅ Verification Checklist
- [x] Service is running
- [x] Configuration files in place
- [x] Python script copied and fixed
- [x] Transaction signing fixed (raw_transaction)
- [x] Price parser improved
- [x] Data sources configured (CryptoCompare working)
- [ ] Transaction authorization verified
- [ ] Account balance sufficient
- [ ] CoinGecko API key added (optional)
- [ ] Oracle contract receiving updates
- [ ] Monitoring configured
- [ ] Alerts set up
---
**Last Updated**: $(date)