Some checks failed
Verify Deployment / Verify Deployment (push) Has been cancelled
CI/CD Pipeline / Solidity Contracts (push) Has been cancelled
CI/CD Pipeline / Security Scanning (push) Has been cancelled
CI/CD Pipeline / Lint and Format (push) Has been cancelled
CI/CD Pipeline / Terraform Validation (push) Has been cancelled
CI/CD Pipeline / Kubernetes Validation (push) Has been cancelled
Validation / validate-genesis (push) Has been cancelled
Validation / validate-terraform (push) Has been cancelled
Validation / validate-kubernetes (push) Has been cancelled
Validation / validate-smart-contracts (push) Has been cancelled
Validation / validate-security (push) Has been cancelled
Validation / validate-documentation (push) Has been cancelled
110 lines
2.7 KiB
Bash
Executable File
110 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Price Feed Keeper Service (Bash version)
|
|
# Simple bash-based keeper that calls the keeper contract periodically
|
|
|
|
set -e
|
|
|
|
# Load environment variables
|
|
if [ -f .env ]; then
|
|
source .env
|
|
fi
|
|
|
|
# Configuration
|
|
RPC_URL="${RPC_URL_138:-http://localhost:8545}"
|
|
KEEPER_ADDRESS="${PRICE_FEED_KEEPER_ADDRESS}"
|
|
UPDATE_INTERVAL="${UPDATE_INTERVAL:-30}" # seconds
|
|
MAX_RETRIES=3
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Statistics
|
|
UPDATE_COUNT=0
|
|
ERROR_COUNT=0
|
|
|
|
# Function to log messages
|
|
log() {
|
|
echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
# Function to check if upkeep is needed
|
|
check_upkeep() {
|
|
forge script script/reserve/CheckUpkeep.s.sol:CheckUpkeep \
|
|
--rpc-url "$RPC_URL" \
|
|
--silent 2>/dev/null | grep -E "(needsUpdate|assets)" || echo "false"
|
|
}
|
|
|
|
# Function to perform upkeep
|
|
perform_upkeep() {
|
|
log "${YELLOW}Performing upkeep...${NC}"
|
|
|
|
local retries=0
|
|
local success=false
|
|
|
|
while [ $retries -lt $MAX_RETRIES ] && [ "$success" = false ]; do
|
|
if forge script script/reserve/PerformUpkeep.s.sol:PerformUpkeep \
|
|
--rpc-url "$RPC_URL" \
|
|
--broadcast \
|
|
--silent 2>/dev/null; then
|
|
success=true
|
|
UPDATE_COUNT=$((UPDATE_COUNT + 1))
|
|
log "${GREEN}✓ Upkeep successful${NC}"
|
|
else
|
|
retries=$((retries + 1))
|
|
if [ $retries -lt $MAX_RETRIES ]; then
|
|
log "${YELLOW}Retry $retries/$MAX_RETRIES...${NC}"
|
|
sleep 5
|
|
else
|
|
ERROR_COUNT=$((ERROR_COUNT + 1))
|
|
log "${RED}✗ Upkeep failed after $MAX_RETRIES retries${NC}"
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Function to stop keeper
|
|
stop_keeper() {
|
|
log "\nStopping keeper service..."
|
|
log "\n=== Statistics ==="
|
|
log "Total Updates: $UPDATE_COUNT"
|
|
log "Total Errors: $ERROR_COUNT"
|
|
if [ $UPDATE_COUNT -gt 0 ]; then
|
|
local success_rate=$(echo "scale=2; ($UPDATE_COUNT * 100) / ($UPDATE_COUNT + $ERROR_COUNT)" | bc)
|
|
log "Success Rate: ${success_rate}%"
|
|
fi
|
|
exit 0
|
|
}
|
|
|
|
# Trap signals for graceful shutdown
|
|
trap stop_keeper SIGINT SIGTERM
|
|
|
|
# Main loop
|
|
main() {
|
|
log "${GREEN}=== Price Feed Keeper Service ===${NC}"
|
|
log "RPC URL: $RPC_URL"
|
|
log "Keeper Address: $KEEPER_ADDRESS"
|
|
log "Update Interval: $UPDATE_INTERVAL seconds"
|
|
log ""
|
|
log "Keeper service started. Press Ctrl+C to stop."
|
|
log ""
|
|
|
|
while true; do
|
|
# Check if upkeep is needed
|
|
if check_upkeep | grep -q "true"; then
|
|
perform_upkeep
|
|
else
|
|
log "No updates needed"
|
|
fi
|
|
|
|
# Wait for next interval
|
|
sleep "$UPDATE_INTERVAL"
|
|
done
|
|
}
|
|
|
|
# Run main function
|
|
main
|
|
|