Files
smom-dbis-138/scripts/deployment/calculate-costs-consolidated.sh
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

218 lines
7.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Consolidated Cost Calculator
# Replaces: calculate-accurate-costs.sh, calculate-accurate-deployment-costs.sh,
# calculate-conservative-costs.sh, calculate-contract-deployment-costs.sh,
# calculate-gas-fees.sh, update-all-cost-estimates.sh, update-cost-estimates.sh,
# finalize-cost-estimates.sh, get-accurate-gas-price.sh, get-conservative-gas-price.sh,
# get-mainnet-gas-prices.sh, get-real-gas-prices.sh, test-etherscan-gas-api.sh
#
# Usage:
# calculate-costs-consolidated.sh [--source TYPE] [--eth-price USD] [--gas TYPE] [--format OUTPUT]
# Sources: auto, rpc, infura, default, conservative
# Gas types: deployment, configuration, total, custom
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/init.sh"
load_env --file "$SCRIPT_DIR/../../.env" ${ENV_PROFILE:+--profile "$ENV_PROFILE"}
SCRIPT_NAME="calculate-costs-consolidated.sh"
SCRIPT_DESC="Calculate deployment costs using costs.sh (supports JSON and text outputs)"
SCRIPT_USAGE="${SCRIPT_NAME} [--source auto|infura|conservative] [--format text|json] [--help]"
SCRIPT_OPTIONS="--source <name> Gas price source (default: auto)\n--format <fmt> Output format (text|json)\n--help Show help"
SCRIPT_REQUIREMENTS="bc, costs.sh library, optional network access for gas feeds"
handle_help "${1:-}"
DRY_RUN="${DRY_RUN:-0}"
net_call() {
if [ "$DRY_RUN" = "1" ]; then
echo "[DRY RUN] simulate network call: $*"; echo ""; return 0
fi
"$@"
}
source "$SCRIPT_DIR/../lib/deployment/costs.sh"
# Defaults
GAS_SOURCE="${GAS_SOURCE:-auto}"
ETH_PRICE_USD="${ETH_PRICE_USD:-$(get_eth_price)}"
GAS_TYPE="${GAS_TYPE:-total}"
CUSTOM_GAS="${CUSTOM_GAS:-}"
OUTPUT_FORMAT="${OUTPUT_FORMAT:-table}"
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--source)
GAS_SOURCE="$2"
shift 2
;;
--eth-price)
ETH_PRICE_USD="$2"
shift 2
;;
--gas)
GAS_TYPE="$2"
shift 2
;;
--custom-gas)
CUSTOM_GAS="$2"
shift 2
;;
--format)
OUTPUT_FORMAT="$2"
shift 2
;;
--help)
cat << EOF
Consolidated Cost Calculator
Usage: $0 [OPTIONS]
Options:
--source TYPE Gas price source (auto|rpc|infura|default|conservative)
Default: auto
--eth-price USD ETH price in USD
Default: \$ETH_PRICE_USD or 2500
--gas TYPE Gas calculation type (deployment|configuration|total|custom)
Default: total
--custom-gas N Custom gas amount (requires --gas custom)
--format FORMAT Output format (table|json|csv)
Default: table
--help Show this help message
Examples:
$0 # Calculate total costs with auto gas price
$0 --source conservative # Use conservative gas estimate
$0 --gas deployment # Only deployment gas
$0 --gas custom --custom-gas 500000 # Custom gas amount
$0 --format json # JSON output
EOF
exit 0
;;
*)
log_error "Unknown option: $1"
exit 1
;;
esac
done
# Get gas price
log_info "Fetching gas price from $GAS_SOURCE source..."
RESULT=$(net_call get_gas_price "$GAS_SOURCE")
gas_price_wei=$(echo "$RESULT" | cut -d'|' -f1)
gas_price_gwei=$(echo "$RESULT" | cut -d'|' -f2)
source_name=$(echo "$RESULT" | cut -d'|' -f3)
log_success "Gas price: $gas_price_gwei gwei (from $source_name)"
echo ""
# Determine gas amounts
case "$GAS_TYPE" in
deployment)
total_gas=$((DEFAULT_CCIPWETH9_BRIDGE_GAS + DEFAULT_CCIPWETH10_BRIDGE_GAS))
items=(
"CCIPWETH9Bridge:$DEFAULT_CCIPWETH9_BRIDGE_GAS"
"CCIPWETH10Bridge:$DEFAULT_CCIPWETH10_BRIDGE_GAS"
)
;;
configuration)
total_gas=$DEFAULT_CONFIGURATION_GAS
items=("Configuration:$DEFAULT_CONFIGURATION_GAS")
;;
total)
total_gas=$((DEFAULT_CCIPWETH9_BRIDGE_GAS + DEFAULT_CCIPWETH10_BRIDGE_GAS + DEFAULT_CONFIGURATION_GAS))
items=(
"CCIPWETH9Bridge:$DEFAULT_CCIPWETH9_BRIDGE_GAS"
"CCIPWETH10Bridge:$DEFAULT_CCIPWETH10_BRIDGE_GAS"
"Configuration:$DEFAULT_CONFIGURATION_GAS"
)
;;
custom)
if [ -z "$CUSTOM_GAS" ]; then
log_error "Custom gas amount required when using --gas custom"
exit 1
fi
total_gas=$CUSTOM_GAS
items=("Custom:$CUSTOM_GAS")
;;
*)
log_error "Invalid gas type: $GAS_TYPE"
exit 1
;;
esac
# Calculate costs
log_section "COST CALCULATIONS"
if [ "$OUTPUT_FORMAT" = "table" ]; then
echo "Gas Price: $gas_price_gwei gwei"
echo "ETH Price: \$$ETH_PRICE_USD/ETH"
echo ""
printf "%-30s %18s %18s\n" "Item" "ETH" "USD"
echo "$(printf '─%.0s' {1..66})"
total_cost_eth=0
for item_info in "${items[@]}"; do
item_name="${item_info%%:*}"
item_gas="${item_info##*:}"
cost_eth=$(calculate_cost_eth "$item_gas" "$gas_price_wei")
cost_usd=$(calculate_cost_usd "$cost_eth" "$ETH_PRICE_USD")
total_cost_eth=$(echo "scale=10; $total_cost_eth + $cost_eth" | bc)
format_cost_output "$item_name" "$cost_eth" "$cost_usd"
done
echo "$(printf '─%.0s' {1..66})"
total_cost_usd=$(calculate_cost_usd "$total_cost_eth" "$ETH_PRICE_USD")
printf "%-30s %18.8f ETH $%15.2f\n" "${GREEN}Total${NC}" "$total_cost_eth" "$total_cost_usd"
echo ""
# Recommended buffer
recommended_eth=$(echo "scale=8; $total_cost_eth * 2" | bc)
recommended_usd=$(calculate_cost_usd "$recommended_eth" "$ETH_PRICE_USD")
log_warn "Recommended Buffer: $recommended_eth ETH (\$$recommended_usd)"
elif [ "$OUTPUT_FORMAT" = "json" ]; then
json_output="{"
json_output+="\"gas_price_gwei\":\"$gas_price_gwei\","
json_output+="\"gas_price_wei\":\"$gas_price_wei\","
json_output+="\"source\":\"$source_name\","
json_output+="\"eth_price_usd\":\"$ETH_PRICE_USD\","
json_output+="\"items\":["
first=true
for item_info in "${items[@]}"; do
[ "$first" = false ] && json_output+=","
first=false
item_name="${item_info%%:*}"
item_gas="${item_info##*:}"
cost_eth=$(calculate_cost_eth "$item_gas" "$gas_price_wei")
cost_usd=$(calculate_cost_usd "$cost_eth" "$ETH_PRICE_USD")
json_output+="{\"name\":\"$item_name\",\"gas\":$item_gas,\"cost_eth\":\"$cost_eth\",\"cost_usd\":\"$cost_usd\"}"
done
json_output+="],"
total_cost_eth=$(calculate_cost_eth "$total_gas" "$gas_price_wei")
total_cost_usd=$(calculate_cost_usd "$total_cost_eth" "$ETH_PRICE_USD")
json_output+="\"total_gas\":$total_gas,"
json_output+="\"total_cost_eth\":\"$total_cost_eth\","
json_output+="\"total_cost_usd\":\"$total_cost_usd\""
json_output+="}"
echo "$json_output" | jq '.' 2>/dev/null || echo "$json_output"
elif [ "$OUTPUT_FORMAT" = "csv" ]; then
echo "Item,Gas,Cost_ETH,Cost_USD"
for item_info in "${items[@]}"; do
item_name="${item_info%%:*}"
item_gas="${item_info##*:}"
cost_eth=$(calculate_cost_eth "$item_gas" "$gas_price_wei")
cost_usd=$(calculate_cost_usd "$cost_eth" "$ETH_PRICE_USD")
echo "$item_name,$item_gas,$cost_eth,$cost_usd"
done
total_cost_eth=$(calculate_cost_eth "$total_gas" "$gas_price_wei")
total_cost_usd=$(calculate_cost_usd "$total_cost_eth" "$ETH_PRICE_USD")
echo "Total,$total_gas,$total_cost_eth,$total_cost_usd"
fi