- 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.
229 lines
5.1 KiB
Markdown
229 lines
5.1 KiB
Markdown
# Oracle Publisher Service - Setup Complete
|
|
|
|
**Date**: $(date)
|
|
**VMID**: 3500
|
|
**Status**: ✅ **Configured and Started**
|
|
|
|
---
|
|
|
|
## ✅ Completed Tasks
|
|
|
|
### 1. Configuration Files
|
|
- ✅ Fixed corrupted `.env` file
|
|
- ✅ Configured all oracle addresses
|
|
- ✅ Set data sources (CoinGecko, Binance)
|
|
- ✅ Configured update intervals and thresholds
|
|
- ✅ Set PRIVATE_KEY (transmitter account)
|
|
|
|
### 2. Python Script
|
|
- ✅ Copied `oracle_publisher.py` to container
|
|
- ✅ Set correct permissions (755)
|
|
- ✅ Fixed ownership (oracle:oracle)
|
|
|
|
### 3. Python Environment
|
|
- ✅ Verified virtual environment exists
|
|
- ✅ Installed required packages (web3, eth-account, requests, etc.)
|
|
|
|
### 4. Systemd Service
|
|
- ✅ Created service file
|
|
- ✅ Enabled service
|
|
- ✅ Started service
|
|
|
|
---
|
|
|
|
## 📋 Current Configuration
|
|
|
|
```bash
|
|
# 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
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 Service Status
|
|
|
|
### Check Status
|
|
|
|
```bash
|
|
ssh root@192.168.11.10 "pct exec 3500 -- systemctl status oracle-publisher"
|
|
```
|
|
|
|
### View Logs
|
|
|
|
```bash
|
|
# Follow logs in real-time
|
|
ssh root@192.168.11.10 "pct exec 3500 -- journalctl -u oracle-publisher -f"
|
|
|
|
# View recent logs
|
|
ssh root@192.168.11.10 "pct exec 3500 -- journalctl -u oracle-publisher -n 50"
|
|
```
|
|
|
|
### Verify Oracle Updates
|
|
|
|
```bash
|
|
# Query oracle for latest price
|
|
cast call 0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 \
|
|
"latestRoundData()" \
|
|
--rpc-url https://rpc-http-pub.d-bis.org
|
|
|
|
# The answer field (in 8 decimals) represents the ETH/USD price
|
|
# Divide by 1e8 to get USD price
|
|
```
|
|
|
|
### Check Metrics
|
|
|
|
```bash
|
|
# Access Prometheus metrics
|
|
ssh root@192.168.11.10 "pct exec 3500 -- curl -s http://localhost:8000/metrics | grep oracle"
|
|
```
|
|
|
|
---
|
|
|
|
## 🔄 Service Management
|
|
|
|
### Start Service
|
|
|
|
```bash
|
|
ssh root@192.168.11.10 "pct exec 3500 -- systemctl start oracle-publisher"
|
|
```
|
|
|
|
### Stop Service
|
|
|
|
```bash
|
|
ssh root@192.168.11.10 "pct exec 3500 -- systemctl stop oracle-publisher"
|
|
```
|
|
|
|
### Restart Service
|
|
|
|
```bash
|
|
ssh root@192.168.11.10 "pct exec 3500 -- systemctl restart oracle-publisher"
|
|
```
|
|
|
|
### Enable Auto-Start
|
|
|
|
```bash
|
|
ssh root@192.168.11.10 "pct exec 3500 -- systemctl enable oracle-publisher"
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Expected Behavior
|
|
|
|
The Oracle Publisher service will:
|
|
|
|
1. **Fetch Prices** every 60 seconds from:
|
|
- CoinGecko API (primary)
|
|
- Binance API (fallback)
|
|
|
|
2. **Calculate Median Price** from multiple sources
|
|
|
|
3. **Check Deviation** - Only update if price change > 0.5%
|
|
|
|
4. **Update Oracle Contract** with new price if needed
|
|
|
|
5. **Expose Metrics** on port 8000 for monitoring
|
|
|
|
---
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Service Not Running
|
|
|
|
```bash
|
|
# Check status
|
|
ssh root@192.168.11.10 "pct exec 3500 -- systemctl status oracle-publisher"
|
|
|
|
# Check logs for errors
|
|
ssh root@192.168.11.10 "pct exec 3500 -- journalctl -u oracle-publisher -n 50"
|
|
```
|
|
|
|
### Authorization Errors
|
|
|
|
If you see "Aggregator: only transmitter":
|
|
- Verify PRIVATE_KEY account is authorized as transmitter
|
|
- Check account has sufficient ETH for gas fees
|
|
|
|
### Price Not Updating
|
|
|
|
1. Check service is running
|
|
2. Check logs for errors
|
|
3. Verify data sources are accessible
|
|
4. Check deviation threshold (only updates if change > 0.5%)
|
|
5. Verify oracle contract is being updated
|
|
|
|
### Python Errors
|
|
|
|
```bash
|
|
# Test Python script manually
|
|
ssh root@192.168.11.10 "pct exec 3500 -- su - oracle -c 'cd /opt/oracle-publisher && source venv/bin/activate && python oracle_publisher.py'"
|
|
```
|
|
|
|
---
|
|
|
|
## 📈 Monitoring
|
|
|
|
### Key Metrics
|
|
|
|
- `oracle_updates_sent_total` - Total updates sent to blockchain
|
|
- `oracle_update_errors_total` - Total errors encountered
|
|
- `oracle_current_price` - Current oracle price (USD)
|
|
- `oracle_price_deviation` - Price deviation from last update (%)
|
|
|
|
### Log Monitoring
|
|
|
|
Monitor logs for:
|
|
- Successful price updates
|
|
- Transaction confirmations
|
|
- API errors from data sources
|
|
- Authorization errors
|
|
|
|
---
|
|
|
|
## ✅ Verification Checklist
|
|
|
|
- [x] Service file created and configured
|
|
- [x] .env file configured with all settings
|
|
- [x] PRIVATE_KEY set (transmitter account)
|
|
- [x] Python script copied and has correct permissions
|
|
- [x] Python packages installed
|
|
- [x] Service started and running
|
|
- [ ] Service logs show successful operation
|
|
- [ ] Oracle contract receiving price updates
|
|
- [ ] Metrics endpoint accessible
|
|
|
|
---
|
|
|
|
## 📚 Related Documentation
|
|
|
|
- `docs/ORACLE_UPDATE_AUTHORIZATION.md` - Authorization requirements
|
|
- `docs/METAMASK_USD_PRICE_FIX.md` - MetaMask integration
|
|
- `docs/UPDATE_ALL_ORACLE_PRICES.md` - Manual update guide
|
|
- `docs/ORACLE_PUBLISHER_SERVICE_STATUS.md` - Status and troubleshooting
|
|
|
|
---
|
|
|
|
**Last Updated**: $(date)
|
|
**Status**: ✅ Service configured and started
|
|
|