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

8.5 KiB

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:

# 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

    # Verify account is transmitter
    # If not, authorize account on oracle contract
    # Or use correct transmitter account's private key
    
  2. Add 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

# 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

# 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

  • Service is running
  • Configuration files in place
  • Python script copied and fixed
  • Transaction signing fixed (raw_transaction)
  • Price parser improved
  • 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)