- 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.
218 lines
7.6 KiB
Bash
Executable File
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
|
|
|