#!/bin/bash # Complete Keeper Deployment Script # Deploys all keeper components and sets up monitoring set -e # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # Load environment variables if [ -f .env ]; then source .env fi # Configuration RPC_URL="${RPC_URL_138:-https://rpc.d-bis.org}" PRIVATE_KEY="${PRIVATE_KEY}" KEEPER_ADDRESS="${PRICE_FEED_KEEPER_ADDRESS}" echo -e "${GREEN}=== Complete Keeper Deployment ===${NC}\n" # Step 1: Deploy PriceFeedKeeper echo -e "${YELLOW}Step 1: Deploying PriceFeedKeeper...${NC}" if [ -z "$KEEPER_ADDRESS" ]; then forge script script/reserve/DeployKeeper.s.sol:DeployKeeper \ --rpc-url "$RPC_URL" \ --broadcast \ --verify # Extract keeper address from output KEEPER_ADDRESS=$(forge script script/reserve/DeployKeeper.s.sol:DeployKeeper \ --rpc-url "$RPC_URL" 2>&1 | grep "PriceFeedKeeper deployed at:" | awk '{print $NF}') echo "export PRICE_FEED_KEEPER_ADDRESS=$KEEPER_ADDRESS" >> .env echo -e "${GREEN}✓ PriceFeedKeeper deployed: $KEEPER_ADDRESS${NC}\n" else echo -e "${GREEN}✓ PriceFeedKeeper already deployed: $KEEPER_ADDRESS${NC}\n" fi # Step 2: Deploy Chainlink Keeper Compatible (optional) if [ "$DEPLOY_CHAINLINK" = "true" ]; then echo -e "${YELLOW}Step 2: Deploying ChainlinkKeeperCompatible...${NC}" forge script script/reserve/DeployChainlinkKeeper.s.sol:DeployChainlinkKeeper \ --rpc-url "$RPC_URL" \ --broadcast \ --verify CHAINLINK_KEEPER=$(forge script script/reserve/DeployChainlinkKeeper.s.sol:DeployChainlinkKeeper \ --rpc-url "$RPC_URL" 2>&1 | grep "ChainlinkKeeperCompatible deployed at:" | awk '{print $NF}') echo "export CHAINLINK_KEEPER_COMPATIBLE_ADDRESS=$CHAINLINK_KEEPER" >> .env echo -e "${GREEN}✓ ChainlinkKeeperCompatible deployed: $CHAINLINK_KEEPER${NC}\n" echo -e "${YELLOW}Next: Register with Chainlink Keepers:${NC}" echo "node scripts/reserve/chainlink-keeper-setup.js" echo "" fi # Step 3: Deploy Gelato Keeper Compatible (optional) if [ "$DEPLOY_GELATO" = "true" ]; then echo -e "${YELLOW}Step 3: Deploying GelatoKeeperCompatible...${NC}" forge script script/reserve/DeployGelatoKeeper.s.sol:DeployGelatoKeeper \ --rpc-url "$RPC_URL" \ --broadcast \ --verify GELATO_KEEPER=$(forge script script/reserve/DeployGelatoKeeper.s.sol:DeployGelatoKeeper \ --rpc-url "$RPC_URL" 2>&1 | grep "GelatoKeeperCompatible deployed at:" | awk '{print $NF}') echo "export GELATO_KEEPER_COMPATIBLE_ADDRESS=$GELATO_KEEPER" >> .env echo -e "${GREEN}✓ GelatoKeeperCompatible deployed: $GELATO_KEEPER${NC}\n" echo -e "${YELLOW}Next: Create task with Gelato:${NC}" echo "node scripts/reserve/gelato-keeper-setup.js" echo "" fi # Step 4: Verify deployment echo -e "${YELLOW}Step 4: Verifying deployment...${NC}" forge script script/reserve/CheckUpkeep.s.sol:CheckUpkeep \ --rpc-url "$RPC_URL" echo -e "\n${GREEN}=== Deployment Complete ===${NC}" echo "" echo "Keeper Address: $KEEPER_ADDRESS" echo "" echo -e "${YELLOW}Next Steps:${NC}" echo "1. Start keeper service:" echo " node scripts/reserve/keeper-service.js" echo "" echo "2. Start monitor service:" echo " node scripts/reserve/monitor-keeper.js" echo "" echo "3. Or use Docker:" echo " docker-compose -f docker/docker-compose.keeper.yml up -d" echo "" echo "4. Or use systemd:" echo " sudo systemctl enable price-feed-keeper" echo " sudo systemctl start price-feed-keeper"