Files
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

151 lines
5.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Cost calculation library
# Usage: source "$SCRIPT_DIR/lib/deployment/costs.sh"
# Source libraries (use absolute path resolution)
LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
[ -z "${PROJECT_ROOT:-}" ] && source "${LIB_DIR}/../common/paths.sh"
[ -z "${log_info:-}" ] && source "${LIB_DIR}/../common/logging.sh"
# Check for required commands
command_exists() {
command -v "$1" &> /dev/null
}
# Default gas requirements (in wei units, can be overridden)
DEFAULT_CCIPWETH9_BRIDGE_GAS="${CCIPWETH9_BRIDGE_GAS:-263000}"
DEFAULT_CCIPWETH10_BRIDGE_GAS="${CCIPWETH10_BRIDGE_GAS:-263000}"
DEFAULT_CONFIGURATION_GAS="${CONFIGURATION_GAS:-200000}"
# Load environment variables
load_env_file() {
local env_file="${PROJECT_ROOT}/.env"
if [ -f "$env_file" ]; then
set -a
source "$env_file"
set +a
fi
}
# Get gas price from multiple sources
get_gas_price() {
local source_type="${1:-auto}" # auto, rpc, infura, default, conservative
load_env_file
local gas_price_wei=""
local gas_price_gwei=""
local source_name=""
case "$source_type" in
rpc|auto)
# Try ETHEREUM_MAINNET_RPC
if [ -n "${ETHEREUM_MAINNET_RPC:-}" ]; then
if command_exists cast; then
gas_price_wei=$(cast gas-price --rpc-url "$ETHEREUM_MAINNET_RPC" 2>/dev/null || echo "")
if [ -n "$gas_price_wei" ] && [ "$gas_price_wei" != "0" ]; then
gas_price_gwei=$(cast --to-unit "$gas_price_wei" gwei 2>/dev/null || echo "")
source_name="ETHEREUM_MAINNET_RPC"
fi
fi
fi
;;
infura|auto)
# Try Infura Gas API
if [ -z "$gas_price_wei" ] && [ -n "${INFURA_GAS_API:-}" ]; then
local api_key="$INFURA_GAS_API"
# Extract API key from URL if needed
if [[ "$INFURA_GAS_API" == *"infura.io"* ]]; then
api_key=$(echo "$INFURA_GAS_API" | sed -n 's|.*/v3/\(.*\)|\1|p')
fi
if [ -n "$api_key" ] && command_exists curl && command_exists jq; then
local response=$(curl -s "https://gas.api.infura.io/networks/1/suggestedGasFees" \
-H "Authorization: Basic $(echo -n :$api_key | base64)" 2>/dev/null || echo "")
if [ -n "$response" ]; then
local standard_gas=$(echo "$response" | jq -r '.standard.maxFeePerGas' 2>/dev/null || echo "")
if [ -n "$standard_gas" ] && [ "$standard_gas" != "null" ] && [ "$standard_gas" != "" ]; then
gas_price_wei="$standard_gas"
if command_exists cast; then
gas_price_gwei=$(cast --to-unit "$gas_price_wei" gwei 2>/dev/null || echo "")
else
gas_price_gwei=$(echo "scale=2; $gas_price_wei / 1000000000" | bc 2>/dev/null || echo "")
fi
source_name="Infura Gas API"
fi
fi
fi
fi
;;
default|auto)
# Fallback to default RPC
if [ -z "$gas_price_wei" ] && command_exists cast; then
gas_price_wei=$(cast gas-price --rpc-url "https://eth.llamarpc.com" 2>/dev/null || echo "")
if [ -n "$gas_price_wei" ] && [ "$gas_price_wei" != "0" ]; then
gas_price_gwei=$(cast --to-unit "$gas_price_wei" gwei 2>/dev/null || echo "")
source_name="Default RPC"
fi
fi
;;
conservative)
# Use conservative estimate (50% above current)
gas_price_wei=$(get_gas_price "auto")
if [ -n "$gas_price_wei" ] && [ "$gas_price_wei" != "0" ]; then
gas_price_wei=$(echo "$gas_price_wei * 1.5" | bc 2>/dev/null || echo "$gas_price_wei")
if command_exists cast; then
gas_price_gwei=$(cast --to-unit "$gas_price_wei" gwei 2>/dev/null || echo "")
else
gas_price_gwei=$(echo "scale=2; $gas_price_wei / 1000000000" | bc 2>/dev/null || echo "")
fi
source_name="Conservative Estimate"
fi
;;
esac
# Final fallback
if [ -z "$gas_price_wei" ] || [ "$gas_price_wei" = "0" ]; then
gas_price_gwei="${DEFAULT_GAS_PRICE_GWEI:-30}"
gas_price_wei=$(echo "$gas_price_gwei * 1000000000" | bc 2>/dev/null || echo "30000000000")
source_name="Fallback Default"
fi
echo "$gas_price_wei|$gas_price_gwei|$source_name"
}
# Calculate cost in ETH
calculate_cost_eth() {
local gas=$1
local gas_price_wei=$2
local cost_wei=$(echo "$gas * $gas_price_wei" | bc 2>/dev/null || echo "0")
local cost_eth=$(echo "scale=10; $cost_wei / 1000000000000000000" | bc 2>/dev/null || echo "0")
echo "$cost_eth"
}
# Calculate cost in USD
calculate_cost_usd() {
local cost_eth=$1
local eth_price_usd="${2:-${ETH_PRICE_USD:-2500}}"
local cost_usd=$(echo "scale=2; $cost_eth * $eth_price_usd" | bc 2>/dev/null || echo "0")
echo "$cost_usd"
}
# Format cost output
format_cost_output() {
local item_name="$1"
local cost_eth="$2"
local cost_usd="$3"
printf "%-30s %18.8f ETH $%15.2f\n" "$item_name" "$cost_eth" "$cost_usd"
}
# Get ETH price (simple version, can be enhanced)
get_eth_price() {
local eth_price="${ETH_PRICE_USD:-2500}"
echo "$eth_price"
}