Files
smom-dbis-138/scripts/deployment/parse-deployment-output.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

177 lines
6.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Parse Deployment Output
# Extracts contract addresses from Forge deployment output and broadcast logs
set -euo pipefail
# Configuration
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
BROADCAST_DIR="${PROJECT_ROOT}/broadcast"
CONTRACT_ADDRESSES_FILE="${PROJECT_ROOT}/contracts-deployed.json"
# Colors for output
# Logging function
log() {
log_success "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}
error() {
log_error "[ERROR] $1"
exit 1
}
warn() {
log_warn "[WARNING] $1"
}
# Initialize contract addresses file
init_contract_addresses() {
if [ ! -f "$CONTRACT_ADDRESSES_FILE" ]; then
echo "{}" > "$CONTRACT_ADDRESSES_FILE"
fi
}
# Extract contract address from broadcast log
extract_from_broadcast() {
local script_name=$1
local contract_name=$2
local chain_id=${3:-138}
local broadcast_file="${BROADCAST_DIR}/${script_name}/${chain_id}/run-latest.json"
if [ ! -f "$broadcast_file" ]; then
return 1
fi
# Try to extract from transactions
local address=$(jq -r ".transactions[] | select(.contractName == \"$contract_name\" or .contractName == \"${contract_name}Contract\") | .contractAddress" "$broadcast_file" 2>/dev/null | head -n 1 || echo "")
if [ -n "$address" ] && [ "$address" != "null" ]; then
echo "$address"
return 0
fi
# Try to extract from returns
address=$(jq -r ".returns.${contract_name,,}Address // .returns.${contract_name} // empty" "$broadcast_file" 2>/dev/null || echo "")
if [ -n "$address" ] && [ "$address" != "null" ]; then
echo "$address"
return 0
fi
return 1
}
# Parse Deploy.s.sol output
parse_deploy_script() {
log "Parsing Deploy.s.sol deployment output..."
# Check if broadcast log exists
local deploy_script="Deploy.s.sol"
local chain_id=138
# Extract WETH
local weth_address=$(extract_from_broadcast "$deploy_script" "WETH" "$chain_id" || echo "")
if [ -n "$weth_address" ]; then
log "Found WETH address: $weth_address"
jq ".weth = \"$weth_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
# Extract Multicall
local multicall_address=$(extract_from_broadcast "$deploy_script" "Multicall" "$chain_id" || echo "")
if [ -n "$multicall_address" ]; then
log "Found Multicall address: $multicall_address"
jq ".multicall = \"$multicall_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
# Extract Oracle Aggregator
local oracle_address=$(extract_from_broadcast "$deploy_script" "Aggregator" "$chain_id" || echo "")
if [ -z "$oracle_address" ]; then
oracle_address=$(extract_from_broadcast "$deploy_script" "Oracle" "$chain_id" || echo "")
fi
if [ -n "$oracle_address" ]; then
log "Found Oracle address: $oracle_address"
jq ".oracle = \"$oracle_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
# Extract Proxy
local proxy_address=$(extract_from_broadcast "$deploy_script" "Proxy" "$chain_id" || echo "")
if [ -n "$proxy_address" ]; then
log "Found Proxy address: $proxy_address"
jq ".proxy = \"$proxy_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
}
# Parse individual deployment scripts
parse_individual_scripts() {
log "Parsing individual deployment scripts..."
local chain_id=138
# Parse WETH
if [ -f "${BROADCAST_DIR}/DeployWETH.s.sol/${chain_id}/run-latest.json" ]; then
local weth_address=$(extract_from_broadcast "DeployWETH.s.sol" "WETH" "$chain_id" || echo "")
if [ -n "$weth_address" ]; then
log "Found WETH address: $weth_address"
jq ".weth = \"$weth_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
fi
# Parse Multicall
if [ -f "${BROADCAST_DIR}/DeployMulticall.s.sol/${chain_id}/run-latest.json" ]; then
local multicall_address=$(extract_from_broadcast "DeployMulticall.s.sol" "Multicall" "$chain_id" || echo "")
if [ -n "$multicall_address" ]; then
log "Found Multicall address: $multicall_address"
jq ".multicall = \"$multicall_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
fi
# Parse Oracle
if [ -f "${BROADCAST_DIR}/DeployOracle.s.sol/${chain_id}/run-latest.json" ]; then
local oracle_address=$(extract_from_broadcast "DeployOracle.s.sol" "Aggregator" "$chain_id" || echo "")
if [ -z "$oracle_address" ]; then
oracle_address=$(extract_from_broadcast "DeployOracle.s.sol" "Oracle" "$chain_id" || echo "")
fi
if [ -n "$oracle_address" ]; then
log "Found Oracle address: $oracle_address"
jq ".oracle = \"$oracle_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
fi
# Parse CCIP Router
if [ -f "${BROADCAST_DIR}/DeployCCIPRouter.s.sol/${chain_id}/run-latest.json" ]; then
local ccip_address=$(extract_from_broadcast "DeployCCIPRouter.s.sol" "CCIPRouter" "$chain_id" || echo "")
if [ -n "$ccip_address" ]; then
log "Found CCIP Router address: $ccip_address"
jq ".ccipRouter = \"$ccip_address\"" "$CONTRACT_ADDRESSES_FILE" > "${CONTRACT_ADDRESSES_FILE}.tmp" && mv "${CONTRACT_ADDRESSES_FILE}.tmp" "$CONTRACT_ADDRESSES_FILE"
fi
fi
}
# Main function
main() {
log "Parsing deployment output..."
# Initialize contract addresses file
init_contract_addresses
# Parse Deploy.s.sol if it exists
if [ -f "${BROADCAST_DIR}/Deploy.s.sol/138/run-latest.json" ]; then
parse_deploy_script
fi
# Parse individual scripts
parse_individual_scripts
# Display results
log "Contract addresses:"
cat "$CONTRACT_ADDRESSES_FILE" | jq '.'
log "Parsing completed"
}
# Run main function
main "$@"