Files
smom-dbis-138/docs/integration/KEEPER_COMPLETE.md
defiQUG 8dc7562702
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
Update OpenZeppelin contracts submodule to a dirty state
2025-12-12 16:25:54 -08:00

6.4 KiB

Automated Price Feed Keeper - COMPLETE

Date: 2025-01-27 Status: COMPLETE


Summary

Automated price feed keeper system has been successfully implemented. The keeper automatically updates price feeds at regular intervals, ensuring prices stay current for the Reserve System.


Completed Components

1. Keeper Contract

Contract: PriceFeedKeeper.sol

  • On-chain keeper contract
  • Asset tracking
  • Upkeep checking
  • Batch updates
  • Configurable intervals
  • Access control

Features:

  • Tracks multiple assets
  • Checks if updates are needed
  • Performs batch updates
  • Configurable update intervals
  • Gas-efficient batch operations
  • Event logging

2. Keeper Services

Node.js Service: scripts/reserve/keeper-service.js

  • Automatic updates
  • Retry logic
  • Error handling
  • Statistics tracking
  • Graceful shutdown
  • Event parsing

Bash Service: scripts/reserve/keeper-service.sh

  • Simple bash implementation
  • Uses Foundry scripts
  • Basic error handling

3. Deployment Scripts

Scripts Created:

  • DeployKeeper.s.sol - Deploy keeper contract
  • PerformUpkeep.s.sol - Perform upkeep manually
  • CheckUpkeep.s.sol - Check if upkeep is needed

4. Documentation

Guide Created:

  • KEEPER_SETUP.md - Comprehensive keeper setup guide

Quick Start

Step 1: Deploy Keeper Contract

export PRIVATE_KEY=<deployer_private_key>
export RPC_URL_138=<chain138_rpc_url>
export ORACLE_PRICE_FEED=<oracle_price_feed_address>
export RESERVE_ADMIN=<admin_address>
export XAU_ASSET=<xau_token_address>
export USDC_ASSET=<usdc_token_address>
export ETH_ASSET=<eth_token_address>

forge script script/reserve/DeployKeeper.s.sol:DeployKeeper \
  --rpc-url chain138 \
  --broadcast \
  --verify

Step 2: Run Keeper Service

Option A: Node.js Service (Recommended)

# Install dependencies
npm install ethers dotenv

# Set environment variables
export RPC_URL_138=<chain138_rpc_url>
export KEEPER_PRIVATE_KEY=<keeper_wallet_private_key>
export PRICE_FEED_KEEPER_ADDRESS=<keeper_contract_address>
export UPDATE_INTERVAL=30

# Run keeper
node scripts/reserve/keeper-service.js

Option B: Bash Service

export RPC_URL_138=<chain138_rpc_url>
export PRICE_FEED_KEEPER_ADDRESS=<keeper_contract_address>
export UPDATE_INTERVAL=30

./scripts/reserve/keeper-service.sh

Architecture

┌─────────────────────┐
│  Keeper Service     │  (Off-chain)
│  (Node.js/Bash)     │
└──────────┬──────────┘
           │
           │ performUpkeep()
           ▼
┌─────────────────────┐
│  PriceFeedKeeper     │  (On-chain)
│  Contract           │
└──────────┬──────────┘
           │
           │ updateMultiplePriceFeeds()
           ▼
┌─────────────────────┐
│  OraclePriceFeed     │
└──────────┬──────────┘
           │
           │ updatePriceFeed()
           ▼
┌─────────────────────┐
│  ReserveSystem       │
└─────────────────────┘

Features

Asset Tracking

  • Track multiple assets
  • Add/remove assets dynamically
  • Check update status per asset

Batch Updates

  • Update multiple assets per call
  • Configurable batch size
  • Gas-efficient operations

Monitoring

  • Check if upkeep is needed
  • View tracked assets
  • Monitor update intervals
  • Track update statistics

Configuration

  • Configurable update intervals
  • Maximum updates per call
  • Gas buffer configuration
  • Role-based access control

Integration Options

1. Standalone Keeper Service

Run keeper service as a standalone process:

  • Node.js service
  • Bash service
  • Systemd service
  • Docker container

Integrate with Chainlink Keepers:

  • Register upkeep
  • Fund with LINK
  • Automatic execution

3. Gelato Network

Integrate with Gelato Network:

  • Register task
  • Fund with native token
  • Automatic execution

File Structure

contracts/reserve/
└── PriceFeedKeeper.sol          # Keeper contract

script/reserve/
├── DeployKeeper.s.sol           # Deploy keeper
├── PerformUpkeep.s.sol          # Perform upkeep
└── CheckUpkeep.s.sol            # Check upkeep status

scripts/reserve/
├── keeper-service.js            # Node.js keeper service
└── keeper-service.sh            # Bash keeper service

docs/integration/
├── KEEPER_SETUP.md              # Setup guide
└── KEEPER_COMPLETE.md           # This document

Usage Examples

Check Upkeep Status

forge script script/reserve/CheckUpkeep.s.sol:CheckUpkeep \
  --rpc-url chain138

Perform Upkeep Manually

export KEEPER_PRIVATE_KEY=<keeper_private_key>
export PRICE_FEED_KEEPER_ADDRESS=<keeper_address>

forge script script/reserve/PerformUpkeep.s.sol:PerformUpkeep \
  --rpc-url chain138 \
  --broadcast

Track New Asset

keeper.trackAsset(newAssetAddress);

Configure Update Interval

keeper.setUpdateInterval(60); // 60 seconds

Monitoring

Check Keeper Status

// Get tracked assets
address[] memory assets = keeper.getTrackedAssets();

// Check if asset needs update
bool needsUpdate = keeper.needsUpdate(assetAddress);

// Get update interval
uint256 interval = keeper.updateInterval();

Monitor Events

Listen for PriceFeedsUpdated events to track updates.


Security

  • Access control (roles)
  • Reentrancy protection
  • Input validation
  • Gas limit protection
  • Error handling

Next Steps

  1. Keeper contract deployed
  2. Keeper service running
  3. Monitor keeper performance
  4. Set up alerts for failures
  5. Configure additional assets

Conclusion

The automated price feed keeper system is complete and ready for deployment. The keeper will automatically update price feeds at regular intervals, ensuring the Reserve System always has current prices.

Status: READY FOR DEPLOYMENT


References