Files
proxmox/docs/archive/completion/ORACLE_PUBLISHER_CONFIGURATION_COMPLETE.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

4.5 KiB

Oracle Publisher Service - Configuration Complete

Date: $(date)
VMID: 3500


Configuration Status

Completed Steps

  1. Fixed .env Configuration File

    • Location: /opt/oracle-publisher/.env
    • Status: Clean, properly formatted
    • Contains all required settings except PRIVATE_KEY
  2. Created Systemd Service

    • Location: /etc/systemd/system/oracle-publisher.service
    • Status: Installed and enabled
    • User: oracle (needs to be verified/created if missing)
  3. Configured Oracle Addresses

    • Aggregator: 0x99b3511a2d315a497c8112c1fdd8d508d4b1e506
    • Proxy: 0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6
  4. Configured Data Sources

    • CoinGecko API (primary)
    • Binance API (fallback)
  5. Configured Update Settings

    • Update Interval: 60 seconds
    • Deviation Threshold: 0.5%

⚠️ Remaining Steps

1. Copy Oracle Publisher Python Script

The oracle_publisher.py script needs to be copied to the container:

# From your local machine
cd /home/intlc/projects/proxmox
scp smom-dbis-138/services/oracle-publisher/oracle_publisher.py \
    root@192.168.11.10:/tmp/oracle_publisher.py

# Then copy to container
ssh root@192.168.11.10 "pct exec 3500 -- cp /tmp/oracle_publisher.py /opt/oracle-publisher/oracle_publisher.py && chmod 755 /opt/oracle-publisher/oracle_publisher.py"

2. Set Private Key

IMPORTANT: The private key must belong to an account authorized as a transmitter on the oracle contract.

ssh root@192.168.11.10
pct exec 3500 -- bash
cd /opt/oracle-publisher
nano .env
# Add or uncomment: PRIVATE_KEY=0x...
# Save and exit (Ctrl+X, Y, Enter)
chmod 600 .env

3. Verify User Permissions

If the oracle user doesn't exist, create it:

ssh root@192.168.11.10
pct exec 3500 -- useradd -r -s /bin/bash -d /opt/oracle-publisher oracle
pct exec 3500 -- chown -R oracle:oracle /opt/oracle-publisher

4. Start the Service

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

📋 Current Configuration Values

# Oracle Contracts
AGGREGATOR_ADDRESS=0x99b3511a2d315a497c8112c1fdd8d508d4b1e506
ORACLE_ADDRESS=0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6

# Network
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

🔍 Verification Commands

Check Service Status

ssh root@192.168.11.10 "pct exec 3500 -- systemctl status oracle-publisher"

View Logs

ssh root@192.168.11.10 "pct exec 3500 -- journalctl -u oracle-publisher -f"

Verify Oracle Price Updates

# Query oracle for latest price
cast call 0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 \
  "latestRoundData()" \
  --rpc-url https://rpc-http-pub.d-bis.org

# Check if price is updating (should change every ~60 seconds)

Check Metrics

ssh root@192.168.11.10 "pct exec 3500 -- curl -s http://localhost:8000/metrics | grep oracle"

🐛 Troubleshooting

Service Fails to Start

  1. Check logs:

    pct exec 3500 -- journalctl -u oracle-publisher -n 50
    
  2. Verify Python script exists:

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

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

Authorization Errors

If you see "Aggregator: only transmitter":

  • Verify PRIVATE_KEY account is authorized as transmitter on oracle contract
  • Check account has sufficient ETH balance for gas

Price Not Updating

  • Check service is running: systemctl status oracle-publisher
  • Check logs for errors: journalctl -u oracle-publisher -f
  • Verify data sources are accessible
  • Check deviation threshold (only updates if price changes > 0.5%)

  • docs/ORACLE_UPDATE_AUTHORIZATION.md - Authorization requirements
  • docs/METAMASK_USD_PRICE_FIX.md - MetaMask integration
  • docs/UPDATE_ALL_ORACLE_PRICES.md - Manual update guide

Last Updated: $(date)