Files
smom-dbis-138/docs/deployment/REAL_TIME_GAS_UPDATES.md
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

6.9 KiB
Raw Permalink Blame History

Real-Time Gas Price Updates

Last Updated: 2025-01-27

Overview

This document explains how to use the real-time gas price fetching system to update all deployment cost estimates using live data from configured APIs.

Quick Start

# 1. Fetch real-time gas prices for all chains
./scripts/deployment/get-multichain-gas-prices.sh

# 2. Update all documentation with real-time prices
./scripts/deployment/update-gas-estimates.sh

Scripts

get-multichain-gas-prices.sh

Fetches real-time gas prices from configured APIs and calculates deployment costs.

Features:

  • Fetches gas prices for all 5 chains (Mainnet, Cronos, BSC, Polygon, Gnosis)
  • Uses Etherscan API for Ethereum Mainnet (if configured)
  • Uses RPC endpoints for other chains
  • Calculates costs in native tokens and USD
  • Exports values for use in other scripts
  • Saves data to JSON file for programmatic access

Usage:

./scripts/deployment/get-multichain-gas-prices.sh

Output:

  • Displays current gas prices for all chains
  • Shows deployment cost estimates
  • Exports environment variables
  • Saves JSON file to /tmp/multichain_gas_prices.json

Example Output:

========================================
Multichain Gas Price Fetcher
========================================

Fetching real-time gas prices...
✓ Gas prices fetched

Current Gas Prices:
  Ethereum Mainnet: 25.5 gwei
  Cronos: 1.2 gwei
  BSC: 3.5 gwei
  Polygon: 45.0 gwei
  Gnosis: 2.1 gwei

Deployment Cost Estimates:

Ethereum Mainnet (CCIPLogger only):
  Gas: 3000000 units
  Cost: 0.0765 ETH (~$191.25)

Cronos (all 5 contracts):
  Gas: 8760000 units
  Cost: 10.512 CRO (~$0.84)
...

update-gas-estimates.sh

Updates all documentation files with real-time gas prices and costs.

Features:

  • Reads gas price data from get-multichain-gas-prices.sh
  • Updates GAS_AND_TOKEN_REQUIREMENTS.md
  • Updates TOKENS_AND_CHAINS_SUMMARY.md
  • Updates DEPLOYMENT_QUICK_REFERENCE.md
  • Updates timestamps in all files

Usage:

./scripts/deployment/update-gas-estimates.sh

Prerequisites:

  • Must run get-multichain-gas-prices.sh first (or it will run automatically)

Updated Files:

  1. docs/deployment/GAS_AND_TOKEN_REQUIREMENTS.md

    • Updates gas price tables
    • Updates cost estimates
    • Updates timestamps
  2. docs/deployment/TOKENS_AND_CHAINS_SUMMARY.md

    • Updates recommended balances
    • Updates cost estimates
    • Updates timestamps
  3. docs/deployment/DEPLOYMENT_QUICK_REFERENCE.md

    • Updates quick reference tables
    • Updates minimum balances

Configuration

Required Environment Variables

Add these to your .env file:

# Ethereum Mainnet (for Etherscan API)
ETHERSCAN_API_KEY=your_etherscan_api_key_here
ETH_MAINNET_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY

# Other Chains (RPC endpoints)
CRONOS_RPC_URL=https://evm.cronos.org
BSC_RPC_URL=https://bsc-dataseed1.binance.org
POLYGON_RPC_URL=https://polygon-rpc.com
GNOSIS_RPC_URL=https://rpc.gnosischain.com

Optional: Infura Gas API

If you have an Infura account, you can also configure:

INFURA_GAS_API=your_infura_api_key_here
# Or full URL:
INFURA_GAS_API=https://gas.api.infura.io/networks/1/suggestedGasFees

Gas Price Sources

