# Oracle Operations Runbook

## Overview

This runbook provides procedures for operating and maintaining the oracle system.

## Oracle Update Procedures

### Manual Oracle Update

1. **Check current oracle state:**
   ```bash
   cast call $AGGREGATOR_ADDRESS "latestRoundData()" --rpc-url $RPC_URL
   ```

2. **Update oracle:**
   ```bash
   cast send $AGGREGATOR_ADDRESS "updateAnswer(uint256)" $PRICE \
     --rpc-url $RPC_URL \
     --private-key $PRIVATE_KEY
   ```

3. **Verify update:**
   ```bash
   cast call $AGGREGATOR_ADDRESS "latestAnswer()" --rpc-url $RPC_URL
   ```

### Automated Oracle Updates

Oracle updates are automated via the oracle publisher service:

```bash
# Check oracle publisher status
kubectl get pods -n besu-network -l app=oracle-publisher

# View logs
kubectl logs -n besu-network -l app=oracle-publisher --tail=100

# Restart if needed
kubectl rollout restart deployment/oracle-publisher -n besu-network
```

## Oracle Troubleshooting

### Oracle Not Updating

1. **Check transmitter status:**
   ```bash
   cast call $AGGREGATOR_ADDRESS "isTransmitter(address)" $TRANSMITTER_ADDRESS --rpc-url $RPC_URL
   ```

2. **Check oracle publisher:**
   ```bash
   kubectl logs -n besu-network -l app=oracle-publisher
   ```

3. **Check heartbeat:**
   ```bash
   cast call $AGGREGATOR_ADDRESS "heartbeat()" --rpc-url $RPC_URL
   ```

### Oracle Price Deviation

1. **Check deviation threshold:**
   ```bash
   cast call $AGGREGATOR_ADDRESS "deviationThreshold()" --rpc-url $RPC_URL
   ```

2. **Review price sources:**
   - Check data source health
   - Verify aggregation logic
   - Review recent updates

## Oracle Recovery Procedures

### Recover from Stale Oracle

1. **Identify stale oracle:**
   ```bash
   cast call $AGGREGATOR_ADDRESS "latestRoundData()" --rpc-url $RPC_URL
   ```

2. **Force update:**
   ```bash
   cast send $AGGREGATOR_ADDRESS "updateAnswer(uint256)" $PRICE \
     --rpc-url $RPC_URL \
     --private-key $PRIVATE_KEY
   ```

### Recover from Failed Transmitter

1. **Remove failed transmitter:**
   ```bash
   cast send $AGGREGATOR_ADDRESS "removeTransmitter(address)" $TRANSMITTER \
     --rpc-url $RPC_URL \
     --private-key $ADMIN_KEY
   ```

2. **Add new transmitter:**
   ```bash
   cast send $AGGREGATOR_ADDRESS "addTransmitter(address)" $NEW_TRANSMITTER \
     --rpc-url $RPC_URL \
     --private-key $ADMIN_KEY
   ```

## Monitoring

### Key Metrics

- Oracle update frequency
- Price deviation
- Transmitter availability
- Update success rate

### Alerts

- Oracle update stale (> 5 minutes)
- Price deviation > 5%
- Transmitter unavailable
- Update failures

## Best Practices

1. **Regular Monitoring**: Check oracle status daily
2. **Backup Transmitters**: Maintain multiple transmitters
3. **Price Source Diversity**: Use multiple data sources
4. **Automated Updates**: Rely on oracle publisher service
5. **Incident Response**: Follow incident response procedures

