#!/usr/bin/env bash # Propose contract upgrade via multisig # Usage: ./propose-upgrade.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../../.." && pwd)" source "$PROJECT_ROOT/.env" 2>/dev/null || true MULTISIG_ADDRESS="${1:-}" TARGET_CONTRACT="${2:-}" NEW_IMPLEMENTATION="${3:-}" DESCRIPTION="${4:-Contract upgrade}" if [ -z "$MULTISIG_ADDRESS" ] || [ -z "$TARGET_CONTRACT" ] || [ -z "$NEW_IMPLEMENTATION" ]; then echo "Usage: $0 [description]" echo "" echo "Example:" echo " $0 0x1234... 0x5678... 0x9ABC... 'Upgrade LiquidityPoolETH to v2'" exit 1 fi RPC_URL="${ETHEREUM_MAINNET_RPC:-${RPC_URL:-}}" if [ -z "$RPC_URL" ]; then echo "Error: RPC_URL or ETHEREUM_MAINNET_RPC must be set" exit 1 fi PRIVATE_KEY="${PRIVATE_KEY:-}" if [ -z "$PRIVATE_KEY" ]; then echo "Error: PRIVATE_KEY must be set" exit 1 fi echo "Proposing upgrade via multisig..." echo "Multisig: $MULTISIG_ADDRESS" echo "Target Contract: $TARGET_CONTRACT" echo "New Implementation: $NEW_IMPLEMENTATION" echo "Description: $DESCRIPTION" echo "" # Encode upgrade transaction data # Note: This assumes the target contract uses a standard upgrade pattern # Adjust the function signature based on your upgrade mechanism UPGRADE_DATA=$(cast calldata "upgrade(address)" "$NEW_IMPLEMENTATION") # Create multisig transaction # Note: This uses Gnosis Safe's submitTransaction function # Adjust based on your multisig implementation MULTISIG_CALLDATA=$(cast calldata "submitTransaction(address,uint256,bytes)" \ "$TARGET_CONTRACT" \ "0" \ "$UPGRADE_DATA") echo "Transaction data prepared:" echo "$MULTISIG_CALLDATA" echo "" # Submit transaction (if using cast directly) # For Gnosis Safe, you may need to use their SDK or API echo "To submit this transaction:" echo "1. Use Gnosis Safe web interface, or" echo "2. Use Gnosis Safe SDK, or" echo "3. Call submitTransaction on the multisig contract" echo "" echo "Transaction details:" echo " To: $MULTISIG_ADDRESS" echo " Data: $MULTISIG_CALLDATA" echo " Value: 0 ETH" echo "" # Optional: Create a JSON file with transaction details for manual submission TX_FILE="$SCRIPT_DIR/upgrade-proposal-$(date +%Y%m%d-%H%M%S).json" cat > "$TX_FILE" <