- 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.
6.9 KiB
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.shfirst (or it will run automatically)
Updated Files:
-
docs/deployment/GAS_AND_TOKEN_REQUIREMENTS.md- Updates gas price tables
- Updates cost estimates
- Updates timestamps
-
docs/deployment/TOKENS_AND_CHAINS_SUMMARY.md- Updates recommended balances
- Updates cost estimates
- Updates timestamps
-
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
-
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
- Endpoint:
-
RPC Endpoint (Fallback)
- Uses
eth_gasPriceRPC call - Via
ETH_MAINNET_RPC_URL
- Uses
-
Default (Final Fallback)
- 20 gwei if all APIs fail
Other Chains
-
RPC Endpoint (Primary)
- Uses
eth_gasPriceRPC call - Via
*_RPC_URLenvironment variables
- Uses
-
Default (Fallback)
- Chain-specific defaults:
- Cronos: 1,000 gwei (1 gwei in ETH terms)
- BSC: 5 gwei
- Polygon: 50 gwei
- Gnosis: 2 gwei
- Chain-specific defaults:
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
-
Check API Keys:
echo $ETHERSCAN_API_KEY echo $ETH_MAINNET_RPC_URL -
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 -
Check Network Connectivity:
ping -c 1 api.etherscan.io
Documentation Not Updating
-
Check File Permissions:
ls -la docs/deployment/*.md -
Verify Script Execution:
./scripts/deployment/get-multichain-gas-prices.sh ./scripts/deployment/update-gas-estimates.sh -
Check JSON File:
cat /tmp/multichain_gas_prices.json
Best Practices
- Update Before Deployment: Always run the scripts before deploying
- Monitor Gas Prices: Gas prices fluctuate - check regularly
- Use Buffers: Recommended balances include 20-50% buffer
- Test on Testnets: Verify everything works before mainnet
- Document Changes: Note any manual adjustments to estimates
Related Documentation
- Gas and Token Requirements - Detailed cost breakdown
- Multichain Deployment Runbook - Complete deployment guide
- Environment Variables Template - .env configuration
Last Updated: 2025-01-27