Ethereum Mainnet

  1. Etherscan Gas API v2 (Primary)

    • Endpoint: https://api.etherscan.io/v2/api?chainid=1&module=gastracker&action=gasoracle&apikey={API_KEY}
    • Returns: SafeGasPrice, ProposeGasPrice, FastGasPrice
    • Uses: FastGasPrice for estimates
  2. RPC Endpoint (Fallback)

    • Uses eth_gasPrice RPC call
    • Via ETH_MAINNET_RPC_URL
  3. Default (Final Fallback)

    • 20 gwei if all APIs fail

Other Chains

  1. RPC Endpoint (Primary)

    • Uses eth_gasPrice RPC call
    • Via *_RPC_URL environment variables
  2. Default (Fallback)

    • Chain-specific defaults:
      • Cronos: 1,000 gwei (1 gwei in ETH terms)
      • BSC: 5 gwei
      • Polygon: 50 gwei
      • Gnosis: 2 gwei

Cost Calculation

Formula

Cost (Native Token) = (Gas Units × Gas Price in Wei) / 10^18
Cost (USD) = Cost (Native Token) × Token Price (USD)

Gas Units

  • Ethereum Mainnet: 3,000,000 gas (CCIPLogger only)
  • Other Chains: 8,760,000 gas (all 5 contracts with 20% buffer)

Exchange Rates

Current approximate rates (update as needed):

  • ETH: $2,500
  • CRO: $0.08
  • BNB: $300
  • MATIC: $0.80
  • xDAI: $1.00

JSON Output Format

The script saves data to /tmp/multichain_gas_prices.json:

{
  "timestamp": "2025-01-27 12:00:00 UTC",
  "gas_prices": {
    "ethereum_mainnet": {
      "gwei": "25.5",
      "wei": "25500000000",
      "gas_units": 3000000,
      "cost_eth": "0.0765",
      "cost_usd": "191.25"
    },
    "cronos": {
      "gwei": "1.2",
      "wei": "1200000000",
      "gas_units": 8760000,
      "cost_cro": "10.512",
      "cost_usd": "0.84"
    },
    ...
  },
  "total_usd": "520.05"
}

Integration with CI/CD

You can integrate this into your deployment pipeline:

#!/bin/bash
# Pre-deployment gas check

# Fetch real-time prices
./scripts/deployment/get-multichain-gas-prices.sh

# Check if costs are acceptable
ETH_COST=$(jq -r '.gas_prices.ethereum_mainnet.cost_eth' /tmp/multichain_gas_prices.json)
ETH_THRESHOLD=0.20

if (( $(echo "$ETH_COST > $ETH_THRESHOLD" | bc -l) )); then
    echo "⚠️  Gas costs are high ($ETH_COST ETH). Consider waiting."
    exit 1
fi

# Proceed with deployment
echo "✓ Gas costs acceptable. Proceeding with deployment."

Troubleshooting

Script Fails to Fetch Gas Prices

  1. Check API Keys:

    echo $ETHERSCAN_API_KEY
    echo $ETH_MAINNET_RPC_URL
    
  2. Test API Endpoints:

    # Test Etherscan API
    curl -s "https://api.etherscan.io/v2/api?chainid=1&module=gastracker&action=gasoracle&apikey=${ETHERSCAN_API_KEY}"
    
    # Test RPC endpoints
    cast gas-price --rpc-url $ETH_MAINNET_RPC_URL
    
  3. Check Network Connectivity:

    ping -c 1 api.etherscan.io
    

Documentation Not Updating

  1. Check File Permissions:

    ls -la docs/deployment/*.md
    
  2. Verify Script Execution:

    ./scripts/deployment/get-multichain-gas-prices.sh
    ./scripts/deployment/update-gas-estimates.sh
    
  3. Check JSON File:

    cat /tmp/multichain_gas_prices.json
    

Best Practices

  1. Update Before Deployment: Always run the scripts before deploying
  2. Monitor Gas Prices: Gas prices fluctuate - check regularly
  3. Use Buffers: Recommended balances include 20-50% buffer
  4. Test on Testnets: Verify everything works before mainnet
  5. Document Changes: Note any manual adjustments to estimates

Last Updated: 2025-01-27