Files
proxmox/docs/archive/status/ORACLE_PUBLISHER_SERVICE_STATUS.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

5.1 KiB

Oracle Publisher Service - Status and Configuration

Date: $(date)
VMID: 3500
Status: ⚠️ Configured but not running


Current Status

Configuration Files

  • .env File: Fixed and configured

    • Location: /opt/oracle-publisher/.env
    • Status: Clean configuration with all required variables
    • Missing: PRIVATE_KEY (must be transmitter account)
  • Systemd Service: Created

    • Location: /etc/systemd/system/oracle-publisher.service
    • Status: Loaded but not started
    • User: oracle
    • Working Directory: /opt/oracle-publisher
  • Python Script: Copied

    • Location: /opt/oracle-publisher/oracle_publisher.py
    • Status: Present
  • Python Environment: Exists

    • Location: /opt/oracle-publisher/venv
    • Status: Virtual environment created

⚠️ What's Missing

1. Private Key Configuration

The .env file is missing the PRIVATE_KEY variable. This must be set to an account that is authorized as a transmitter on the oracle contract.

To set the private key:

ssh root@192.168.11.10
pct exec 3500 -- bash
cd /opt/oracle-publisher
# Edit .env file
nano .env
# Add line: PRIVATE_KEY=0x...
# Save and exit

Important: The account must be authorized as a transmitter on the oracle aggregator contract (0x99b3511a2d315a497c8112c1fdd8d508d4b1e506).


📋 Current Configuration

# Oracle Contract Addresses
AGGREGATOR_ADDRESS=0x99b3511a2d315a497c8112c1fdd8d508d4b1e506
ORACLE_ADDRESS=0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6

# RPC Configuration
RPC_URL=http://192.168.11.250:8545
WS_URL=ws://192.168.11.250:8546
CHAIN_ID=138

# Update Settings
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=coingecko
DATA_SOURCE_2_URL=https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT
DATA_SOURCE_2_PARSER=binance

# Metrics
METRICS_PORT=8000
METRICS_ENABLED=true

🚀 Starting the Service

Once the PRIVATE_KEY is configured:

1. Enable and Start Service

ssh root@192.168.11.10
pct exec 3500 -- systemctl enable oracle-publisher
pct exec 3500 -- systemctl start oracle-publisher

2. Check Status

pct exec 3500 -- systemctl status oracle-publisher

3. View Logs

# Follow logs in real-time
pct exec 3500 -- journalctl -u oracle-publisher -f

# View recent logs
pct exec 3500 -- journalctl -u oracle-publisher -n 50

4. Verify Oracle Updates

# Query oracle to check if price is being updated
cast call 0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 \
  "latestRoundData()" \
  --rpc-url https://rpc-http-pub.d-bis.org

# Parse the result (answer field is in 8 decimals)
# Divide answer by 1e8 to get USD price

🔍 Troubleshooting

Service Won't Start

  1. Check logs:

    pct exec 3500 -- journalctl -u oracle-publisher -n 50
    
  2. Check configuration:

    pct exec 3500 -- cat /opt/oracle-publisher/.env
    
  3. Verify Python script exists:

    pct exec 3500 -- ls -la /opt/oracle-publisher/oracle_publisher.py
    
  4. Test Python script manually:

    pct exec 3500 -- su - oracle -c "cd /opt/oracle-publisher && source venv/bin/activate && python oracle_publisher.py"
    

Authorization Errors

If you see "Aggregator: only transmitter" errors:

  1. Verify account is transmitter:

    • Check oracle contract for authorized transmitter addresses
    • Ensure PRIVATE_KEY matches one of the authorized accounts
  2. Check account balance:

    • Transmitter account needs ETH for gas fees
    • Check balance: cast balance <address> --rpc-url <rpc-url>

Price Not Updating

  1. Check service is running:

    pct exec 3500 -- systemctl status oracle-publisher
    
  2. Check data sources:

    • Verify CoinGecko API is accessible
    • Check for rate limiting
  3. Check deviation threshold:

    • Price only updates if change > 0.5% (DEVIATION_THRESHOLD)
    • For testing, you can lower this temporarily

📊 Monitoring

Metrics Endpoint

The service exposes Prometheus metrics on port 8000:

# Access metrics (from inside container)
curl http://localhost:8000/metrics

# Or from host (if port is forwarded)
curl http://192.168.11.68:8000/metrics

Key Metrics

  • oracle_updates_sent_total - Total number of updates sent
  • oracle_update_errors_total - Total number of errors
  • oracle_current_price - Current oracle price
  • oracle_price_deviation - Price deviation from last update

Next Steps

  1. Set PRIVATE_KEY in /opt/oracle-publisher/.env
  2. Verify transmitter authorization on oracle contract
  3. Start service: systemctl start oracle-publisher
  4. Monitor logs to verify updates are working
  5. Verify oracle contract is being updated with new prices

📝 Scripts Available

  • Configure Service: ./scripts/configure-oracle-publisher-service.sh
  • Update Prices Manually: ./scripts/update-all-oracle-prices.sh (requires transmitter account)

Last Updated: $(date)